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
//! **The claim a start leaves on the selection**, the row it stands in for, and
//! the answer that spends it.
//!
//! Upstream's rule is *a start focuses what it started* (yog's `docs/DESIGN.md`
//! §3.4), and honouring it directly does not work: the minted name is a barrier
//! — every gesture after the receipt may address it — but only once the
//! detached driver has written the conversation's branch, and until then the
//! engine resolves it nowhere. A seat that simply selected it would publish the
//! standing set's third question against an address the engine refuses, and
//! paint the operator's own new conversation as unknown for the whole of a
//! healthy start.
//!
//! So the selection is taken and three things ride with it. None of them is a
//! second pending concept: the claim **is** [`Start`](super::Start) in its
//! [`Started`](super::Phase::Started) phase, read against what is selected, and
//! [`Model::pending`] is that reading — the one row the claim amounts to.
//!
//! - **Nothing is asked about it.** [`Model::asked`] is what
//! `crate::state::Standing` publishes as its third question, and a claimed
//! name is not it. An empty conversation pane is what the world honestly
//! holds; a refusal painted there would be this seat asking a question it
//! knew the answer to.
//! - **A row stands where the conversation will be.** [`Model::rows`] is the
//! list every surface paints and walks, so the row is one row in one list
//! rather than a case each of them carries. It is what nothing observed: no
//! lock, no completed step, flagged uncertain — exactly what the engine's own
//! classifier answers for a conversation it cannot probe. **It must not read
//! `live`**, which would claim a driver this seat has never seen.
//! - **It is spent where it was made.** [`Model::resolve`] retires the claim
//! the moment the engine answers a row under that name, and moves the
//! selection **only while the selection is still the name the claim put
//! there**. A start can take a minute to write its branch, and an operator
//! who read something else in that minute must not be yanked back by their
//! own conversation arriving.
//!
//! **A claim whose row never arrives is inert**, which is what a start whose
//! driver died honestly is: the name stays selected, the row stays faded, and
//! one arrow key leaves it.
use Phase;
use crate;
use crateModel;