Context
#15165 made the standalone Workstation respond at 1280x900, 900x900, and 900x600 without mutating dockZone.v1. Its inline bands use cqi, but the bottom band remains clamp(140px, 28vh, 200px) and the query container is container-type: inline-size.
That is correct for the standalone viewport tested by #15165, but not for an embedded dock workspace. A child dock host can be 450px tall inside a much taller viewport; vh then sizes against the wrong box. Replacing vh with cqh alone is also insufficient: CSS container units select the nearest eligible query container per axis, and fall back to the small viewport when no eligible axis container exists. An inline-size container is not eligible on the block axis.
A live Workstation CSSOM/getComputedStyle probe made the distinction concrete:
| controlled container |
query-container type |
right-band result |
bottom candidate |
| 1100x600 |
inline-size |
275px via 25cqi |
200px via current viewport-bound rule |
| 700x450 |
inline-size |
220px floor |
200px via current viewport-bound rule |
| 1100x600 |
size probe |
275px via 25cqi |
168px via clamp(140px, 28cqb, 200px) |
| 700x450 |
size probe |
220px floor |
140px floor |
Live latest-open plus all-state GitHub searches for dock container query edge band, nested container cqi cqh, and Workstation host-relative sizing found no equivalent. The only match was closed #15165, whose Out of Scope explicitly excluded generic dashboard edge-band defaults.
The Problem
Dock edge-band policy currently mixes three coordinate systems:
- inline bands are relative to the Workstation root through
cqi;
- the bottom band is relative to the browser viewport through
vh;
- shared dashboard defaults are physical
width / height pixel declarations.
The result is compositional drift: the same dock document behaves differently when the workspace is the viewport versus a child container. It also leaves writing-mode semantics and the shared/app ownership boundary implicit.
The Architectural Reality
DockLayoutAdapter projects reusable .neo-dashboard-dock-edge-band-<edge> hooks and deliberately keeps their cross-extent non-flexing.
Neo.dashboard.Container owns shared dock styling; applications own their semantic min/preferred/max policy.
container-type: inline-size establishes only an inline-axis size-query container.
container-type: size enables both axes but applies size containment; placing it on an auto-sized ancestor can suppress intrinsic sizing or collapse its block extent.
- Workstation's
.workstation-dock-host is a flex child with flex: 1 and a fit layout, making it a stronger candidate than the outer app root for a definite two-axis dock query host.
rem scales policy floors/caps with root typography. It does not encode available space; the fluid term still belongs to cqi / cqb. Local em values would couple dock geometry to incidental descendant font-size changes.
The Fix
Define a reusable, opt-in dock query-host contract and consume it from Workstation.
- Establish a named two-axis size query container on the actual definite-size dock host, not on an auto-sized generic ancestor. Prove that the chosen containment point does not collapse intrinsic layout.
- Change shared edge-band hooks to logical
inline-size / block-size properties backed by overridable dock tokens.
- Keep application policy app-owned: Workstation supplies bounded
clamp(<rem floor>, <cqi/cqb fluid term>, <rem cap>) values while shared CSS supplies conservative defaults.
- Replace the bottom band's viewport dependency with a block-axis container dependency.
- Add a nested-host whitebox journey that varies host size and outer viewport independently.
Contract Ledger
| Surface |
Current authority |
Target contract |
Consumer / evidence |
| dock query host |
Workstation root declares container-type: inline-size; no shared block-axis query contract |
opt-in .neo-dashboard-dock-query-host declares named size containment on a definite-size dock host |
Workstation dock host; computed containerType, non-zero DOMRect |
| shared inline edge extent |
Container.scss applies physical width: 280px to left/right bands |
logical inline-size reads app-overridable left/right dock tokens with shared defaults |
every DockLayoutAdapter edge-band projection |
| shared block edge extent |
Container.scss applies physical height: 200px to top/bottom bands |
logical block-size reads app-overridable top/bottom dock tokens with shared defaults |
every DockLayoutAdapter edge-band projection |
| Workstation density policy |
direct physical width/height declarations under the outer workspace; bottom uses vh |
dock-host tokens use rem floors/caps plus cqi / cqb fluid terms |
Workstation standalone and nested-host cases |
| geometry oracle |
readResponsiveDockGeometry() proves same-page viewport resize only |
additionally controls host and viewport independently and reads computed logical extents |
Workstation whitebox E2E |
Acceptance Criteria
Out of Scope
Mobile topology changes below the existing desktop floor · rewriting dockZone.v1 ratios · JavaScript resize listeners · redesigning pane content · converting unrelated typography or spacing pixels · imposing container-type: size on every generic .neo-dashboard consumer without definite-size proof.
Avoided Traps
- Do not mechanically replace
vh with cqh; without block-axis eligibility it still resolves against the small viewport fallback.
- Do not treat
rem as the fluid responsive dimension.
- Do not put size containment on an intrinsically auto-sized box and assume its content will preserve the block size.
- Do not move app-specific density ratios into the persisted dock model or a universal hardcoded shared constant.
- Do not prove only viewport resize; nested composition requires independently controlled host and viewport dimensions.
Decision Record Impact
Aligned with ADR 0029 §2.5/§2.6: docking remains in src/dashboard, embedded panes remain layout-blind, and applications supply density policy through the shared projection-CSS contract. No ADR amendment or new persisted/runtime model surface is required.
Related
Origin Session ID: adddb25d-fc36-4b08-b9a3-3a62a108cda1
Retrieval Hint: dock edge band host relative container-type size cqi cqb nested Workstation logical inline-size block-size
Context
#15165 made the standalone Workstation respond at 1280x900, 900x900, and 900x600 without mutating
dockZone.v1. Its inline bands usecqi, but the bottom band remainsclamp(140px, 28vh, 200px)and the query container iscontainer-type: inline-size.That is correct for the standalone viewport tested by #15165, but not for an embedded dock workspace. A child dock host can be 450px tall inside a much taller viewport;
vhthen sizes against the wrong box. Replacingvhwithcqhalone is also insufficient: CSS container units select the nearest eligible query container per axis, and fall back to the small viewport when no eligible axis container exists. Aninline-sizecontainer is not eligible on the block axis.A live Workstation CSSOM/getComputedStyle probe made the distinction concrete:
inline-size25cqiinline-sizesizeprobe25cqiclamp(140px, 28cqb, 200px)sizeprobeLive latest-open plus all-state GitHub searches for
dock container query edge band,nested container cqi cqh, andWorkstation host-relative sizingfound no equivalent. The only match was closed #15165, whose Out of Scope explicitly excluded generic dashboard edge-band defaults.The Problem
Dock edge-band policy currently mixes three coordinate systems:
cqi;vh;width/heightpixel declarations.The result is compositional drift: the same dock document behaves differently when the workspace is the viewport versus a child container. It also leaves writing-mode semantics and the shared/app ownership boundary implicit.
The Architectural Reality
DockLayoutAdapterprojects reusable.neo-dashboard-dock-edge-band-<edge>hooks and deliberately keeps their cross-extent non-flexing.Neo.dashboard.Containerowns shared dock styling; applications own their semantic min/preferred/max policy.container-type: inline-sizeestablishes only an inline-axis size-query container.container-type: sizeenables both axes but applies size containment; placing it on an auto-sized ancestor can suppress intrinsic sizing or collapse its block extent..workstation-dock-hostis a flex child withflex: 1and a fit layout, making it a stronger candidate than the outer app root for a definite two-axis dock query host.remscales policy floors/caps with root typography. It does not encode available space; the fluid term still belongs tocqi/cqb. Localemvalues would couple dock geometry to incidental descendant font-size changes.The Fix
Define a reusable, opt-in dock query-host contract and consume it from Workstation.
inline-size/block-sizeproperties backed by overridable dock tokens.clamp(<rem floor>, <cqi/cqb fluid term>, <rem cap>)values while shared CSS supplies conservative defaults.Contract Ledger
container-type: inline-size; no shared block-axis query contract.neo-dashboard-dock-query-hostdeclares namedsizecontainment on a definite-size dock hostcontainerType, non-zero DOMRectContainer.scssapplies physicalwidth: 280pxto left/right bandsinline-sizereads app-overridable left/right dock tokens with shared defaultsDockLayoutAdapteredge-band projectionContainer.scssapplies physicalheight: 200pxto top/bottom bandsblock-sizereads app-overridable top/bottom dock tokens with shared defaultsDockLayoutAdapteredge-band projectionvhcqi/cqbfluid termsreadResponsiveDockGeometry()proves same-page viewport resize onlyAcceptance Criteria
Out of Scope
Mobile topology changes below the existing desktop floor · rewriting
dockZone.v1ratios · JavaScript resize listeners · redesigning pane content · converting unrelated typography or spacing pixels · imposingcontainer-type: sizeon every generic.neo-dashboardconsumer without definite-size proof.Avoided Traps
vhwithcqh; without block-axis eligibility it still resolves against the small viewport fallback.remas the fluid responsive dimension.Decision Record Impact
Aligned with ADR 0029 §2.5/§2.6: docking remains in
src/dashboard, embedded panes remain layout-blind, and applications supply density policy through the shared projection-CSS contract. No ADR amendment or new persisted/runtime model surface is required.Related
Origin Session ID: adddb25d-fc36-4b08-b9a3-3a62a108cda1
Retrieval Hint:
dock edge band host relative container-type size cqi cqb nested Workstation logical inline-size block-size