pub struct TabRecord {
pub tab_id: String,
pub workspace_id: String,
pub name: String,
pub block_ids: Vec<String>,
pub focused_node_id: String,
pub magnified_node_id: String,
pub rootnode: Option<LayoutNode>,
}Expand description
Phase E.2b — tab as held by the srv reducer’s canonical state.
Tabs are owned by exactly one workspace; the workspace’s
tab_ids field gives the ordering. E.3 adds block_ids so the
tab tracks which blocks live inside it.
Fields§
§tab_id: String§workspace_id: String§name: String§block_ids: Vec<String>Phase E.3 — ordered list of block ids in this tab. Mirrors
the persistent Tab.blockids field.
focused_node_id: StringPhase E.4 (Option A) — focused layout node id. Empty when no
pane in this tab is focused. Mirrors
LayoutState.focusednodeid for the tab’s layout row. Mutated
by Command::SetFocusedNode and bootstrap-loaded from the
LayoutState row at startup. The remaining LayoutState fields
(rootnode/leaforder/pendingbackendactions) stay on the
existing wcore-direct path until Option B.
magnified_node_id: StringPhase E.4 (Option A) — magnified layout node id. Empty when
no pane is magnified (toggle-off). Mirrors
LayoutState.magnifiednodeid.
rootnode: Option<LayoutNode>Phase E.4.B (Option B) — layout tree root.
Mirrors the persisted LayoutState.rootnode. Mutated by the
LayoutClear / LayoutSetTree / LayoutInsertNode /
LayoutDeleteNode reducer arms (and the rest of the 11 in
follow-up PRs). None represents an empty tree (no panes).
Status: scaffolded; bootstrap-loaded. persist:: bootstrap_state_from_wstore populates this from
LayoutState.rootnode at startup. Production writers still
go through the wcore-direct path (per
srv-phase-e4b-implementation-plan-2026-05-03.md Phase 7);
reducer arms mutate this field but no production code
dispatches to them yet — same “no-callers-yet” discipline H.6
follows in the host reducer.
Trait Implementations§
impl StructuralPartialEq for TabRecord
Auto Trait Implementations§
impl Freeze for TabRecord
impl RefUnwindSafe for TabRecord
impl Send for TabRecord
impl Sync for TabRecord
impl Unpin for TabRecord
impl UnwindSafe for TabRecord
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.