Good overview. Two things I'd sharpen:
'use client' marks a boundary, not a subtree. Every module imported into a 'use client' file becomes client too, but you can still pass a server component down through it as children or a prop and it stays on the server. That distinction is what actually decides how much JS ships, and it's the part most people get wrong.
The caching section reads like Next 14. In 15 the default flipped, fetch is uncached unless you opt in, so the "watch out for stale data" framing is now inverted. The more common bug on 15 is refetching on every request because someone expected the old caching to still be there. Worth pinning a version since the behavior is opposite depending on which one you're on.