Workspace manager - design
Design B, refined and aligned with the design system of the jupyterlab-extension skill. DQ-21 and DQ-22 were decided by the Star Colonel on 2026-10-29. DQ-02, DQ-04, DQ-05 and DQ-19 were amended by his direction on 2026-10-30, and DQ-23 was added the same day. DQ-28 was added by his direction on 2026-11-01, and DQ-02, DQ-07, DQ-20, DQ-22 and DQ-27 were amended the same day. DQ-29 was decided by the Star Colonel on 2026-11-02, and DQ-02, DQ-05, DQ-10, DQ-18, DQ-21 and DQ-28 were amended the same day. DQ-36 was added by his direction on 2026-11-04, and DQ-02, DQ-28 and DQ-29 were amended the same day; DQ-36 narrows DQ-10. DQ-37 was added the same day, and DQ-06, DQ-07, DQ-21, DQ-24, DQ-30 and DQ-32 were amended with it. DQ-26 was amended the same day by the design system's section divider rule. DQ-26 was amended again on 2026-11-05 by his direction, the last band drawing one line where it meets the status bar. DQ-18, DQ-20, DQ-29 and DQ-31 were amended by his direction on 2026-11-05: the number badge is 18 x 13.5 px and takes its first holder's colour at the 24 % wash, the terminal tooltip always states its workspaces, and the KERNELS and TERMINALS band button opens a shut-down menu. DQ-18 was amended by his direction on 2026-11-06: a held badge draws its outline and number in its holder's colour, the hue at 45 % over --jp-inverse-layout-color1. The same day his direction moved the + New workspace button from the panel header to the WORKSPACES band, left of the eraser (ACC-PANEL-297-NEW-BAND).
1. What the panel is for
The WORKBENCH sidebar replaces the built-in panel Running Terminals and Kernels. It lists every workspace of the server, and inside each workspace its tabs, terminals and kernels, then every kernel, terminal and language server that runs on the server. It is built for a user who runs several projects at once: each project is one workspace, told apart by its workspace colour, and the panel shows what the workspace holds, how old it is and what can be shut down.
2. The panel
The panel is a header band over four section bands. One section is open at a time, and the three lab bands stand at the bottom of the panel only while WORKSPACES is open (DQ-33).
Panel header
- The header is a band 37 px tall on
--jp-layout-color2. Its title reads WORKBENCH in--jp-ui-font-size0at weight 600, uppercase, with 1 px letter spacing, in--jp-ui-font-color1 - Three 24 px buttons follow, in this order: filter, show hidden (an eye) and refresh the four buttons led by new workspace (+) superseded by the owner's 2026-11-06 direction: the + moved to the WORKSPACES band (ACC-PANEL-297-NEW-BAND). Each draws a 14 px glyph in
--jp-inverse-layout-color3; hover and active paint--jp-layout-color3, and an active glyph takes--jp-brand-color1 - The + button on the WORKSPACES band opens the New workspace dialog the + in this panel header superseded by the owner's 2026-11-06 direction (ACC-PANEL-297-NEW-BAND): a name, with the keyboard focus, and an optional short description of at most 100 characters, which is the purpose the card shows. Enter creates, Escape closes without a change
- The filter button shows a field under the header. The field finds anything in the panel: workspace names and purposes, tab paths, terminal process names and kernel types. Hiding the field clears the filter, and a clear button sits inside it
- The eye includes the hidden workspaces in the list. It shows an eye with a stroke while hidden workspaces are included
- Refresh reloads workspaces, terminals, sessions and process names; the button is disabled until the requests return. While the panel is visible it reloads by itself every 10 s
Section bands
- Four bands, in this order: WORKSPACES, KERNELS, TERMINALS and LANGUAGE SERVERS. Each carries its count in brackets after the label: WORKSPACES (6), KERNELS (2), TERMINALS (10), LANGUAGE SERVERS (0)
- A band is the reference panel's content-sized ~24 px surface on
--jp-layout-color2: 4 px above and below a--jp-ui-font-size0line, so it stays shorter than the 37 px panel header; hover--jp-layout-color3. The caret is the reference's text glyph,▾open and▸closed, in a 14 px column in--jp-ui-font-color2on the 4 px inset; the label at 18 px from the edge in--jp-ui-font-size0at weight 600, uppercase, with 1 px letter spacing, and the count 6 px after the label in--jp-ui-font-color2. No drop shadow - WORKSPACES is open by default. A click on a collapsed band opens it and closes the one that was open; a click on the open band closes it, leaving all four closed. The closed set is saved per panel in
localStorage, read and written in try/catch (DQ-04) - The panel body is one flex column of fixed height. An open WORKSPACES section takes the height left between the panel header and the collapsed bands (
flex: 1 1 auto; min-height: 0); any other open section is as tall as its rows and shrinks to keep every band in view (flex: 0 1 auto; min-height: 0), and the band below it follows its last row (DQ-33). The open section's body is the only scroll container (overflow-y: auto), with no reserved scrollbar strip (scrollbar-gutter: auto, DQ-05) and no row cap. A collapsed section keeps only its band; KERNELS, TERMINALS and LANGUAGE SERVERS keep their order after WORKSPACES and never scroll out of view. They stand at the panel bottom only while WORKSPACES is open, with nothing below the LANGUAGE SERVERS band and no empty strip of panel background above the bands; while WORKSPACES is folded they follow it from the top and the free height stands below the last band (DQ-23, DQ-33). No axis has two scroll containers - The end of every band carries a band button. On KERNELS and TERMINALS its name is Shut down and it opens a menu with Shut down all and Shut down detached the single Shut down all dialog on these two bands superseded by the owner's 2026-11-05 direction (ACC-ACCORD-292-SHUTDOWN-MENU); on LANGUAGE SERVERS its name is Shut down all and it opens the confirmation dialog; on WORKSPACES its name is Clean up workspaces (DQ-22) and its glyph is an eraser (DQ-29), and the + New workspace button, the same band button, stands immediately left of it, shown and enabled with the section open or closed; a click, Enter or Space on the + opens the New workspace dialog and never opens or closes the section the eraser as the one WORKSPACES band button superseded by the owner's 2026-11-06 direction (ACC-PANEL-297-NEW-BAND). The button is 22 px square with a 14 px glyph in
--jp-inverse-layout-color3, with no background and no border at rest; disabled it keeps that look at opacity 0.4. The band-end glyphs stand in one column under the WORKBENCH Refresh glyph, and the eraser's ink stands as far from the band's top edge as from its bottom edge. A menu entry and the LANGUAGE SERVERS button open a confirmation dialog and stop nothing by themselves. Detached means held by no workspace, and the Shut down detached entry is disabled when the section holds no such item
Workspace card
- Each workspace is one edge tab (DQ-29): a card 2 px from the panel's left edge and 2 px from the right edge of its list, square at the left with a 2 px right radius. The header carries the workspace hue at 24 % and the body the hue at 9.6 %, both mixed over
--jp-layout-color1, with no rule between them the 30 % and 12 % mixes superseded by the 2026-11-04 owner order (ACC-PANEL-278-TINT-ALPHA). A workspace with no colour paints the plain surfaces: a--jp-layout-color2header over a--jp-layout-color1body - A 4 px strip is the card's left border in the full-strength hue; this window's card paints the same hue, strip and tints as any other card. The palette is the coloured tabs extension's default palette at 1.4 saturation, with rose 2 degrees pinker, peach 3 points darker, lemon 1 point lighter and 2 degrees cooler, and mint 2 points darker, so rose and peach read apart. The six hues stand once on
:root, with no theme branch, and each theme's layout colour sets the tints (DQ-28). The strip and the tints together are what tell workspaces apart - The first header line carries the triangle, the name with its row count in brackets, the age and the eye. While the card is open a second line carries the purpose; a filter adds the (N of M) line the count chips and the second header button superseded by the 2026-11-04 owner order (ACC-ACCORD-276-NAME-COUNT, ACC-ACCORD-283-NO-DOTS)
- Several cards stay open at once: a triangle opens or closes only its own card and every other open card stays open, and a click on another workspace's header still switches this window (ACC-ACCORD-241-MANY-OPEN). Inside a filter every matching card is open until its triangle closes it, and clearing the filter restores the cards the unfiltered view had open
- The name is
--jp-ui-font-size1at weight 400. The age reads now, Nm ago, Nh ago, Nd ago, Nmo ago or Ny ago, at--jp-ui-font-size0as a row's time does (DQ-21), and never stands empty; a hidden card shows the word hidden in its place, at the same size. On a coloured card the name, the triangle and the glyphs take--jp-inverse-layout-color0, the count and the purpose--jp-inverse-layout-color1and the age--jp-inverse-layout-color2(DQ-29, DQ-37) the age at--jp-inverse-layout-color1superseded on 2026-11-04; on a plain card the name takes--jp-ui-font-color1and the age--jp-ui-font-color2. The name and the purpose start at the left edge of the row labels below them - The row count stands in brackets right after the name: the open tabs plus the terminals. A kernel takes no count and the header carries no count glyph the three count chips with their glyphs superseded by the 2026-11-04 owner order (ACC-ACCORD-276-NAME-COUNT)
- The purpose is the short description of the workspace, at most 100 characters, in
--jp-ui-font-color2on a plain card. It shows while the card is open, and a card with no purpose shows no purpose text - The eye keeps its place on every card: it hides the workspace, and it is disabled on this window's card. No card header carries a ... button: a right-click on the header, the eye included, opens the workspace menu at the pointer, and the context-menu key on the focused header opens it below the header; a hidden card's header opens no menu. Open workspace and Clear workspace are items of that menu (DQ-34) the ... button and the Close all tabs label superseded by the 2026-11-04 owner order (ACC-ACCORD-283-NO-DOTS, ACC-ACCORD-284-CLEAR-WORKSPACE)
- This window's card carries a 2 px
--jp-brand-color2outline inside its own box (outline-offset: -2px) and no other mark, so the card loses no band to the section body's clip (DQ-19)
Rows
- The open card lists its documents and terminals as one flat list with no group label (DQ-29): a terminal is a row with its glyph and process, and a kernel rides on its document's row. The KERNELS and TERMINALS sections stay, so a background terminal or a headless kernel with no tab stays visible and can be shut down there
- A KERNELS row in a band carries a status dot with its word (idle, busy or unknown), a name, its memory and a time the memory on selection only superseded by the 2026-11-04 owner order (ACC-KERNEL-281-ROW-MEMORY). A row in a card carries a 16 px type icon, a name and, where one is known, the time of its last activity; a document with a running kernel adds the status dot with its word, and a terminal adds its process
- A section row and a plain card's row are neutral (DQ-21): the name is
--jp-ui-font-size1at weight 400 in--jp-ui-font-color1; the time, the status word and every detail value are--jp-ui-font-size0in--jp-ui-font-color2. A coloured card's row keeps those sizes, with its name in--jp-inverse-layout-color0, its time in--jp-inverse-layout-color3at rest and--jp-inverse-layout-color2on the current, hovered or selected row, and the rest in--jp-inverse-layout-color1(DQ-29, DQ-37) the time at--jp-inverse-layout-color1superseded on 2026-11-04 - Hover and selection paint the card hue at 9.6 % over
--jp-layout-color2the 12 % mix superseded by the 2026-11-04 owner order (ACC-PANEL-278-TINT-ALPHA) on a coloured card's row, and--jp-layout-color2on a plain card's row and a section row (DQ-10). The panel has one selected row - A terminal row shows its tab name, or its process when no tab name is known (DQ-31), in the process slot, with no selection (DQ-24); a TERMINALS row of a numbered terminal shows its number in a small rectangle badge, while a card row drops the tN of a numbered terminal the tN on every terminal row superseded by the 2026-11-04 owner order (ACC-TERM-275-CARD-LABEL); the rectangle badge on a TERMINALS row added by ACC-TERM-285-NUMBER-BADGE. The badge is 18 x 13.5 px and takes the colour of the first workspace holding the terminal in the model's order, at the 24 % wash over
--jp-layout-color1, with its outline and number in that hue at 45 % over--jp-inverse-layout-color1, which holds 4.5:1 on the wash and 3:1 on the section for every colour the number in--jp-inverse-layout-color1, the card ink that holds 4.5:1 on that wash, superseded by the owner's 2026-11-06 direction (ACC-TERM-296-BADGE-INK); a terminal in no workspace and a colourless workspace leave the box empty, in the row ink the 20 x 15 px empty box superseded by the owner's 2026-11-05 direction (ACC-TERM-290-BADGE-TINT), and a named terminal keeps its name. After the process stands the path of the foreground process in the width left over, cut at its start so its end stays in view (DQ-30) - Everything else appears on selection: the kernel type, the document and the CPU, a tab's folder, a card's purpose; a KERNELS row shows its memory in the line, selected or not the memory on selection only superseded by the 2026-11-04 owner order (ACC-KERNEL-281-ROW-MEMORY). The detail line shows under the selected row
- Identifiers - the terminal names of the TERMINALS section, kernel ids and paths - are set in
--jp-code-font-family; a card row's label, a terminal's included, is in the UI font (DQ-18), and so is a terminal row's path (DQ-30) - Recency is carried by the time label alone: now, Nm ago, Nh ago, Nd ago, Nmo ago, Ny ago (DQ-21)
- The only brand colour on a section row or a plain card's row is the focus ring, apart from the current row's pale tint (DQ-36) the focus ring as the only brand colour on a row superseded on 2026-11-04: a 1 px
--jp-brand-color1outline at offset -1px on a section row and a row in a card, so it shows whole at the panel edge, and at offset 1 px on a button, shown for keyboard focus only. On a coloured card the ring on the header, its buttons and its rows takes--jp-inverse-layout-color0, because the brand ring falls to 2.34:1 on the sky surface of a selected row; this window's card header sits 2 px further in (offset -3px)
The panel as it rendered before DQ-23 docked the three lab bands, with the terminal rows and the tabs counter of DQ-24: this window's card open and a KERNELS row selected, with LANGUAGE SERVERS below the fold. The model below draws the card before DQ-28: DQ-02, DQ-21 and DQ-24 at the time, with the workspace colour as a 14 % wash; DQ-28 replaced that wash with the header shade, and DQ-29 replaced that card with the edge tab, which docs/images/panel-full-window.png shows.
The card as DQ-02, DQ-21 and DQ-24 left it before DQ-28 and DQ-29
3. Colours and type
| Part | Surface token | Font colour | Size and weight |
|---|---|---|---|
| Panel | --jp-layout-color1 | --jp-ui-font-color1 | --jp-ui-font-size1 |
| Panel header band | --jp-layout-color2 | title --jp-ui-font-color1; glyph --jp-inverse-layout-color3, active --jp-brand-color1 | title --jp-ui-font-size0, 600, uppercase, 1 px letter spacing; button 24 px with a 14 px glyph |
| Section band | --jp-layout-color2; hover --jp-layout-color3 | label --jp-ui-font-color1; count and caret --jp-ui-font-color2 | label --jp-ui-font-size0, 600, uppercase, 1 px letter spacing |
| Section list | --jp-layout-color1 | empty state --jp-ui-font-color2 | empty state --jp-ui-font-size0, italic |
| Band button | none at rest; disabled at opacity 0.4 | --jp-inverse-layout-color3 | button 22 px square, glyph 14 px: an eraser on WORKSPACES, the power symbol on the three lab bands (DQ-29) the circle outline and one diagonal stroke superseded by DQ-29 |
| Workspace card | edge tab 2 px from the panel's left edge, square at the left with a 2 px right radius; header the hue at 24 % and body the hue at 9.6 %, both over --jp-layout-color1 the 30 % and 12 % mixes superseded by the 2026-11-04 owner order (ACC-PANEL-278-TINT-ALPHA); strip 4 px in the full-strength hue; a plain card's header --jp-layout-color2 and its body --jp-layout-color1 (DQ-29) superseded by DQ-29: body --jp-layout-color1 plain; header in the workspace's muted shade, this window's card the active shade; 1 px --jp-border-color1, 2 px corners; strip 4 px in the same shade; spans the panel width (DQ-28) | - | - |
| Workspace name | - | --jp-inverse-layout-color0 on a coloured card, --jp-ui-font-color1 on a plain card --jp-ui-font-color1 on a coloured card superseded by DQ-29 | --jp-ui-font-size1, weight 400 |
| Workspace purpose | - | --jp-inverse-layout-color1 on a coloured card, --jp-ui-font-color2 on a plain card --jp-ui-font-color2 on a coloured card superseded by DQ-29 | --jp-ui-font-size1, weight 400 |
| Workspace age and row count | - | age --jp-inverse-layout-color2 and the row count --jp-inverse-layout-color1 on a coloured card, --jp-ui-font-color2 on a plain card the age at --jp-inverse-layout-color1 superseded on 2026-11-04 --jp-ui-font-color2 on a coloured card superseded by DQ-29 | age and a hidden card's word --jp-ui-font-size0 (DQ-21), the row count --jp-ui-font-size1 the age at --jp-ui-font-size1 superseded on 2026-11-02 |
| Row | --jp-layout-color1, a coloured card's row the hue at 9.6 % over it; hover and selected --jp-layout-color2, a coloured card's row the hue at 9.6 % over it (DQ-10); the current row --jp-brand-color1 at 14 % over --jp-layout-color1, a coloured card's row the hue at 24 % over it, under hover and selection (DQ-36) the 12 % and 30 % mixes superseded by the 2026-11-04 owner order (ACC-PANEL-278-TINT-ALPHA) hover and selected --jp-layout-color2 on a coloured card superseded on 2026-11-02 | name --jp-ui-font-color1; time, status word and detail --jp-ui-font-color2; on a coloured card name --jp-inverse-layout-color0, time --jp-inverse-layout-color3 at rest and --jp-inverse-layout-color2 on the current, hovered or selected row, and the rest --jp-inverse-layout-color1 the time at --jp-inverse-layout-color1 superseded on 2026-11-04; identifiers --jp-code-font-family, a card row's label the UI font (DQ-18) | name --jp-ui-font-size1, weight 400; time and detail --jp-ui-font-size0 |
| Row focus | 1 px --jp-brand-color1 outline, offset -1px on a section row and a row in a card, offset 1 px on a button; this window's card header -3px | --jp-brand-color1, on a coloured card's header, buttons and rows --jp-inverse-layout-color0, :focus-visible only | :focus-visible only |
| Dialog | --jp-layout-color1, 2 px corners | primary text --jp-ui-font-color1 | --jp-ui-font-size1 |
| Dialog footer | one filled --jp-brand-color1; Cancel a surface button on --jp-layout-color1 with a 1 px --jp-border-color1; a destructive action unfilled in --jp-error-color1 at the far left | - | - |
| Dialog state line | --jp-layout-color2 with a 2 px left border in the state colour | --jp-ui-font-color1 | --jp-ui-font-size1 |
| Banner | --jp-error-color1 at 15% over the panel, border at 35% | --jp-ui-font-color1 | --jp-ui-font-size1 |
| Destructive menu entry | - | label and icon --jp-error-color1 | --jp-ui-font-size1 |
| Workspace colours | rose #f191ae; peach #dfa465; lemon #cbc061; mint #73c973; sky #62c0f5; lavender #be9fe4, one value each on :root, with no theme branch; each mixes over the theme's layout colour (DQ-28, DQ-29) superseded by DQ-29: rose #f1b2c4 (#f191ae active); peach #e5ba90 (#dfa465); lemon #d5cea2 (#cbc061); mint #a7cfa5 (#73c973); sky #98cff2 (#62c0f5); lavender #cebbe7 (#be9fe4), light on :root and dark in one [data-jp-theme-light='false'] block (DQ-28) | - | stored names unchanged |
4. Dialogs
A dialog has one filled button at most, and Cancel is always a surface button. A destructive action is unfilled, with error-coloured text and border, at the far left (DQ-14).
Delete confirmation
- Delete workspace sits in the workspace menu, with a bin icon before its label, and is drawn in
--jp-error-color1at rest and while selected (DQ-11) - The first click arms it: the item reads Confirm delete and shows a warning icon in place of the bin, in
--jp-error-color1. The second click deletes the workspace - It never runs on this window's workspace, and the panel refuses it on a workspace another window shows, naming the reason
- The menu's Shut down terminal and Shut down kernel entries are destructive entries too, drawn in
--jp-error-color1
Shut-down confirmation
- Every band button named Shut down all opens one confirmation before anything stops. The band asks once with the number of items; a row action names the item: "Shut down terminal 7?"
- A terminal or kernel that another workspace also holds is named with that workspace: "Shut down terminal 7? Workspace auto-6 also holds this terminal."
- Shut down is the destructive action, unfilled with
--jp-error-color1text and border at the far left; Cancel is the surface button at the right; no button is filled - A state line in a dialog has padding 6 px 12 px on
--jp-layout-color2and a 2 px left border in the state colour (DQ-15) - Nothing stops until the user confirms
The shut-down confirmation as it renders today: a terminal that another workspace also holds, and the panel's error banner.
Clean-up confirmation
- The WORKSPACES band carries the same band button as the three bands below it, named Clean up workspaces (DQ-22), with the eraser glyph (DQ-29). It is disabled when there is nothing to clean
- The band button opens one confirmation. It lists every workspace with its name and what it holds: each tab by path, each terminal and kernel by name
- Each workspace is marked with its outcome: deleted, emptied for this window's workspace, or kept for a workspace another window shows
- Clean up deletes every workspace except the one this window shows, closing their tabs. It keeps this window's workspace and empties it, closing its tabs and shutting down its kernels, terminals and language servers. A workspace another window shows is kept and named as kept
- Clean up is the destructive action, unfilled with
--jp-error-color1text and border at the far left; Cancel is the surface button at the right. Nothing happens without this confirmation
The clean-up confirmation of DQ-22: the count sentence, the list of workspaces with their contents, a destructive Clean up button and Cancel.
5. Decisions
DQ-01 to DQ-20 were decided by the Star Colonel on 2026-10-28 as the design-system alignment; DQ-21 and DQ-22 on 2026-10-29. DQ-02 and DQ-05 were amended by his 2026-10-30 direction: a card carries its workspace colour as a 14 % wash over the body and the header, and every card and row surface spans the panel width with the text inset as padding. DQ-03 was amended by the same direction to the reference panel's 4 px band padding and its ▾/▸ text caret. DQ-04 and DQ-19 were amended by the same direction: the sections open exclusively, and this window's card paints its outline inside its box. DQ-23 was added the same day and docks the three lab bands at the panel bottom. DQ-28 replaced the 14 % wash with the header shade on 2026-11-01. DQ-29 replaced the card with the edge tab on 2026-11-02, and the refinements measured in Galaxa Dark Theme - Steel the same day amended DQ-02, DQ-05, DQ-10, DQ-18, DQ-21 and DQ-28. Each row states the decision, the design-system rule it adopts and the criteria that govern it.
| Id | Decision | Design-system rule it adopts | Criteria |
|---|---|---|---|
| DQ-01 | Every colour is a --jp-* token, never a literal value; a theme flip changes the same token names, and the extension's CSS has no light or dark branch. The six workspace colours become theme tokens; workspaces stay told apart by colour as far as the tokens allow (table below) the six workspace colours superseded by DQ-27 | Colour tokens: "Read colour only from lab tokens", "A theme flip overrides the same --jp-* names; no light or dark branch in extension CSS"; design-language Colour choice | ACC-PANEL-203-TOKENS-ONLY, ACC-ACCORD-86-OWN-PALETTE, ACC-ACCORD-15-STRIP, ACC-ACCORD-150-COLOUR-SWATCH; rejected ACC-ACCORD-188-STRIP-SATURATION |
| DQ-02 | A card is an edge tab (DQ-29): 2 px from the panel's left edge and from the right edge of its list, square at the left with a 2 px right radius. The header carries the workspace hue at 24 % and the body the hue at 9.6 %, both over --jp-layout-color1, with no rule between them the 30 % and 12 % mixes superseded by the 2026-11-04 owner order (ACC-PANEL-278-TINT-ALPHA); a workspace with no colour paints the plain surfaces. The 4 px strip is the card's left border in the full-strength hue the 14 % wash superseded by DQ-28 earlier wording, superseded by DQ-29: A card has 2 px corners and a 1 px --jp-border-color1 border; the body is the plain --jp-layout-color1 with no wash, and the header carries the workspace's muted shade, which this window's card replaces with the active shade (DQ-28); a workspace with no colour paints the plain surfaces. The 4 px strip is the card's left border in the same shade and the card's only coloured border; the card has no horizontal margin, so the strip sits at the panel edge | Cards & surfaces: "Card: --jp-layout-color1 body plus 1px var(--jp-border-color1)"; Spacing & radius: "Every corner is var(--jp-border-radius) (2px)"; the edge tab of DQ-29 departs from both | ACC-PANEL-242-EDGE-TAB, ACC-ACCORD-69-CARD, ACC-ACCORD-128-STRIP-PLAIN, ACC-ACCORD-129-FLUSH, ACC-PANEL-227-FLUSH-WIDTH, ACC-PANEL-239-HEADER-SHADE; superseded ACC-ACCORD-226-CARD-WASH; rejected ACC-ACCORD-125-SELECTED-SHADE |
| DQ-03 | A section header is a band on --jp-layout-color2: 4 px above and below the text, the reference panel's content-sized ~24 px band, shorter than the 37 px panel header; the caret is the reference's text glyph, ▾ open and ▸ closed, in a 14 px column in --jp-ui-font-color2 on the 4 px inset, the label 18 px from the edge in weight 600, uppercase, 1 px letter spacing, --jp-ui-font-size0; the count in --jp-ui-font-color2 6 px after the label; hover --jp-layout-color3; no drop shadow | Sections & headers; the reference panel ../jupyterlab_ai_code_assistants_extension/style/base.css .jp-AiAssistantsPanel-sectionHeader (padding 4px var(--aica-inset)) and .jp-AiAssistantsPanel-caret (14 px in --jp-ui-font-color2), the glyph from src/core/panel.ts _renderSection; Spacing & radius ("In-flow surfaces take depth from layered --jp-layout-color*, never a drop shadow") | ACC-PANEL-192-SECTION-TITLES, ACC-PANEL-228-BAND-HEIGHT, ACC-PANEL-74-TEXT-SIZE, ACC-PANEL-80-WS-COUNT, ACC-PANEL-168-COUNT-BRACKETS, ACC-PANEL-152-NARROW-LABELS |
| DQ-04 | The four sections open exclusively: at most one is open at a time; opening a collapsed section closes the one that is open; clicking the open section's header closes it and leaves all four closed; WORKSPACES is the default open section; the closed set is saved per panel in localStorage, read and written in try/catch; the focused band draws its focus ring inside the band (offset -1px), so the ring shows whole at the panel edge and no z-index rule is needed | Sections and scroll: "sections open exclusively, one at a time"; Sections & headers: "The state is saved per panel in localStorage"; WORKSPACES as the default open section is the Star Colonel's 2026-10-30 direction | ACC-PANEL-182-SECTION-HEADS, ACC-PANEL-208-SECTION-STORE, ACC-PANEL-8-POLL, ACC-PANEL-229-EXCLUSIVE; rejected ACC-PANEL-137-OTHERS-CLOSED |
| DQ-05 | Each section's list is its own scroll container (overflow-y: auto; min-height: 0), its header sticks at the top (position: sticky; top: 0), and it reserves no scrollbar strip (scrollbar-gutter: auto), so a card stands 2 px from both sides of the list. When a list overflows, its scrollbar takes its width and the cards narrow by that width. Never two scroll containers on one axis; every section row spans the panel width with the text inset as padding, and a card stands 2 px inside that width (DQ-29) earlier wording, superseded by this amendment on 2026-11-02: Each section's list is its own scroll container (overflow-y: auto; min-height: 0), its header sticks at the top (position: sticky; top: 0), scrollbar-gutter: stable as the reference panel keeps it, height clamp(5 rows, 33vh, 10 rows); never two scroll containers on one axis; every card and row surface spans the panel width with the text inset as padding | Panel construction, Sections and scroll | ACC-PANEL-90-SCROLL, ACC-PANEL-227-FLUSH-WIDTH, ACC-PANEL-8-POLL |
| DQ-06 | The panel header is the standard side panel header's 37 px band on --jp-layout-color2: the default 32 px toolbar, the 2 px padding above and below, and the 1 px border; the title WORKBENCH is weight 600, uppercase, 1 px letter spacing, --jp-ui-font-size0 | Sections & headers: "Header 24-30px on --jp-layout-color2"; Panel construction, Header; the standard .jp-SidePanel-header of JupyterLab 4.6 | ACC-PANEL-201-HEADER-BAND, ACC-PANEL-152-NARROW-LABELS, DEF-PANEL-84-HEADER-HEIGHT |
| DQ-07 | The root and primary text are --jp-ui-font-color1; meta text, counts, a section caret, a plain card's caret and empty states are --jp-ui-font-color2. The 4.5:1 contrast floor of section 4 goes. One exception: on a coloured card the name, the caret and the glyphs take --jp-inverse-layout-color0; the counts, the purpose and the hidden word take --jp-inverse-layout-color1; the header's age takes --jp-inverse-layout-color2, a row's age --jp-inverse-layout-color3 at rest, and a current or hovered or selected row's age --jp-inverse-layout-color2 (DQ-29, DQ-37) the --jp-ui-font-color1 on a coloured card header superseded by DQ-29 | Panel construction, Theme contract and Root | ACC-PANEL-202-TEXT-COLOURS, ACC-PANEL-239-HEADER-SHADE; rejected ACC-PANEL-73-TEXT-CONTRAST |
| DQ-08 | An empty state is italic, --jp-ui-font-color2, --jp-ui-font-size0 | Panel construction, Rows (empty state) | ACC-PANEL-75-NO-ITALIC, ACC-PANEL-74-TEXT-SIZE |
| DQ-09 | Ages read now, Nm ago, Nh ago, Nd ago, Nmo ago, Ny ago, and never without a time. Under 60 s the name and the time are --jp-brand-color1 with jp-mod-recentlyActive; over 7 days the row label alone is at opacity 0.65 with jp-mod-stale, and the card name keeps full opacity. The brand colour 2 dot before "now" goes | Lists & rows, Recency emphasis and Time labels | ACC-ACCORD-20-AGE, ACC-ACCORD-130-NOW-DOT |
| DQ-10 | A hovered or selected row in a coloured card is the card hue at 9.6 % over --jp-layout-color2 the 12 % mix superseded by the 2026-11-04 owner order (ACC-PANEL-278-TINT-ALPHA), so the row keeps the card's hue, and a stale label there takes full opacity; in a plain card and a section both are --jp-layout-color2; there is no veil of the text colour earlier wording, superseded for a coloured card by this amendment on 2026-11-02: A hovered row is --jp-layout-color2, with no veil of the text colour; a selected row is --jp-layout-color2 | Panel construction, Theme contract ("Header, band, hover"); Lists & rows ("selected on layout-color2"), which a coloured card's row departs from | ACC-LISTS-211-ROW-HOVER, ACC-LISTS-210-ROW-SELECT, ACC-PANEL-249-CONTRAST |
| DQ-11 | Delete workspace draws label and icon in --jp-error-color1 at rest and while selected, through a danger class in its command's className; armed it reads Confirm delete with jp-mod-confirm in --jp-error-color1. The row entries Shut down terminal and Shut down kernel are destructive entries too | design-language Destructive menu entry and Two-step destructive action; Dialogs & popups build notes | ACC-ACCORD-148-MENU-ICONS, ACC-ACCORD-155-ARMED-COLOUR, ACC-LISTS-212-DANGER-ENTRIES |
| DQ-12 | The card header counts as a header: every header and toolbar icon keeps its place on every view; an icon that does not apply is disabled, never removed. the eye shows on every card at all times; no card carries a Close all tabs or ... button the Open workspace and Close all tabs icons removed and this rule narrowed to the eye and ... by DQ-34 on 2026-11-03 the ... button superseded by the 2026-11-04 owner order (ACC-ACCORD-283-NO-DOTS); the eye alone stays | design-language Header icons never hide between views; Panel construction, Icon states (Disabled: "Glyph holds its place") | ACC-ACCORD-98-HOVER-ACTIONS, ACC-HIDDEN-213-EYE-TOGGLE, ACC-PANEL-214-HEADER-PLACE, ACC-ACCORD-167-NO-BUTTONS; rejected ACC-ACCORD-153-HOVER-NAME |
| DQ-13 | A status dot has its word in the line, in the title and in the aria-label, kernel rows in cards included | Badges & indicators ("Colour never carries meaning alone"); icon inventory, status dot | ACC-KERNEL-49-STATE, ACC-KERNEL-48-ROW |
| DQ-14 | In the New workspace, Set description and shutdown dialogs the affirmative action is the only filled button; Cancel is the surface button; a destructive action is unfilled with error-coloured text and border at the far left; the focus rim shows for keyboard focus only | design-language One-primary dialog footer; references/dialog-controls.md, footer classes | ACC-PANEL-204-DIALOG-FOOTER |
| DQ-15 | An inline panel message is a banner: color-mix(in srgb, var(--jp-error-color1) 15%, transparent) background and a border of the same token at 35 percent. A state line in a dialog has padding 6px 12px on --jp-layout-color2 with a 2 px left border in the state colour. The error-colour dot of section 5 goes | Banners; design-language Dialog status accent line | ACC-PANEL-96-LOAD-ERROR, ACC-PANEL-205-DIALOG-STATE |
| DQ-16 | A header button draws a 14 px glyph in a 24 px button; the card header's buttons as well, since the card header counts as a header | Panel construction, Header ("actions 24x24, glyph 14x14"); Icons ("14px in buttons") | ACC-PANEL-147-HEADER-ORDER, ACC-PANEL-214-HEADER-PLACE |
| DQ-17 | Every row, KERNELS rows included, carries only a status dot, a name and a time; everything else - the terminal's process, the kernel type, the document and the CPU, a card's purpose - appears on selection; a KERNELS row shows its memory in the line, selected or not the memory on selection only and the counts superseded by the 2026-11-04 owner order (ACC-KERNEL-281-ROW-MEMORY, ACC-ACCORD-276-NAME-COUNT). Replaces the 2026-10-26 requirement that KERNELS rows show memory and CPU in the row the terminal's process superseded by DQ-24 | Side panel: "Default rows carry only a status dot, name and time; everything else appears on selection". The 2026-11-04 owner order (ACC-KERNEL-281-ROW-MEMORY, ACC-KERNEL-282-TOOLTIP-MEMORY) returns the memory to the KERNELS row and its tooltip | ACC-LISTS-209-ROW-LINE, ACC-LISTS-210-ROW-SELECT, ACC-TERM-42-PROCESS, ACC-TERM-44-PROCESS-UNREAD, ACC-TERM-46-NAME, ACC-TERM-113-PROCESS-LIVE, ACC-KERNEL-48-ROW, ACC-KERNEL-156-DISPLAY-NAME, ACC-KERNEL-196-KERNEL-DETAILS, ACC-ACCORD-18-PURPOSE, ACC-ACCORD-22-COUNTS, ACC-ACCORD-70-COUNT-TABS, ACC-ACCORD-99-PURPOSE-DIALOG, ACC-PANEL-181-PURPOSE-WRAP, ACC-LISTS-154-TAB-SHRINK, ACC-DOCS-186-SHOT-CURRENT, ACC-PANEL-157-OTHERS-ACTIONS, ACC-LISTS-109-CONSOLE, ACC-ACCORD-97-ELLIPSIS, ACC-KERNEL-151-ROW-CLICK, ACC-LISTS-104-ROW-MENU |
| DQ-18 | Identifiers - the terminal names of the TERMINALS section, kernel ids, paths - are set in --jp-code-font-family. A card row's label is in the UI font, a terminal's included, because a card lists tabs marked by type and the icon and the word terminal already mark it earlier wording, superseded for a card row by this amendment on 2026-11-02: Identifiers - terminal names, kernel ids, paths - are set in --jp-code-font-family. A numbered terminal's badge in TERMINALS is an 18 x 13.5 px box: held by a workspace it takes that workspace's colour at the 24 % wash over --jp-layout-color1 with its outline and number in that hue at 45 % over --jp-inverse-layout-color1, the largest step of 5 % at which the number holds 4.5:1 on the wash and the outline 3:1 on the section for all six colours in JupyterLab Light, JupyterLab Dark and Galaxa Dark Theme - Steel, the lowest 4.87:1 and 5.60:1 on lemon in Light the number in --jp-inverse-layout-color1, the card ink that holds 4.5:1 on that wash, superseded by the owner's 2026-11-06 direction (ACC-TERM-296-BADGE-INK), and a terminal in no workspace or a colourless workspace keeps the empty box in the row ink the owner's 2026-11-05 direction (ACC-TERM-290-BADGE-TINT) | Panel construction, Rows ("identifiers --jp-code-font-family") | ACC-PANEL-206-CODE-FONT |
| DQ-19 | The focus outline sits 1 px outside the element, and 1 px inside it only within cards, where the card clips its content. On a coloured card header the ring takes --jp-ui-font-color1, because the brand ring falls under 3:1 on the shade; every other focus ring keeps --jp-brand-color1. This window's card paints its 2 px --jp-brand-color2 outline inside its own box (outline-offset: -2px), so the flush card loses no band to the section body's clip the outside focus outline of a section band and a section row superseded by DQ-26 the --jp-ui-font-color1 ring on a coloured card header superseded by DQ-29 | Panel construction, Icon states (Focus: "1px --jp-brand-color1 outline, offset 1px, :focus-visible only"); DQ-02's flush card, whose section body overflow clips anything drawn outside its box | ACC-PANEL-93-FOCUS, ACC-PANEL-231-OUTLINE-INSIDE |
| DQ-20 | Shut down all on the KERNELS, TERMINALS and LANGUAGE SERVERS bands is a clear-console icon button: clearIcon from the extension's src/icons.ts, a circle outline with one diagonal stroke as the Clear console glyph of the Chrome developer tools, 22 px square with a 14 px glyph in --jp-inverse-layout-color3, no background and no border at rest, its accessible name Shut down all in aria-label and title, the band's height unchanged. Disabled it keeps that look at opacity 0.4. The error colour stays off the button at rest, because the design system gives it to destructive menu entries and to dialog actions, and this button opens the confirmation dialog the clear-console glyph superseded by DQ-29 the single Shut down all button and dialog on KERNELS and TERMINALS superseded by the owner's 2026-11-05 direction: there the button is named Shut down and opens a menu with Shut down all and Shut down detached, detached meaning held by no workspace, the Shut down detached entry disabled when the section holds no such item; LANGUAGE SERVERS keeps this direct Shut down all dialog (ACC-ACCORD-292-SHUTDOWN-MENU) | Panel construction, Icon states (Inactive: glyph --jp-inverse-layout-color3; Disabled: opacity 0.4, cursor default, glyph holds its place; Focus: 1 px --jp-brand-color1 outline at offset 1 px); Icons ("14px in buttons"); design-language Destructive menu entry | ACC-PANEL-157-OTHERS-ACTIONS, ACC-LISTS-110-SHUTDOWN-ALL, ACC-PANEL-240-CLEAR-CONSOLE |
| KERN-02 | Where a KERNELS row shows its document, a long file name shows whole at a 300 px panel, and the kernel type and the folder give way first. Replaces the 2026-10-26 shrink order "Type keeps a minimum" | Panel construction, Rows ("only the text span ellipsises") | ACC-KERNEL-196-KERNEL-DETAILS, ACC-LISTS-154-TAB-SHRINK |
| OPT-1 | The terminals route leaves out a terminal whose pty has ended (pty.ptyproc.terminated, or not isalive()). This replaces the panel's map of shut-down terminals, the route's fingerprint cache, fingerprint() and the fingerprint field; the row of a shut-down terminal leaves at the panel's next load in every window | design-language Timing independence | ACC-TERM-200-ROW-LEAVES |
| OPT-2 | iconButton stops the propagation of Enter and Space only, so the arrow keys reach the row from a button inside it | Panel construction, Rows ("one tab stop per section, roving tabindex") | ACC-PANEL-207-BUTTON-ARROWS, ACC-LISTS-104-ROW-MENU |
| DQ-21 | Rows are neutral, as the share files extension draws them: its item name is --jp-ui-font-size1 in --jp-ui-font-color1 with no weight rule, its meta is --jp-ui-font-size0 in --jp-ui-font-color2, its row hover is --jp-layout-color2, and the only brand colour on a row is the focus ring, apart from the current row's pale tint (DQ-36) the focus ring as the only brand colour on a row superseded on 2026-11-04. The workspace name is --jp-ui-font-size1 at normal weight in --jp-ui-font-color1; the purpose is --jp-ui-font-color2; recency is carried by the time label alone. This holds for a section row and a plain card, whose time keeps --jp-ui-font-color2; a coloured card takes the inverse-token ink and focus ring of DQ-29 and the row surface of DQ-10, with the header's age in --jp-inverse-layout-color2, a row's age in --jp-inverse-layout-color3 and a hovered or selected row's age in --jp-inverse-layout-color2 (DQ-37). The age in a card header and a hidden card's word are meta text at --jp-ui-font-size0, as a row's time is, so the name keeps that width. DQ-21 supersedes the colour clause of DQ-09 and nothing else of DQ-09 the neutral row on a coloured card superseded by DQ-29; the header age at the name's size superseded on 2026-11-02 | Lists & rows, Recency emphasis and Time labels; the share files extension's row (../jupyterlab_share_files_extension/style/base.css) | ACC-ACCORD-20-AGE, ACC-ACCORD-130-NOW-DOT, ACC-PANEL-74-TEXT-SIZE |
| DQ-22 | The WORKSPACES band carries the same clear-console button as the three bands below it, named Clean up workspaces. It deletes every workspace except the one this window shows, closing their tabs; it keeps this window's workspace and empties it, closing its tabs and shutting down its kernels, terminals and language servers; a workspace another window shows is kept and named as kept; and nothing happens without a confirmation that lists, for every workspace, its name and what it holds - the tabs by path, the terminals and kernels by name. The button is disabled when there is nothing to clean the clear-console glyph superseded by DQ-29 | Icons (14 px in buttons); Panel construction, Icon states (Inactive and Disabled); design-language Destructive menu entry, Dialog status accent line and One-primary dialog footer | ACC-ACCORD-221-CLEAN-BUTTON, ACC-ACCORD-222-CLEAN-DIALOG, ACC-ACCORD-223-CLEAN-ACTION, ACC-PANEL-240-CLEAR-CONSOLE |
| DQ-23 | The panel body is one flex column of fixed height. KERNELS, TERMINALS and LANGUAGE SERVERS keep their DOM order after WORKSPACES and never scroll out of view; nothing renders below the LANGUAGE SERVERS band. The open section takes the height left between the panel header and the collapsed bands (flex: 1 1 auto; min-height: 0) and its body is the only scroll container; a collapsed section keeps only its band. When WORKSPACES is open its list fills that height with no row cap; an open lab section fills the same height with its rows. While a section is open no empty strip of panel background stands above the docked bands; with all four sections closed no section grows, so the free height stands between the WORKSPACES band and the docked lab bands, which an auto margin on the KERNELS band absorbs. The reserved scrollbar gutter stands. This row replaces the height and sticky-header clauses of DQ-05 and ACC-PANEL-90-SCROLL the reserved scrollbar gutter superseded by DQ-05 on 2026-11-02; the open lab section's height and the docked bands narrowed by DQ-33 on 2026-11-03 | Sections and scroll: "one scroll container per section (overflow-y:auto; min-height:0)", "scrollbar-gutter: stable"; the docked bands and the flex height are the Star Colonel's 2026-10-30 direction | ACC-PANEL-230-DOCKED-BANDS, ACC-PANEL-232-ROW-CAP, ACC-PANEL-8-POLL |
| DQ-24 | A terminal row, in a card and in the TERMINALS section, always shows its name, its process name and its time, with no selection needed in a card a numbered terminal drops the tN and reads its tab name or process; a TERMINALS row shows the number in a small rectangle badge (the 2026-11-04 owner orders, ACC-TERM-275-CARD-LABEL and ACC-TERM-285-NUMBER-BADGE): terminal 1 claude now. The process text is --jp-ui-font-color2 at --jp-ui-font-size1 (ACC-TERM-271-NAME-SIZE) the row detail styling, at size 0, superseded on 2026-11-04; selecting the row does not show it a second time; the tooltip stays; with no process known the row shows no placeholder; at a narrow width the process gives way first with an ellipsis, and the name and the time stay whole. Every other kind of row keeps DQ-17; DQ-24 supersedes the terminal's process clause of DQ-17 and nothing else of DQ-17. The card's tabs counter counts every tab open in the workspace, documents and terminals: 6 terminal tabs and no document show 6, and a terminal key in a saved layout whose terminal no longer runs does not count. The row count in the name line counts the open tabs and the terminals, so no row is listed twice the terminal and kernel counters and the count glyphs superseded by the 2026-11-04 owner order (ACC-ACCORD-276-NAME-COUNT). The TABS column of workspaces list follows the same rule, and tabs list also prints the terminal tabs, with key terminal:N and an empty PATH. The Star Colonel's words, 2026-10-31: "critical defect - terminals do not have process name in them (only in tooltip) , there are 6 tabs opened - workspace shows exactly zero" the groups TABS (N) and TERMINALS (N) superseded by DQ-29 | The brief, Terminals: "Each terminal shows the name of the process running in it", "essentially the same thing as tab name"; the counter and the command-line rule are the Star Colonel's 2026-10-31 direction | ACC-TERM-42-PROCESS, ACC-TERM-44-PROCESS-UNREAD, ACC-TERM-46-NAME, ACC-TERM-113-PROCESS-LIVE, ACC-TERM-236-PROCESS-NARROW, ACC-LISTS-209-ROW-LINE, ACC-LISTS-210-ROW-SELECT, ACC-ACCORD-70-COUNT-TABS, ACC-CLI-171-LIST-OUT, ACC-CLI-218-TABS-LIST |
| DQ-25 | Each open tab gets its own count and row in the window that holds it, so an editor plus its Markdown preview shows 2 in the card and in the CLI. Two New View tabs of one document are two open tabs: two rows and a count of 2 in the window that holds them; a click and Close tab act on that row's own tab, and closing one view of an unsaved document behaves as JupyterLab's own close does, so only the last view that can edit asks. The CLI reads only the saved layout, so a tab JupyterLab does not restore, such as the Launcher or a second New View of a document, counts only in the card of the window that holds it. DQ-25 replaces the expected behaviour of DEF-PANEL-10-SHARED-VIEW. The Star Colonel's word, 2026-10-31, offered "Fix the code" and "Keep the code, state the limit": "Fix the code" | The Star Colonel's 2026-10-31 decision on the difference between the card and the CLI that verify round 2 of the critical defect found | ACC-ACCORD-70-COUNT-TABS, ACC-CLI-171-LIST-OUT |
| DQ-26 | Every section band's left and right equal the panel's, as the title band's do, at every width and whichever section is open. The section list has no side padding; text and icons stay where they are, because the inset is padding inside each surface, and the title label and the section labels stay on one vertical line. A section band and a section row draw their keyboard focus ring inside the surface (outline-offset: -1px), so it shows whole at the panel edge. Every section band's separator is one 1 px --jp-layout-color3 line between two adjacent bands of the same fill: under a folded section that has a section below it and under the title band above the WORKSPACES band; an open section and the title band followed by the filter field or the error strip draw none; the last band draws one 1 px --jp-layout-color3 line where it meets the status bar while WORKSPACES is open, because .jp-StatusBar-Widget paints --jp-layout-color2, the band's own fill the last band drawing none superseded by the owner's direction on 2026-11-05; the title band keeps the --jp-border-color2 rule of .jp-SidePanel-header the one 1 px --jp-border-color3 line before and after every band, the WORKSPACES band included, superseded on 2026-11-04; no other gap, margin or line stands between sections. The scrollbar gutter stays, and KERNELS, TERMINALS and LANGUAGE SERVERS stay docked at the panel bottom. DQ-26 supersedes the outside focus outline of DQ-19 for a section band and a section row and nothing else of DQ-19; this window's card keeps its inside outline. A row in this window's card draws its ring at outline-offset: -1px, as a row in any other card does, and the row ends 2 px short of the card's right edge, at the inner edge of the card's 2 px outline, which would paint over the right side of the ring and does not count as a side of it: the card's 1 px right border gives 1 px, margin-right: 1px the other, and the right padding falls from 10 px to 9 px, so no content moves. That card's header keeps its ring 2 px further in (outline-offset: -3px); on a row that offset crosses the file icon, which starts at the row's top (DEF-PANEL-72-RING-ROW). The defect is DEF-PANEL-70-BAND-SPAN. The Star Colonel's words, 2026-10-31: "tell me the difference; how is it that they don't span how they should" and "alos make the every section have this little spacing between previous / next"; his crop's arrows point at the 1 px lines between KERNELS, TERMINALS and LANGUAGE SERVERS, so "this little spacing" is that divider and not a new gap the scrollbar gutter superseded by DQ-05 on 2026-11-02 | design-language Full-width surfaces in a docked panel: "a panel's section bands and its rows and cards span the panel edge to edge"; the share files extension's section header (../jupyterlab_share_files_extension/style/base.css, outline-offset: -1px); the divider is the Star Colonel's 2026-10-31 direction and the design language's Dividers of a docked panel bullet (owner, 2026-11-04) | ACC-PANEL-192-SECTION-TITLES, ACC-PANEL-93-FOCUS, ACC-PANEL-237-SECTION-DIVIDER |
| DQ-27 | The six workspace colours are the coloured tabs palette's default light-theme active shades, in both themes, with no theme branch: rose #e39fb1, peach #d2ab82, lemon #bab56d, mint #87c086, sky #77bae0, lavender #bfa9da. The palette's dark-theme shades have contrast 1.00 to 1.33 on the panel colour #333840, so a 4 px strip or a 14 % wash in them cannot be seen; these have about 5.5, and all six read apart. The coloured tabs extension's own CSS variables cannot be used, because they switch to the dark shades in a dark theme, so the extension's stylesheet states each value once, and a palette edited in the coloured tabs settings is not followed. Besides the black of the recessed filter field these six are the only literal colours in the panel, and every other colour stays a token. The stored colour names, the records, the rotation, the 4 px strip at full strength, the 14 % wash and the swatch shape stay. The Colour submenu reads Yellow for lemon and Purple for lavender, the names the Tab Colour menu gives them, in place of Amber and Cyan, the hues of the tokens. DQ-27 supersedes the six workspace colours of DQ-01 and nothing else of DQ-01. The defect is DEF-PANEL-71-TAB-PALETTE. The Star Colonel's words, 2026-10-31: "also why colours aren't the smae as in coloured tabs colours? you have invented different colours". Asked to choose, he replied "work on all please" without naming an option, so the orchestrator took the option it had recommended the six values superseded by DQ-28 | The brief: "a coloured strip on the edge of the section (a tab colour placed on the side)", "the tab colour palettes the workspace colours resemble"; the palette default in ../jupyterlab_colourful_tab_extension/schema/plugin.json and that extension's style/base.css. For these six values alone it departs from Colour tokens: "Read colour only from lab tokens". The 2026-11-04 owner order (ACC-PANEL-278-TINT-ALPHA) mixes the hue at 24 % and 9.6 % | ACC-ACCORD-238-PALETTE-SHADES, ACC-PANEL-203-TOKENS-ONLY, ACC-ACCORD-86-OWN-PALETTE, ACC-ACCORD-15-STRIP, ACC-ACCORD-150-COLOUR-SWATCH, ACC-ACCORD-226-CARD-WASH |
| DQ-28 | The six workspace hues are the extension's own palette, derived from the coloured tabs extension's default palette at 1.4 saturation, with rose 2 degrees pinker, peach 3 points darker, lemon 1 point lighter and 2 degrees cooler, and mint 2 points darker, so rose and peach stop reading as one pair: rose #f191ae, peach #dfa465, lemon #cbc061, mint #73c973, sky #62c0f5 and lavender #be9fe4. Each stands once on :root, with no theme branch. A card mixes its hue at 24 % for the header and 9.6 % for the body over --jp-layout-color1, so each theme sets its own tints the 30 % and 12 % mixes superseded by the 2026-11-04 owner order (ACC-PANEL-278-TINT-ALPHA), and paints the full hue on its 4 px strip; this window's card paints the same (DQ-29). A palette edited in the coloured tabs settings is not followed. DQ-28 supersedes the six values of DQ-27 and the wash of DQ-02 and nothing else of either earlier wording, superseded by DQ-29: The six workspace colours are the extension's own palette, derived from the coloured tabs extension's default palette at 1.4 saturation, with rose 2 degrees pinker, peach 3 points darker, lemon 1 point lighter and 2 degrees cooler, and mint 2 points darker, so rose and peach stop reading as one pair. The muted shade paints a card's header and its 4 px strip; this window's card paints the active shade. The light values stand on :root and the dark values in one [data-jp-theme-light='false'] block, the stylesheet's only theme branch. A palette edited in the coloured tabs settings is not followed. The card body stays the plain --jp-layout-color1, with no wash. On a coloured card header the name, the age, the counts, the purpose and the caret keep --jp-ui-font-color1, so the shade costs no contrast. Rose #f1b2c4 and #f191ae on #542b36 and #3f1e26; peach #e5ba90 and #dfa465 on #4a3827 and #342a1d; lemon #d5cea2 and #cbc061 on #57512e and #423e23; mint #a7cfa5 and #73c973 on #294d30 and #1d3924; sky #98cff2 and #62c0f5 on #213854 and #182a3d; lavender #cebbe7 and #be9fe4 on #402c54 and #30213e, each a muted and an active value. DQ-28 supersedes the six values of DQ-27 and the wash of DQ-02 and nothing else of either | The coloured tabs extension's scheme: its default palette in ../jupyterlab_colourful_tab_extension/schema/plugin.json and style/base.css, and the tuned third block of tmp/colour-design/index.html. The Star Colonel's words, 2026-11-01: the colourful tabs extension "does an excellent job at showing colours and the selected tab", then "slightly more saturated" and "peach and rose are too similar". For these six values alone it departs from Colour tokens: "Read colour only from lab tokens" | ACC-PANEL-239-HEADER-SHADE, ACC-ACCORD-86-OWN-PALETTE, ACC-PANEL-203-TOKENS-ONLY, ACC-ACCORD-15-STRIP, ACC-ACCORD-150-COLOUR-SWATCH |
| DQ-29 | The workspace card is the edge tab of proposition 1, the Edge card of the ten edge-tab propositions, decided by the Star Colonel on 2026-11-02 after he rejected the 0.8.31 card. The card stands 2 px from the panel's left edge, square at the left with a 2 px right radius; the header carries the workspace hue at 24 % and the body the hue at 9.6 %, both over --jp-layout-color1 the 30 % and 12 % mixes superseded by the 2026-11-04 owner order (ACC-PANEL-278-TINT-ALPHA); a 4 px full-strength hue strip runs down the left edge. The header keeps the triangle, the name with its row count in brackets, the age and the eye, and its second line carries the purpose; no count glyphs and no ... button the four action glyphs and the count glyphs superseded by the 2026-11-04 owner order (ACC-ACCORD-276-NAME-COUNT, ACC-ACCORD-283-NO-DOTS). An open card lists one flat tab list with no TABS, TERMINALS or KERNELS group label: a terminal is a row with its glyph and process, a kernel rides on its document's row with its state word, dot and time, and the row menu carries Close tab, Stop terminal and Shut down kernel. The KERNELS, TERMINALS and LANGUAGE SERVERS tally sections stay with their counts and Shut down all the Shut down all button on KERNELS and TERMINALS superseded on 2026-11-05 by the Shut down menu (ACC-ACCORD-292-SHUTDOWN-MENU), so a background terminal or a headless kernel stays visible and can be shut down. The WORKSPACES band draws an eraser and the three tally bands a power glyph. On a coloured card the ink is the inverse tokens: --jp-inverse-layout-color0 for the name, the row labels, the triangle, the glyphs and the focus ring, and --jp-inverse-layout-color1 for the counts, the purpose and a row's state word, process and detail, because --jp-ui-font-color1 measures 4.82:1 on the Galaxa Steel base and 2.94:1 on a 24 % lemon tint, while the inverse colours 0 and 1 keep at least 7.24:1 on every 24 % tint the 30 % tint measurements superseded by the 2026-11-04 owner order (ACC-PANEL-278-TINT-ALPHA); the header age takes --jp-inverse-layout-color2 and a row's time --jp-inverse-layout-color3 at rest and --jp-inverse-layout-color2 on the current, hovered or selected row the age and row time at --jp-inverse-layout-color1 superseded on 2026-11-04. A plain card, the tally sections, menus and dialogs keep font colours 1 and 2. DQ-29 supersedes the card shape and the plain body of DQ-02, the glyphs of DQ-20 and DQ-22, the group labels of DQ-24, the shades of DQ-28 and the coloured-header ink of DQ-07, DQ-19 and DQ-28, and nothing else of those rows | The Star Colonel's choice from the propositions page tmp/edge-tabs-design/index.html. Colour tokens: "Read colour only from lab tokens", for the ink and for the layout colour under each mix. It departs from Cards & surfaces: "Card: --jp-layout-color1 body plus 1px var(--jp-border-color1)" and Spacing & radius: "Every corner is var(--jp-border-radius) (2px)". The 2026-11-04 owner order (ACC-ACCORD-276-NAME-COUNT, ACC-ACCORD-283-NO-DOTS, ACC-PANEL-278-TINT-ALPHA) amends the header and the tints | ACC-PANEL-242-EDGE-TAB, ACC-PANEL-243-HEADER, ACC-PANEL-244-TAB-ROWS, ACC-PANEL-245-ROW-MENU, ACC-PANEL-246-TALLY, ACC-PANEL-247-ICONS, ACC-PANEL-248-COUNTS, ACC-PANEL-249-CONTRAST; defects DEF-PANEL-74-EDGE-TABS, DEF-PANEL-75-ERASER-INK |
| DQ-30 | A terminal row, in a card and in the TERMINALS section, shows the path of its foreground process after the process, and the tooltip carries the same path on a line of its own (DQ-31). The path comes from the terminals route: os.readlink of /proc/<foreground process group>/cwd, the same process the process name reads, so the process and the path in a row describe one process; a foreground process of another user reads as no path, and /api/terminals gives none. With no path the row and the tooltip stay as DQ-24 leaves them; with no process the path stays out of the line and stands in the tooltip. The path takes the free width only: the flex item that holds it, jp-WorkspaceManager-rowPathSlot, has a flex basis of 0, so the name, the process and the time keep their widths and places, and at a width with none left the path has zero width while the process gives way as DQ-24 states. The 6 px gap before the path lies inside that slot, so a path of no width leaves the row as it is without a path; the gap on the path itself cost the process 6 px at zero free width, measured, and the slot removes that loss. The slot is a size container (container-type: inline-size), and below 32 px of free width a @container rule hides the path with visibility: hidden, because the ellipsis then leaves one letter or a sliver of it, which is not a path; the slot keeps its width and the tooltip keeps the path. A path wider than the free width is cut at its start, with the ellipsis at the left and its end in view: direction: rtl on the path, and a bdi inside it keeps the characters in their own order. The path takes the UI font at --jp-ui-font-size0, one size below the terminal's name in the process slot at size 1 (DQ-24, DQ-31, ACC-TERM-271-NAME-SIZE), in the meta ink of DQ-21 and DQ-29; the code font of DQ-18 keeps to the names and ids of the TERMINALS section. The filter and the terminals list command do not read the path. The Star Colonel's words, 2026-11-02: "can you make it that tooltip over terminal shows also path? and if there is space after terminal name and command - maybe show path? starting from the end ?" | The Star Colonel's 2026-11-02 direction; the meta text rule of DQ-21 | ACC-TERM-252-PATH-ROUTE, ACC-TERM-253-PATH-TOOLTIP, ACC-TERM-254-PATH-WIDTH, ACC-TERM-255-PATH-TAIL, ACC-TERM-256-PATH-UNREAD |
| DQ-31 | A TERMINALS row shows a short label, then the name of its tab, then its path. The label is the number in a small rectangle badge for a name of digits only, so terminal 7 reads 7 inside the badge, and any other name as it is, so build reads build. A card row drops that label for a numbered terminal, so terminal 7's row reads its tab name or process, while a named terminal keeps its name the tN on every terminal row superseded by the 2026-11-04 owner order (ACC-TERM-275-CARD-LABEL); the rectangle badge on a TERMINALS row added by ACC-TERM-285-NUMBER-BADGE. The tooltip's first line, the shutdown dialog, the clean-up dialog and the filter text keep terminal <name>, and the filter also reads the label, so t7 finds terminal 7. After the label, in the place of the process, the row shows the title of the terminal's tab, which a program in the terminal can set with an OSC title sequence. The process shows there only when no tab name is known: the terminal has no tab in this window, or the title is the default Terminal <name> or Terminal, which says no more than the label. The value takes the process span, so its colours and width rules stay and the path takes only what is left; a title change reaches the row at the next render or poll. The tooltip holds, in this order: terminal <name>, Tab: <tab name>, Process: <process>, Command: <command>, Path: <cwd>, Memory: <resident bytes>, Last activity: <age> (<exact local time>) and Workspaces: <every workspace holding it> the Memory line added by the 2026-11-04 owner order (ACC-TERM-279-TOOLTIP-MEMORY). The Workspaces line always stands, reading none when no workspace holds the terminal the omitted line on an unheld terminal superseded by the owner's 2026-11-05 direction (ACC-TERM-291-ATTACH-TOOLTIP). Tab, Process, Command, Path and Workspaces take one line each, and the first line is the terminal's name as given. A line with no value is left out, the exact time is left out when the last activity is unknown, the Tab line is left out when the row falls back to the process, the Memory line reads a dash when the server cannot read it, and the tooltip shows no PID and no CPU figure. The command comes from the terminals route: /proc/<foreground process group>/cmdline with each run of control characters, NUL and newline included, as one space, so a command takes one tooltip line, null when it cannot be read or is empty. Kernel, tab and language server tooltips do not change. DQ-31 narrows DQ-24: it replaces DQ-24's label, its process in the line and its tooltip, and nothing else of DQ-24; where this page names terminal <n> or the process as what a terminal row shows, DQ-31 applies. The Star Colonel's words, 2026-11-02: "any reason to not just show terminal N as tN ? more space for the actual variable command name ?", "and show more details (incl. cwd) in the tooltip", "the terminals would bare the name not of the command launched, but the tab name" | The Star Colonel's 2026-11-02 direction; the brief, Terminals: "essentially the same thing as tab name"; the meta text rule of DQ-21. The 2026-11-04 owner order (ACC-TERM-275-CARD-LABEL, ACC-TERM-279-TOOLTIP-MEMORY) drops the tN in a card and adds the Memory line | ACC-TERM-257-SHORT-LABEL, ACC-TERM-258-COMMAND-ROUTE, ACC-TERM-259-TOOLTIP-DETAILS, ACC-TERM-261-TAB-NAME |
| DQ-32 | A row is lit, which means it carries jp-mod-selected, while the keyboard focus is on it or while its tab is the current tab of this window. When neither holds, the light and the row's detail lines go. This narrows DQ-17: what shows on selection stays the same, and a selection now ends when the row is left. A row's tab is the tab it opens, and for a kernel row the tab of its notebook or console. The panel checks the rule on the shell's currentChanged signal and on focusout in its content. A row keeps its light while a pointer press inside the panel is held, and the release follows the mouseup. A focus that lands inside the row's tab counts as that tab being current, because the shell moves its current widget on the focus event, which follows focusout. A browser window losing the focus keeps the light. Three limits are accepted. A row does not light by itself when the user reaches its tab from the tab bar: the rule says when a light stays, while the panel tracks the current tab and paints only its pale current tint (DQ-36). A row left before its tab has opened does not light again when the tab becomes current, because the light follows the focus and the current tab paints only that tint. A context menu takes the focus, so a row whose tab is not current loses its light while its menu is open, and lights again when the menu closes and gives the focus back to the row | The Star Colonel's 2026-11-02 direction: "when clicked on any of the workspace's items (terminals) the row gets lit; and later it stays so; row gets lit only when working with it, when moved away - it isn't lit anymore" | ACC-LISTS-260-ROW-LIT, ACC-LISTS-210-ROW-SELECT |
| DQ-33 | KERNELS, TERMINALS and LANGUAGE SERVERS stand at the panel bottom only while WORKSPACES is open. While WORKSPACES is folded they follow it from the top, and the free height stands below the last band. Only an open WORKSPACES section grows (flex: 1 1 auto). Any other open section takes flex: 0 1 auto: it is as tall as its rows, the band below it follows its last row, and with more rows than the panel holds it shrinks, so every band stays in view and its body stays the only scroll container. The auto margin on the KERNELS band goes. This narrows DQ-23: the flex column, the band order, the bands that never scroll out of view and the only scroll container stay, and the height left between the panel header and the collapsed bands now goes only to WORKSPACES. Exclusive opening, the saved closed set and the filter stay as they are | The Star Colonel's 2026-11-03 direction: "when workdspaces section is folded, then bottom sections join it at the top; they stay at the bottom only when workspaces section is opened" | ACC-PANEL-230-DOCKED-BANDS, ACC-PANEL-90-SCROLL, ACC-PANEL-237-SECTION-DIVIDER |
| DQ-34 | A card header holds the eye alone. The ... button is removed and the workspace menu opens on a right-click on the header, the eye included, at the pointer through the same code, and on the context-menu key on the focused header below it; the name still takes the free width. This narrows DQ-12: the eye is the one header icon on every card, disabled on this window's card and never removed. A header click is unchanged: on another workspace's card it switches this window, on this window's card it opens or closes the card, and on the triangle it only opens or closes the card. A hidden card's header opens no menu. The menu's Clear workspace entry closes every tab, stops every terminal the card lists and shuts down every kernel of its documents, naming them in its one confirmation. The KERNELS, TERMINALS and LANGUAGE SERVERS bands open no workspace menu the two buttons, the ... menu opener and the Close all tabs label superseded by the 2026-11-04 owner order (ACC-ACCORD-283-NO-DOTS, ACC-ACCORD-284-CLEAR-WORKSPACE) | The Star Colonel's 2026-11-04 owner order (ACC-ACCORD-283-NO-DOTS, ACC-ACCORD-284-CLEAR-WORKSPACE) removes the ... button and renames Close all tabs to Clear workspace. Earlier, the 2026-11-03 direction: "make right click on the workspace header bring the ... menu", "remove close tabs icon form the workspace" and "remove icon for going into workspace (typically clicking on the workspace header gets user to that workspace, except clicking on the open triangle" | ACC-ACCORD-263-HEADER-MENU, ACC-ACCORD-264-HEADER-ICONS, ACC-ACCORD-98-HOVER-ACTIONS, ACC-PANEL-243-HEADER |
| DQ-35 | The menu of a tab row or terminal row of a card reads Close tab, Detach from workspace, Move to workspace, then Stop terminal or Shut down kernel, last and in the danger style. A plain document has no Detach from workspace, because no process stays behind. KERNELS, TERMINALS and LANGUAGE SERVERS rows do not change. Detach from workspace takes the tab out of its workspace and the terminal or kernel keeps running, then shows in TERMINALS or KERNELS. On another workspace's card it is the saved-layout change of Close tab, refused as Close tab is. On this window's card it sets shutdownOnClose false on the terminal, or shutdownOnDispose false in the kernel preference, before the tab closes: the lab's settings decide what Close tab does, and Detach from workspace never stops the process; an unsaved document asks as Close tab asks. Move to workspace is a submenu of every workspace of this panel except the row's own and the hidden ones, in panel order; with none to list it shows disabled. The entry is the source's saved data[key], never rebuilt, and a tab not yet saved is refused. The target is saved first and the tab then leaves the source, so a failure between the two leaves the tab in both workspaces and never in neither. A saved-layout write to this window's workspace would be overwritten by its next autosave, so a tab moved here opens live. A move is refused, with both workspaces unchanged, while another window shows the target or the source, while presence is unknown, and while the document has unsaved changes | The Star Colonel's 2026-11-03 direction: "close, detach from workspace etc" and "move to another workspace - all those acc crit" | ACC-LISTS-265-MENU-ENTRIES, ACC-LISTS-266-DETACH, ACC-LISTS-267-MOVE-MENU, ACC-LISTS-268-MOVE-TAB, ACC-LISTS-269-MOVE-REFUSED |
| DQ-36 | The row of this window's current tab carries jp-mod-current and takes the pale tint of the bookmarks panel's current row: --jp-brand-color1 at 14 % over --jp-layout-color1 on a plain card, and the workspace hue at 24 % over --jp-layout-color1 on a coloured card the 30 % mix superseded by the 2026-11-04 owner order (ACC-PANEL-278-TINT-ALPHA). Hover and the selected row paint over it on a coloured card; a plain card is not rendered in the shipped flow, because every workspace takes a rotation colour. The lit-row rule of DQ-32 is unchanged. The class follows the shell's current widget on a tab switch, without moving the panel's scroll position. DQ-36 narrows DQ-10 to the hovered and selected surfaces | The bookmarks panel's current row: --jp-brand-color1 at 14 % over --jp-layout-color1. The Star Colonel's 2026-11-04 direction: "look at bookmark extension -> and let's highlight current tab in the workspace" | ACC-LISTS-273-CURRENT-ROW |
| DQ-37 | On a coloured card the time-ago text takes the dimmest theme ink that holds 4.5:1 on its surface: --jp-inverse-layout-color2 in the header on the 24 % tint, --jp-inverse-layout-color3 in a body row on the 9.6 % tint, and --jp-inverse-layout-color2 on the current row at rest, whose 24 % hue tint is the header's, and on a hovered or selected row on the 9.6 % hue over --jp-layout-color2 the 30 % and 12 % tint names superseded by the 2026-11-04 owner order (ACC-PANEL-278-TINT-ALPHA); a plain surface keeps --jp-ui-font-color2. Measured minima on the 24 % and 9.6 % tints of the 2026-11-04 owner order (ACC-PANEL-278-TINT-ALPHA): header Light 8.37, Dark 8.09, Steel 6.24, and the current row at rest shares the header's tint and minima; body Light 9.35, Dark 11.39, Steel 8.43; hovered or selected Light 8.15, Dark 7.21, Steel 6.49. --jp-inverse-layout-color3 falls under 4.5:1 on the 24 % tint in Dark (4.99) and Steel (3.85) and on the 9.6 % hovered or selected surface (Dark 4.45, Steel 4.01). the 30 % and 12 % measurements superseded by the 2026-11-04 owner order (ACC-PANEL-278-TINT-ALPHA) The recently-active and stale rules of DQ-09 are unchanged | The Star Colonel's 2026-11-04 direction: "next is the time ago marker / text -> can we have it also dimmed like in the design language of the ai extension ?" The AI extension's design language sets the time at --jp-ui-font-color2 between the under-60 s and over-7-days states | ACC-PANEL-274-TIME-DIM |
How this design reads the decisions
Each point below is a reading this stage made where a decision left a detail open. Each is stated in the criteria named and can be changed there.
- Selection: a click on a row, or the arrow keys, selects it; the panel has one selected row; it paints the surface of DQ-10 and shows a detail line under its name, except on a terminal row (DQ-24); the row stays lit only while it is worked with (DQ-32), and a reload keeps the selection while its item exists and the row stays lit (
ACC-LISTS-210-ROW-SELECT). The click still opens the row's item. For a card, selection is being open: the purpose and the counts show while the card is open - The name of a kernel row is the file name of the notebook or console it serves, or the kernel id when no session uses it; the kernel type, the document path, memory and CPU are its detail (
ACC-KERNEL-48-ROW). The detail line repeats the file name inside the path, which KERN-02 keeps whole - The name of a terminal row is its number in a small rectangle badge for a number, and any other name as it is, while a card row drops the label of a numbered terminal (ACC-TERM-285-NUMBER-BADGE, ACC-TERM-275-CARD-LABEL); its tab name or its process follows the name in the row (DQ-24, DQ-31). Terminals have no state, so their rows show no dot. Tab rows show the file name, and the folder is the detail. Rows keep their 16 px type icon, which the decision does not list among the details
- The tab of a terminal row: a click or Enter on a terminal row, in a card or in TERMINALS, activates the tab of that terminal's running process - the same session name and a session JupyterLab has not disposed - so a tab whose terminal ended never matches, also after a new terminal takes the name; without a match the row opens a tab (
ACC-TERM-215-TAB-MATCH) - The tab a terminal row keeps: once a row opened or activated a tab, every later click or Enter on that row activates that tab, never a second tab of the terminal; the link ends when the terminal ends or the tab closes, and the row then opens a new tab (
ACC-TERM-216-TAB-KEPT) - Language server rows keep the replaced panel's label,
pylsp (python), and its shutdown button - The eye on every card: DQ-12 keeps the eye's place on shown cards too, so on a shown card it hides the workspace, as the brief's "hidden" toggle with an eye icon asks; it is disabled on this window's card; the ... button is disabled on a hidden card (
ACC-HIDDEN-213-EYE-TOGGLE) - Shut down all sits on the section band, which is
--jp-layout-color2, so it is a surface button:--jp-layout-color1with a 1 px--jp-border-color1border, as the design system's Buttons section draws a secondary action superseded by DQ-20 - Section header padding: 4 px above and below the text, the reference panel's
.jp-AiAssistantsPanel-sectionHeader, with the caret on the 4 px inset and the label at 18 px; the caret is the reference's▾/▸text glyph in.jp-AiAssistantsPanel-caret(ACC-PANEL-228-BAND-HEIGHT) - Shutdown dialogs have no filled button: Shut down is the destructive action, unfilled and at the far left; Cancel is the surface button
- The filter still searches process names and kernel types; a terminal row found by its process shows the process in the row (DQ-24); another row found by its detail shows its name, and selecting it shows the detail
- The recessed filter field keeps its 4 percent black over
--jp-layout-color1, which the design language prescribes for recessed surfaces; it is the one literal colour word left
6. Lab pages
The extension shows a web page served on the workstation in the main area, beside the tabs a workspace already holds. The page is reached through the lab's /proxy/<port>/ path. Its iframe is sandboxed unless the caller says otherwise: a page under the proxy path gets the sandbox of a server-proxy:open tab and keeps the lab's session, and any other page runs its scripts without the lab's session.
- The command is
workspace-page:openwith the arguments ofserver-proxy:open,{url, title?, id?, newBrowserTab?}, besideicon?andpolicy?; the tab shows the given title, or the page's owndocument.titleonce it loads while the page keeps the lab origin, andiconsets the tab icon from an image URL (svg or png) while without it the tab shows the standard page icon (a comment bubble);idbecomes the id of the tab's content, andnewBrowserTab: trueopens the URL in a new browser tab and no lab tab; anewBrowserTabthat is not a boolean or anidthat is not a string throws, naming the argument, before anything opens (ACC-OPEN-294-PROXY-ARGS) - A URL on the lab's origin under
/proxy/<port>/or/proxy/absolute/<port>/gets the sandboxserver-proxy:opengives,allow-same-origin allow-scripts allow-popups allow-forms allow-downloads allow-modals, so the page keeps the lab origin, its session, storage, cookies and POSTs; every other URL getsallow-scripts: the page renders and its scripts run, but its origin is opaque, so it has no lab session, storage or cookies (ACC-OPEN-293-PROXY-SANDBOX) policy.sandboxreplaces either sandbox verbatim;policy.sandbox: nullremoves the attribute;allow,referrerPolicyandcspset their iframe attributes when given; a malformed policy throws, naming the field, before any tab opens (ACC-OPEN-287-PAGE-POLICY)- A page tab the command opened that shows a page on the same port, the proxied port or else the URL's origin, or that carries the same
id, is reused: it takes the new iframe attributes, title and icon, loads the new URL, and becomes the current tab, and no second tab opens; a URL on the lab's origin is fetched once past the browser cache before the frame loads it, so the frame shows the page document the server serves now, also for an unchanged URL; the command returns the tab before that fetch ends, and only the URL last requested for the tab is loaded (ACC-OPEN-295-PORT-RELOAD) - The scripts, styles and data a page loads follow their server's caching headers, so the server of a page with separate files sends
Cache-Control: no-store, as the mockup server does - The mockup handover needs no policy: the mockup saves its comments through
/proxy/<port>/comments, which the proxy sandbox allows - The mockup page declares
<link rel="icon" href="data:,">and its server answers/favicon.icowith 204, so the page requests no favicon; the tab icon comes only from theiconargument - The widget opens in the main area, activates, and closes cleanly (
ACC-OPEN-286-LAB-PAGE,ACC-OPEN-287-PAGE-POLICY)