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
//! The **birth-config block** (DESIGN §11, §3.4, bl-824e): the parameters a new
//! conversation is born with, painted in the conversation surface's **settings
//! seat** — the bottom stack beside the composer, where every config-shaped row
//! sits since the settings-seat ruling ([`super::settings`], bl-2e18).
//!
//! The block occupies the very rows a selected conversation's settings would:
//! those rows answer "what is this conversation running on", and with nothing
//! selected the same question is "what would one started now run on". It is the
//! general path with an empty selection, not a second surface — and the composer
//! beside it stays one box and one Enter (§11).
//!
//! **The pick is not per-conversation, and the block says so.** lernie 0.0.3's
//! `lernie prompt <repo> <message>` takes no config argument: it resolves
//! `ConfigSource::ConfigBranch("config/default")` itself, so a conversation is
//! always born on that branch's head. There is therefore no start-time scope to
//! write into — a start-time pick IS the §9.4 write, made one gesture before
//! the start instead of after it, and
//! [`birth_sentence`](crate::model_pick::birth_sentence) admits that in one
//! plain sentence above the dropdowns.
//!
//! The picker itself is the §9.4 one, reused inline and **collapsed by
//! default**: the current pair on one weak line with a `change…` affordance
//! beside it, exactly the conversation's own model-line idiom. Coverage-excluded
//! shell glue; the two sentences and the line it paints are composed and tested
//! in `crate::model_pick`.
//!
//! **The work directory is the block's other row** (bl-7927): an editable text
//! box with the default pre-chosen, at the top in the config block rather than
//! at the bottom beside the message. It is an ordinary editable box holding *where the next start
//! runs*, seeded at boot with the bare rung's own resolution — the operator's
//! home dir (§3.4 `~`), spelled out as the absolute path it actually is rather
//! than a tilde nothing in yog expands. Because the default is pre-filled, the
//! path rung is no longer a mode to opt into: leaving the box alone runs exactly
//! where the bare rung would, and editing it moves the next start. The box is
//! the **only** carrier — the composer's copy is gone, not duplicated — and it
//! survives a send, because it is a parameter the block states, not a draft
//! (§5.3 applies to the message, not to this).
//!
//! **bl-7927's "at the top" and the settings-seat ruling do not collide.** What
//! that ruling refused was the box riding the composer as `dir (optional)` — a
//! birth parameter loose in the drafting seat — and its remedy was *"in the
//! config block"*. The block has since moved as a unit, so the row is still in
//! the block and still not in the message box; only the block's own seat
//! changed (§3.4, §11).
use ShellState;
use crateAppModel;
use crateCli;
use Path;
/// Paint the block for the focused workspace. `bz` drives the §9.4 roster
/// query; the §9.3 write the picker's selection fires is a posted gesture and
/// carries no binary of its own (REMOTE §9.8).
pub