ADR 0051: Intent-based attention routing (TOML)¶
Status: Accepted · Implemented
Date: 2026-04-16
Related ADRs¶
| ADR | Role |
|---|---|
| 0021 | model of attention zones and their canonical ids |
| 0017 | topology presentation |
| 0050 | declarative placement instrument_id by surface_id+slot_id |
Summary¶
- Intent-based attention routing in TOML - attention routing by intent.
- Communication with capabilities and zones 0021.
Implementation snapshot¶
| Element | Meaning |
|---|---|
| — | section [attention_routing] in bundle UiModes/workspace.toml and overlay .cascade/workspace.toml; intent-id - AttentionRoutingIntentIds |
Context¶
In UiModes/workspace.toml and .cascade/workspace.toml today there is a map of the placement of UI panels by attention zones: the [attention_zone_panels] section specifies panel_id -> attention_zone.
DX problem:
- The user must know internal identifiers (which keys are valid).
- Names in the style of
attention_zones/attention_zone_panelscan easily be confused with another configuration axis: placement of “which cockpit instrument” in slots (see ADR 0050).
It is necessary to clearly separate two independent layers:
- Attention routing: where on the stage to direct the UI intent (example: chat - in
mfd, editor - inforward).
This is about attention flow and geography (pfd/mfd/forward/hud/eicas), but not about “what tool is in the slot”. - Instrument placement: which
instrument_idis mounted insurface_id+slot_id(ADR 0050).
This is about cockpit slot content, but not about panel/intent routing.
Solution¶
Accept an intent-based attention routing configuration and explicitly name the section so that it does not overlap with instrument placement.
1) New section¶
Replace [attention_zone_panels] with:
[attention_routing]
Reasons:
- the word routing directly indicates “routing/where to route”, and not “what is in the slot”;
- does not overlap in meaning with
[instrument_routing](ADR 0050).
2) Keys: “intents”, not internal panel ids¶
Keys are human-readable intent ids (v1 match 1:1 with the current panels, but are treated as intent):
solution_explorerchatgitterminaleditor
Values are canonical zone ids from ADR 0021:
forward,pfd,mfd,hud,eicas
Example:toml
[attention_routing]
solution_explorer = "pfd"
chat = "mfd"
git = "mfd"
terminal = "mfd"
editor = "forward"
3) Link to implementation¶
Inside runtime, routing remains implemented through the panel_id -> AttentionZone map, but TOML specifies intent:
- intent id is normalized and translated into the corresponding
panel_id(internal key). - If the intent is unknown, an explicit diagnostic (log/status) is issued.
4) Layers merge (bundle/repo)¶
As for the current workspace.toml:
- bundle:
UiModes/workspace.toml - repo overlay:
.cascade/workspace.toml
Precedence rule: repo over bundle for matching keys.
Consequences¶
- The config becomes clearer: the user sees intents, and not “magic ids”.
- Terminology does not conflict with ADR 0050 (instrument placement).
- The code model allows for further evolution: the emergence of new intents without disclosing internal panel ids.
editor_hudis fixed as an invariant of the HUD layer insideforwardand is not a custom intent in TOML.
Migration¶
“replace” solution:
[attention_zone_panels]is deprecated and removed when[attention_routing]is implemented.- Transition can support both, but in the v1 implementation it is preferable not to keep two parallel sources of truth.
Open questions¶
- Separate custom routing section in
%LocalAppData%\\CascadeIDE\\settings.toml: is it needed in v1, or is bundle+repo enough?