Fix debug channel not closing on the client with Node streams (#94268)
The debug channel's Node streams implementation never closed on the
client. This leaked memory, because the resources held for each debug
channel — the buffered chunks and its entry in the client-side registry,
and the pending reader and stream pipeline on the server — are only
released once the channel closes. It also meant the buffered debug entry
was never persisted to `IndexedDB`, so the bfcache restore test timed
out waiting for it.
The server-side write target forwarded React's writes into the readable
side with `passthrough.push()` and signalled completion with
`passthrough.push(null)`. Because a `PassThrough` is a `Duplex`, pushing
`null` ends only its readable half and leaves the writable half open, so
`writableEnded` stays `false`. The readable is later consumed through
`Readable.toWeb()`, both in `connectReactDebugChannel` and inside
`teeStream`, and `Readable.toWeb()` never closes the resulting web
stream while the writable half is still open. The close therefore never
reached the client, nothing was cleaned up, and the test's
wait-for-persisted step never resolved.
Forwarding through `passthrough.write()` and `passthrough.end()` instead
ends both halves, so the close propagates through the conversion and the
channel closes on the client as expected.
This also re-enables the previously skipped node streams case of the
bfcache regression test, which now passes alongside the web streams
case.