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
//! The **§3.4 raise claim** (DESIGN §3.4, §7.2; REMOTE §9.7 class 2, bl-7407):
//! the wall a landed start just founded, held until the derivation reads it.
//!
//! Focus is a §3.1 **name** now, and a name resolves against the enumerated
//! workspaces. The raise is the one moment that ordering runs backwards:
//! `lernie new` has returned and the wall exists on disk, but the worker has
//! not enumerated it, so for as long as one derivation takes the focus names a
//! workspace no set carries — and the composer's bare Enter, which resolves the
//! focused name to fire into it, would resolve into the *previous* wall. That
//! is the defect the raise-adoption fix closed (bl-9acf) and it must not
//! re-open.
//!
//! **The answer is the §3.4 start claim's own shape, one noun up** (the
//! operator's ruling on this ball; the synchronous re-derive at the receipt was
//! refused for putting a disk walk on the receipt path). Both are the same
//! thing about different nouns:
//!
//! | | the conversation claim ([`Echo`](super::echo::Echo)) | the wall claim (this) |
//! |---|---|---|
//! | holder | `Option<Echo>`, per-instance RAM (§13.1) | `Option<PathBuf>`, per-instance RAM |
//! | held by | what the fire knows — the minted §3.3 name | what the fire knows — the path it founded |
//! | retired by | the derivation showing the message | the derivation showing the workspace |
//! | folded at | [`echo::compose`](super::echo::compose) | [`echo::compose`](super::echo::compose) |
//!
//! They are one mechanism at one seam, not two: `compose` is *"the one place
//! snapshot and the non-derived facts meet… a third such fact is a third
//! argument here rather than a third mechanism"*, and this is that third
//! argument. They stay two *values* because a raise carries no message and a
//! send raises no wall — the raise's whole content is the path, and folding it
//! into a struct whose every other field is about one message would make both
//! optional inside a value that is neither.
//!
//! Folding rather than resolving at each door is what keeps it one source: the
//! painted snapshot enumerates the raised wall, so `ws_path`, the tab bar, the
//! centre pane and the composer all read the same set and none of them knows a
//! claim exists.
use ;
use crate;
use cratenaming;
use Path;
/// Fold the claimed wall into the snapshot a frame paints: one enumerated
/// [`Workspace`] and the empty tree it honestly has. Named, because a raise
/// founds under yog's own flat names root and only ever there (§3.1) — the
/// operator typed the name and [`validate_workspace_name`](AppModel::validate_workspace_name)
/// already refused any that collides with an existing one, so the fold can
/// never make [`by_leaf`](crate::naming::by_leaf) ambiguous.
///
/// The tree is `or_default()` — no commits, no agents — because that is what a
/// wall raised one instant ago has, and it is what the centre pane should
/// paint: an empty workspace with the keyboard in its composer, not a blank
/// frame.
pub