1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
//! **The follow lane**: one connection held open on the focused conversation.
//!
//! It is a thread of its own for the reason the framing already gives: every
//! answer is a stream, and a follow-class read is the general path with more
//! frames in it — but it is the one whose N never finishes, so putting it in
//! the serial pass would stall every other read behind a question that is
//! *supposed* to stay open.
//!
//! **Every frame says what it is about, and the frame decides whether it is
//! still wanted.** The engine was asked about a conversation and answers about
//! that one, so a tail that arrives after the operator has moved on would paint
//! one conversation's words under another's name. The guard is a pure
//! comparison at the settle — where what is selected is known for certain —
//! rather than a poll here racing the socket it is parked on.
//!
//! What this end still decides is whether to **stay**: returning `false` hangs
//! up, which is the whole of how a follower whose subject moved says so, and it
//! has to, because the next pass is what opens the lane on the new one.
use Path;
use crate;
use crate;
/// Hold the line on the focused conversation until it moves or the engine ends
/// the stream.
///
/// **The fold's whole lifetime is this call**, and that is the whole of how
/// REMOTE §5.5's *"onto an empty fold"* is implemented: one read is one `tick`,
/// so a read boundary needs no flag, no field and no representation anywhere —
/// it is a local variable's scope. The frame is handed the ACCUMULATION, which
/// is why [`crate::ui::Model::live`] can go on replacing rather than accreting:
/// what it receives is already whole.
/// Read one frame and, when it is a tail, absorb it — answering the fold rather
/// than the append.
///
/// **Decoding happens here, on the lane's own thread**, not at the settle: this
/// is the one read whose frames arrive faster than an operator looks, and the
/// settle is the frame's side of the lock. Everything else a held read can
/// answer — a refusal mid-stream, bytes this build cannot read — crosses
/// untouched, because only the tail has anything to accumulate.
/// Whether the window is still looking at what this read is about.
///
/// **Both halves**, because either can move: an operator who aims at another
/// wall has left this conversation as surely as one who picks another
/// conversation on the same wall.