Expand description
The shared, versioned LayoutDescriptor/SheetLayout/CellLayout serde
shapes (D-05) — the FULL workbook-layout descriptor the bundle’s layout.json
member serializes and the writer replays.
The shared, versioned LayoutDescriptor serde model (Phase 12, Plan 01).
This is the SINGLE shared definition (umya-free, zip-free) the offline
emitter (workbook-compiler::artifact::layout::build_layout_descriptor) and
the serve-time writer (Plan 02) BOTH use — the Codex HIGH #2 single-definition
discipline that artifact_model.rs already follows for CellMap/BundleLock.
Defining it here (and NOT in either the compiler or the served binary) keeps
the descriptor’s serde shape free of any umya/rust_xlsxwriter type: it
derives ONLY over String/Option/Vec/bool/u32/u16/f64.
The descriptor captures the FULL ingested workbook layout (D-05) — a “copy of
the workbook,” not a synthetic minimal stub — so the writer can replay it and
inject the computed values (D-06). It is hashed into the BUNDLE.lock combined
hash exactly like cell_map.json (so the boot integrity check covers it).
The descriptor stores each cell’s A1 addr; the writer converts A1 → the
rust_xlsxwriter (row, col) coordinate via crate::resolve::parse_a1
(RESEARCH Pitfall 3 — never re-parse A1).
Structs§
- Cell
Layout - One captured cell: its A1 address within the owning sheet + the original
formula/value text + the number format + the fill/font ARGBs. Every field is
owned +
Option-where-absent so the writer replays exactly what the offline ingest captured (no umya type crosses this boundary). - Layout
Descriptor - The FULL captured workbook layout (D-05) — the bundle’s
layout.jsonmember. - Sheet
Layout - One captured sheet: its name + visibility + every captured cell + the merges (A1 ranges) + the per-column widths + the hidden columns.
Constants§
- LAYOUT_
DESCRIPTOR_ VERSION - The current
LayoutDescriptorschema version (review item 6 — the descriptor is explicitly versioned + attributable so the writer can refuse a future incompatible shape).