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
//! The **wall's own RAM** (DESIGN §16.2 as amended by the
//! blast-radius ruling, §5.3): every cross-frame surface that belongs to one
//! workspace rather than to the window.
//!
//! The ruling, verbatim (§3.1): *"workspaces are an entirely separate space;
//! essentially an app-wide blast radius. Different sets of conversations,
//! settings, providers, all of it."* Three surfaces are settings in that sense
//! — brazen's config pane, the §8.3 Login pane, the §9.4 model picker — and
//! bl-c0e2 moved the *files* behind them into the wall while leaving the RAM
//! over those files as one box per window, re-lensed on focus. That was two
//! defects at once (bl-5894): a draft typed in workspace A died when focus
//! moved, and a live sign-in stream, an open picker and a fetched roster from A
//! stayed on screen and actionable under B.
//!
//! **The wall owns the box, so nothing has to be cleared.** A focus change
//! parks this bundle under the workspace it belongs to and takes that
//! workspace's own out ([`ShellState::focus_wall`](super::ShellState::focus_wall));
//! `None` — no workspace focused — is a wall like any other, holding the
//! surfaces' empty answers rather than a special case. Preservation and
//! isolation stop being two rules: A's state is preserved *because* it never
//! left A, and B cannot see it for the same reason.
//!
//! Still RAM (§3.5, §5.3): the map dies with the process, exactly like the one
//! box it replaces. This is the *key*, not persistence — the same shape
//! [`Drafts`](crate::actions::Drafts) already keys the composer by.
use crate;
use crateEnv;
/// One workspace wall's surface RAM: brazen's config pane (its draft, status
/// and provider rows), the Login pane's runner and its live sign-in stream, and
/// the §9.4 model picker (its open flag, role, half-made pick and roster).