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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
//! **The window's own panes between frames** (bl-40ec, bl-4c48, bl-d2af;
//! DESIGN §4.21, §4.27, §4.31): the engine's verb table, what a needle found,
//! the trail, and the balls.
//!
//! # Neither has a subject anything on the glass can move
//!
//! `crate::ui::tuning` is about the aimed wall and `crate::ui::records` about
//! the selected conversation, so both are retired when their subject moves.
//! These two are the decision queue's shape (`super::queue`): their ops name
//! no workspace, so the subject is every channel this box holds and no aim or
//! selection can invalidate it. They survive [`super::Model::aim_at`] and
//! [`super::Model::select`] for that reason, which is the same rule those two
//! keep rather than an exception to it.
//!
//! # Two of the three reads are POSTED, not standing, and that is the difference
//!
//! The queue stands on its pane because *what is asking* changes under the
//! operator while they look at it. Neither of these does. A verb table is
//! fixed for the life of an engine build, and a search is an answer to a
//! needle somebody typed — re-asking either on every beat would spend a round
//! trip per channel, forever, on an answer that cannot have changed, and in
//! the search's case would re-scan every store on the box while they are still
//! typing. So each is composed into [`super::Model::outbox`] by the control
//! that asks it, `crate::offframe::poster` fans it over every channel, and the
//! answers replace one channel's section at a time.
//!
//! **The trail is the exception and it is the queue's reason** (bl-4c48): a
//! trail is what is happening, so its read stands while its pane is open. It
//! shares this field because *which channel-wide pane is standing* is one
//! fact; it does not share the cadence, and `crate::state::Open` is where the
//! cadence is decided.
//!
//! # The needle is never spent on firing
//!
//! `crate::ui::composer` clears the draft when a deposit is sent, because it
//! was sent. A search is the unmaking's case instead (DESIGN §4.20): refining
//! a needle is the common act, so clearing the box would charge a retype for
//! every second search. What the pane says these rows answer is the engine's
//! own echoed `needle`, not what the box currently holds, so the two cannot
//! disagree while an operator is mid-edit.
use Model;
use crateHelpRow;
use crateFound;
use crateChannel;
/// **Which of the window's own panes is standing**, if any.
///
/// One field and not a flag apiece. They are mutually exclusive on the glass —
/// each covers the conversation, and the shell paints one — so a set of bools
/// makes *two open at once* a representable state that only the paint order
/// resolves, which is two representations of one fact. It is also the reframe
/// clippy's `struct_excessive_bools` asks for by name, taken rather than
/// suppressed.
///
/// **The ball pane joined them on the trail's terms** (bl-d2af). Two of its
/// four reads name no workspace, which is §4.21's whole definition of this
/// family; the other two name the aimed wall and are that pane's own section
/// rather than a second pane (`super::board`).
///
/// **The trail joined them rather than bringing a flag of its own** (bl-4c48).
/// Its subject is every channel this box holds, which is §4.21's whole
/// definition of this family, so a tenth field would have been a second
/// representation of *which channel-wide pane is standing*. What it does not
/// share is the read's cadence — see the section above, and
/// `crate::state::Open::Trail`, which is where that difference lives.
/// **One channel's answer to *what do you answer to***, and the channel it
/// came down as the client's own stamp.
/// **One channel's answer to a needle**, stamped the same way.