Refinement round: ring popover down, menu order, tok unit, list indent, lowercase levels

Five small fixes (owner refinement round, 2026-09-24):

1. RING POPOVER OPENS DOWN: the ring lives in the chat top bar —
   the window's top edge is right above it, so the upward popover was
   clipped. top-full mt-1.5 now: it drops below the ring.

2. SESSION MENU ORDER FLIPPED: Rename/Delete first, hairline, then
   the extraction coverage block + Extract at the bottom — the info
   reads after the actions (was the reverse, the block on top).

3. UNIT TYPED OUT: the sidebar block reads "2k tok uncovered" now —
   the tokens unit is explicit (owner: "tok").

4. MARKDOWN LIST INDENT: streamdown ships list-inside with no
   container padding — top-level markers sat ON the text edge (only
   nested lists got their pl-6 via [li_&]). .lh-prose :where(ul, ol)
   { padding-left: 1.5rem } indents both list kinds as blocks, 24px —
   the same measure as the nested-case pl-6. Unlayered CSS beats the
   utility layer; :where keeps specificity zero.

5. THINKING LEVELS LOWERCASE EVERYWHERE: the composer pill and setup
   dialog rendered THINKING_LABEL (Off/Minimal/…/Max) while every
   menu body renders the raw lowercase level — the map is now
   lowercase, the level string IS the display form, everywhere.

Live-verified on :3001: list content inset 24px vs paragraphs
(padding-left computed 24px, nested fine); the composer pill reads
"low" with options low/high/max; menu order Rename → Delete… →
hairline → block. 901/901.
This commit is contained in:
amosblomqvist
2026-09-24 15:51:40 +03:00
parent bc1f668e2a
commit 9f7dd1a7e9
5 changed files with 39 additions and 25 deletions
+1 -1
View File
@@ -54,7 +54,7 @@ describe("CoverageMenuBody — the context-menu block", () => {
<CoverageMenuBody coverage={coverage()} extracting={false} onExtract={() => {}} />,
);
assert.ok(html.includes('data-testid="ctx-coverage"'), "the block carries its testid");
assert.match(html, /2k uncovered/);
assert.match(html, /2k tok uncovered/, "the unit is typed out — tok (owner refinement round)");
assert.match(html, /5 messages unextracted/);
assert.ok(html.includes('data-testid="ctx-extract"'), "the Extract affordance");
assert.ok(!html.includes('disabled=""'), "an uncovered session can extract (the disabled: utilities alone don't count)");