ADR 0088: Host slot, attention region and deck cell - taxonomy (do not mix)¶
Status: Proposed
Date: 2026-04-22
Related ADRs¶
| ADR | Role |
|---|---|
| 0017 | zone Mfd vs pages MfdShellView |
| 0021 | PFD/MFD anchors, geography vs telemetry |
| 0047 | CockpitInstrumentDescriptor, slot_id |
| 0050 | [instrument_routing], pfd_primary / mfd_primary |
| 0063 | instrument deck, InstrumentDeckDescriptor, SemanticAnchorId |
| 0068 | row payload vs projection vs slot |
| 0073 | PFD Candidate Directory |
| ## Summary |
- Taxonomy host slot / region / deck cell - do not mix levels.
- Contact with 0068.
Summary: in discussions slot was called both the entire PFD column and small rectangle in the instrument grid. This ADR captures the dilution of levels: what is a host slot in the host wire, what is a region/attention anchor, what is an instrument deck cell - and what not to mix. A multi-tool implementation on a PFD (surface deck composer) is not required to change the meaning of CockpitSlotIds.Pfd without separate agreement (see §4).
1. Context: where the confusion comes from¶
- In the code
CockpitSlotIds.Pfd/Mfdare identifiers forMainWindowHostSurfaceCompositor: no more than oneCockpitInstrumentDescriptorper each such identifier is included in the frame; geographically this is the entire visible PFD (or MFD) column in theDockedGrid, not the "single tile" within it. - In product speech, PFD is zone of primary attention (whole column, separate P+M window, etc.).
- Instrument deck [0063] introduces a named composition "multiple entities in one anchor" with
SemanticAnchorId= for examplepfd- the same word asslot_id, but different level of abstraction (InstrumentDeckDescriptorvs host frame). - In 0068 table row/lane and cell type are already separated; All that remains is to explicitly associate this with the host slot [0047].
Without fixed names, the question again arises: “Is a slot the entire PFD or a cell in the deck?”
2. Solution: canonical levels¶
Below are recommended terms in documentation, ADR, review; in the code, the identifiers (CockpitSlotIds, TOML fields) do not have to match these Russian/English names verbatim, but the meaning** must be mapped.
Rough “staircase” from top to bottom (different branches): window topology / presentation (0017) → attention region (PFD, MFD) → shell page (MfdShellPage, §2.0) - for the secondary circuit; in parallel on the PFD side - host slot (§2.1) and then deck / internal blocks of the device. Page sits above the route “what is the cabin instrument_id in pfd”, otherwise chat would be confused with instrument.
2.0. Shell Page (Page, MfdShellPage)¶
- Definition: navigation inside
MfdShellView- which entire mode occupies the column of the secondary outline: Chat, Terminal, Solution Explorer, Build, ... (Models/MfdShellPage.cs, commandset_mfd_shell_pagein 0030). - Level: above §2.1–2.4: this is not
CockpitSlotIds, notCockpitInstrumentDescriptor, not instrument deck cell. Changing the page is orthogonal to selecting a PFD device in the host frame. - Connection with 0017: Mfd focus area (column/window) ≠ page; chat is page, not “another area” next to the PFD.
- PFD branch: in v1 there is no analog
MfdShellPagefor the PFD column as a switchable set of unrelated UIs: there is basically one mounted cockpit device (§2.1), its internal mosaic is §2.4. For Pfd, call navigation layout, not page stack: contractIPfdLayout+PfdLayoutsinModels/Shell/. For Mfd -IShellPage/IMfdShellPage+MfdShellPageDescriptor(the sameMfdShellPagein VM).
2.1. Host slot (host slot, slot_id in CockpitInstrumentDescriptor)¶
- Definition: unit of instrument routing in the host frame of the main/sub window: where the composer places the relevant
instrument_idto be displayed in a given geometric column zone. - Today (v1): one
instrument_idper host slot; example:CockpitSlotIds.Pfd+CockpitStandardInstrumentIds.WorkspaceNavigationMap. - Map:
MainWindowHostSurfaceCompositor.BuildInstruments→ listCockpitInstrumentDescriptor(InstrumentId, SlotId). - Not to be confused with: small glyph, row in WH table, sub-slot inside Avalonia markup of one
UserControl.
Invariant v1: host slot does not split into multiple slot_ids in the same frame model unless [0047] is expanded explicitly (see §4).
2.2. Region/attention anchor (PFD, MFD, …)¶
- Definition: semantic zone of the cockpit by [0021] - why this part of the screen (primary scan, secondary contour, ...).
- Relation to host slot: for primary/docked columns geography “PFD column” coincides with host slot
pfdas screen area; The anchor explains the role of the zone, the host slot is the attachment point in the frame DTO and the MCP narrative of “mount tool X in Y”.
2.3. Instrument deck and deck cell (deck cell)¶
- Definition [0063]: named composition: an ordered set of cells (grid, stack, stripe) under
SemanticAnchorId. - Deck cell: one position in the layout: stable
cell_id(likeEnvironmentReadinessInstrumentDeck.OrderedCellIds,IdeHealthInstrumentDeck.OrderedSegmentIdsfor the channel IDE Health - analogue in role). - Critical: the deck cell is not a
CockpitSlotIdsin the current contract [0047] unless an explicit mapping "cell → host slot / nested route" is entered. - Purpose: several indicators/tools within the geography of one PFD region (for product decision) - through another layer: either a composite
UserControl(internal layout = not a deck in the host sense), or a future deck host / PFD surface deck compositor (see §3).
2.4. The entire device and internal units (device cells)¶
Orthogonal to §2.3: one instrument_id in the host slot (for example, an intent map in Pfd) itself can be composite - the pilot perceives one instrument, and inside there are several blocks (cells), which contain specific indicators, subgraphs, legend, chrome, signatures (0064 - types of primitives).
- Internal cell / block - unit of layout inside of one cabin instrument; stable id and composition policy are set by the composer of this device (for the mini-map - intent map pipeline, see 0055, 0056), not to be confused with
cell_idinstrument deck at the region level (§2.3). - Meaning for UX: “device = composition of blocks” - then, for example, a graph and a legend for it are two such blocks with explicit layout (reserve for a legend, independent scaling, etc. for the product), and not one indistinguishable mess.
- Implementation (PFD v1 map, Intent Map product): graph/legend partitioning -
CodeNavigationMapInstrumentBlockCompositor+CodeNavigationMapInstrumentBlockDescriptor/CodeNavigationMapInstrumentBlockIdsinServices/CodeNavigation/(stable idscode_navigation.pfd_instrument.block.*); alternative composer with idcode_navigation.workspace_instrument.block.*-CodeNavigationMapWorkspaceInstrumentBlockCompositorinServices/Navigation/. The result of the pipeline isCodeNavigationMapCompositionResult.CodeNavigationMapInstrumentBlocks(afterCodeNavigationMapLayoutStageinCodeNavigationMapCompositor). The drawing is uniform (CodeNavigationMapSceneDrawing), rectangles are consistent withLegendColumnLeft/LegendBlockTopY.
Invariant of terms: deck on PFD = deck of several (cockpit) instruments in the region; block = part of one device. When talking about “cell”, specify: deck cell (region) vs internal cell of the device.
3. Direction of implementation (without fixing a deadline)¶
- Toolbox Composer on one PFD geometry: takes
InstrumentDeckDescriptor(or PFD-specific variant) and projectsinstrument_idto cells; An external host frame can still contain one descriptor onpfdwithinstrument_id= deck host, or - when extending the model - otherwise; selecting a separate iteration after the prototype. - CDS / MCP / snapshot: what is considered an “atom” in a frame (one host instrument vs N internal ones) - contract boundary; update [0008] /
cds-contracttogether with implementation, do not degrade "oneinstrument_idinpfd" undetectably.
4. Rule of distinction: “what is called a slot in a conversation”¶
| Question | Canonical answer (this ADR) |
|---|---|
| “Is the slot the entire PFD?” | Host slot pfd in the sense of [0047] / host frame - yes, this is a route to the column (one selected tool for this area in v1). |
| “A slot is a small cell in the instrument grid?” | No for CockpitSlotIds; name cell deck / cell_id. |
"Is SemanticAnchorId = pfd in InstrumentDeckDescriptor the same as slot_id?** |
Same attention anchor/region, not a duplicate of a separate host slot in the DTO, until the deck is raised into the frame as a separate layer; avoid "two pfd in one frame" in speech without qualification. |
5. Consequences¶
- Documentation, new ADRs, review: use host slot vs deck cell vs PFD region according to table §4.
- 0073 (PFD catalogue) and 0063 remain: this ADR clarifies the terms, does not replace them.
- Code: immediate change of
CockpitSlotIdsnames not required; when a PFD multi-instrument appears - either an internal deck without a newslot_id, or an explicit extension 0047 + entry in the MCP changelog.
6. Rejected alternatives¶
- Read "slot" micro-cell only - breaks the current MCP language/"mount in
pfd" and [0047] without migration. - Rename
CockpitSlotIds.PfdtoPfdColumnand enterPfdCell_0... - possible in the future, but high price; until consensus we use §2–4. - Mix WH line and host slot - already covered in [0068]; we don't repeat.
7. Open questions (do not block Proposed)¶
- Exact wire: one
instrument_id“PFD deck host” vs an array of descriptors inMainWindowHostSurfaceFrame- based on PoC of the composer. - Stable
cell_idfor PFD-desk vs TOML presets - evolution of [0050] / [0063 § deck in presets].
Brief glossary (for copy-paste)¶
| Term | Meaning |
|---|---|
| Page | MfdShellPage - what content of the secondary circuit in the Mfd column (chat, terminal, ...); above host slot [0047]; 0017. |
| Host slot | slot_id in CockpitInstrumentDescriptor / CockpitSlotIds - mount point in host frame; v1: entire PFD (or MFD) column, one selected instrument_id. |
| Region / Attention Anchor | PFD, MFD - cockpit area [0021]; Geography is often 1:1 with host slot, semantics is “zone role”. |
| Instrument deck | Named composition within anchor; SemanticAnchorId = region. |
| Deck cell (cell) | Position in the regional deck; not CockpitSlotIds in v1. |
| Block / internal cell of the device | Unit within one instrument_id (graph, legend, indicator bar); composer of the device, not the host deck. |