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
90
91
92
93
94
95
96
97
98
99
100
101
//! **The live tail at the seat** (DESIGN §7.2, REMOTE §3; bl-54f7, bl-73e7):
//! the model's side of the follow lane, and the wire read and act paths beside
//! it.
//!
//! Text did not stream back in while the model was thinking or writing, and the
//! fix has been rebuilt once. bl-54f7 put a **follower thread in the window**,
//! reading the open `response.json` off disk at 16 ms and folding the result
//! onto the snapshot the frame painted. That was right while the window derived
//! its own content; the remote split (REMOTE §9.7) then moved every §11 read to
//! the wire, and the follower kept running — publishing a fold onto
//! `AppModel::snap` that no seat read any more, and asking for up to sixty
//! repaints a second on behalf of nobody. bl-73e7 deleted it and moved the
//! **mechanism** to the engine (`boundary::follow`), where the same incremental
//! read now answers a held [`Query::Follow`](crate::boundary::Query::Follow).
//!
//! What is left here is the accessor pair a frame needs and nothing else:
//! declare the followed conversation, read whatever fold has landed. The
//! transport is [`wire::lane`](crate::wire::lane); the splice onto the committed
//! transcript is `shell::inspector::reads`, at
//! [`Transcript::with_live`](crate::transcript::Transcript::with_live) — the
//! seam that was built for exactly this split and, until now, had only ever
//! been used on one side of it.
//!
//! **The in-memory carve-out is gone with the follower.** §7.2's live tail used
//! to be RAM the window held and could not re-derive; now it is an answer, like
//! every other thing the frame paints — arriving faster than the derivation
//! does, but arriving over the same wire, from the same fold, described by the
//! same function. There is nothing left to keep a dead end away from, so the
//! rule that guarded it (no accessor from the model to the tail) is retired
//! rather than weakened.
use Arc;
use Snapshot;