Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .claude/rules/session-strip-motion.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ verify:
- path: youcoded/desktop/src/renderer/components/SessionStrip.tsx
contains: "if [(]dotIdsRef.current.has[(]id[)][)] continue;"
- path: youcoded/desktop/src/renderer/components/header/drag-order.ts
contains: "margin: -14"
contains: "margin: -12"
- path: youcoded/desktop/src/renderer/components/header/pack-sessions.ts
contains: "overflowChipWidth"
- path: scripts/ui-review/drag-fuzz.mjs
Expand Down Expand Up @@ -41,7 +41,7 @@ dated WHY comment at its edit site; the pins are the `session-strip-*` ast-grep

## A crossed dot has two images; the swap is at its centre; dots never FLIP
**Invariant:** the flow draws a covered dot at its box and at its mirror one pill-width
across, sizes summing to one; the yield (`DRAG_TUNE.margin = −14`) only swaps which is the
across, sizes summing to one; the yield (`DRAG_TUNE.margin = −12`) only swaps which is the
box; the flow runs as a layout effect on every commit that changes `overId`/`settle`; dots
are skipped in the settle's FLIP; only dot-sized pills flow or are veiled.
**Why:** a one-frame race doubled the dot (R9); a FLIP'd dot popped whole under the settling
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"deck": "session-pill-spacing",
"started": "2026-09-28T06:35:33.422Z",
"submitted": "2026-09-28T06:35:58Z",
"cur": 1,
"answers": {
"S-1": {
"v": "yes",
"t": 1790577344269,
"seconds": 11,
"theme": "meadow-mist",
"zoom": 1
},
"S-2": {
"v": "yes",
"t": 1790577355613,
"seconds": 11,
"theme": "meadow-mist",
"zoom": 1
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
{
"title": "Session switcher — even spacing on both sides",
"key": "session-pill-spacing",
"out": "pill-spacing.review.html",
"images": "images/pill-spacing",
"runs": {
"before": "runs/before",
"after": "runs/after"
},
"crops": {
"strip": [
"strip",
"strip",
"1950x108+0+0"
]
},
"steps": [
{
"id": "S-1",
"surface": "Header",
"path": "The session switcher at the top of the window (shown 3x larger)",
"crop": "strip",
"headline": "The open session's name now has the same space after it as before its dot.",
"changed": "The blank strip after the name shrank to match the space before the dot. Before, the right side was about 12px wider than the left.",
"measured": "Right side 19 px → 7 px; left side 7 px (unchanged)",
"notice": "The name pill looks centred and is 12px narrower, so a longer name fits before it has to fade out.",
"risk": "When a name is too long and fades out at the end, the fade is shorter (7px instead of 12px), so the cut-off looks slightly sharper.",
"themes": [
"meadow-mist",
"halftone-dimension"
]
},
{
"id": "S-2",
"surface": "Header",
"path": "The session switcher at the top of the window (shown 3x larger)",
"crop": "strip",
"headline": "Each session dot is now centred in its space, so the dots sit evenly.",
"changed": "Each dot had 4px of extra empty space on its right. That space is gone, so every dot is 4px narrower and centred.",
"measured": "Each dot 28 px → 24 px wide; ten dots take 40 px less room",
"notice": "The row of dots is tighter and even. In a narrow window, a few more sessions fit before the \"+N\" bubble appears.",
"risk": "Dragging a pill past a dot now swaps at the dot's new centre (2px sooner). The automatic drag test found no new problems, but it's worth one drag to check it feels the same.",
"themes": [
"meadow-mist",
"halftone-dimension"
]
}
]
}
1,403 changes: 1,403 additions & 0 deletions docs/archive/design/2026-09-27-session-pill-spacing/pill-spacing.review.html

Large diffs are not rendered by default.

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
13 changes: 10 additions & 3 deletions scripts/shoot/driver.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -176,9 +176,16 @@ export function makeDriver(tab, { width = 1440, height = 900 } = {}) {
async function perform(step, n) {
switch (step.do) {
case 'click': case 'double-click': case 'right-click': case 'hover': {
const p = await where(step.target, n);
if (step.do === 'hover') await moveTo(p.x, p.y);
else await press(p.x, p.y, step.do === 'right-click' ? 'right' : 'left', step.do === 'double-click' ? 2 : 1);
let p = await where(step.target, n);
await moveTo(p.x, p.y);
// WHY look again after the move (2026-09-27): the travel crosses other controls,
// and one it rests on can react and move the target. Under load a mouse step over
// the header's last session dot outlasted its hover dwell, the dot opened its name,
// the centred row shifted, and the click meant for "All Sessions" hit the dot.
if (step.do !== 'hover') {
p = await where(step.target, n);
await press(p.x, p.y, step.do === 'right-click' ? 'right' : 'left', step.do === 'double-click' ? 2 : 1);
}
break;
}
case 'type': {
Expand Down
Loading