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
//! **The sign-in lane**: one connection held open on the row the login pane is
//! following (REMOTE §8.3, bl-e3c5).
//!
//! It is a thread of its own for [`super::follow`]'s reason verbatim, and the
//! reason is sharper here: a sign-in is **minutes of a human's attention**, so
//! this is the read in this seat whose N takes longest to finish. Putting it in
//! the serial pass would stall the roster, the conversation list and the
//! transcript behind a browser somebody has not got to yet.
//!
//! **Every frame says which row it is about, and the frame decides whether it
//! is still wanted.** A second sign-in on a live pair terminates and replaces
//! the first upstream, so a frame of the old run that arrived after the
//! operator moved on would paint one run's lines under another's name. The
//! guard is a pure comparison at the settle — where what the pane is following
//! is known for certain — rather than a poll here racing the socket.
//!
//! **Closing the pane ends the lane and terminates nothing.** The run is engine
//! RAM, one per workspace × provider, bounded by its own hour sweep (REMOTE
//! §8.3): hanging up is this end saying it has stopped watching, and a run with
//! no lane at all still settles and still writes its `ops.jsonl` row. That is a
//! property this side gets for free and must not re-implement.
use Path;
use crateSignin;
use crate;
use crate;
/// Hold the line on the followed row's sign-in until it moves or the engine
/// ends the stream.
///
/// **The fold's whole lifetime is this call**, exactly as the tail's is: one
/// read is one `tick`, so a lane that dropped re-opens on an empty fold and the
/// engine's own cursor starts at zero — which is why *re-ask replays* needs no
/// rule of its own at either end.
/// Read one frame and, when it is the run, absorb it — answering the fold
/// rather than the append.
///
/// **Decoding happens here, on the lane's own thread**, for `super::follow`'s
/// reason: this is a read whose frames arrive at the provider's pace rather
/// than the asker's, and the settle is the frame's side of the lock.
/// Whether the window is still following this run.
///
/// **Both halves**, because either can move: an operator who aims at another
/// wall has left this sign-in as surely as one who starts another on the same
/// wall — and aiming away retires the pane outright
/// (`crate::ui::Model::retire_login`), which is the same answer reached by the
/// other field.