Pending-host removal spec: label x offset off by 0.9-3.3 px on dev (J377) #431

Open
opened 2026-11-08 16:48:49 +00:00 by kayg · 4 comments
Owner

J377: apps/tracer/test/pending-host-removal.spec.ts fails on current dev (b31c2da2d; also 77b1255cb: 5 of 6 viewport/theme cases). The label's x offset between the "removal pending" and "retired-unreachable" states differs by 0.9–3.3 px against a 0.5 px allowance (J372 logs: ~/j372-pw2.log, ~/j372-pw3.log on dev-02).

Plan (est. 1.5 h): bisect recent dev merges (suspect #391 glass removal-confirm) on dev-02 with a production build; decide UI-wrong vs spec-stale; red test first; fix on branch fix-pending-removal-align; 3 green spec runs; before/after screenshots at 1440x900 and 393x852; scripts/verify quick. No merge, no deploy.

J377: `apps/tracer/test/pending-host-removal.spec.ts` fails on current dev (b31c2da2d; also 77b1255cb: 5 of 6 viewport/theme cases). The label's x offset between the "removal pending" and "retired-unreachable" states differs by 0.9–3.3 px against a 0.5 px allowance (J372 logs: ~/j372-pw2.log, ~/j372-pw3.log on dev-02). Plan (est. 1.5 h): bisect recent dev merges (suspect #391 glass removal-confirm) on dev-02 with a production build; decide UI-wrong vs spec-stale; red test first; fix on branch `fix-pending-removal-align`; 3 green spec runs; before/after screenshots at 1440x900 and 393x852; `scripts/verify quick`. No merge, no deploy.
Author
Owner

Start: branch fix-pending-removal-align, base b31c2da2d (origin/dev), worktree ~/worktrees/j377 on dev-02. Next: read the palette row code, then bisect.

Start: branch `fix-pending-removal-align`, base b31c2da2d (origin/dev), worktree ~/worktrees/j377 on dev-02. Next: read the palette row code, then bisect.
Author
Owner

Finding 1 (probe on b31c2da2d, production build, 1440 ink, log ~/j377-probe.log on dev-02): the spec measures the palette mid-transition. At the first measurement the row's icon is 21.72 px wide (CSS: 22 px / 1.25rem) and the row is 588.9 px wide; after the state change the same row is 22 px and 596.4 px wide. 588.9 / 596.4 = 0.9874, a scale of about 0.987, so the palette was still inside its open transition (@starting-style scale(0.98) -> 1, 180 ms keyboard open, apps/tracer/style.css:~521). The unscaled layout is identical in both states (label x offset from the icon is the same); the 3.25 px x delta is the transform. This animation is intended (TASTE: opening surfaces may animate ~180 ms from the keyboard), and exists since 2026-10-07. So the spec races an intended animation; next: bisect which merge moved the timing so the race is now lost, then settle the spec on the animation end (no fixed sleep).

Finding 1 (probe on b31c2da2d, production build, 1440 ink, log ~/j377-probe.log on dev-02): the spec measures the palette mid-transition. At the first measurement the row's icon is 21.72 px wide (CSS: 22 px / 1.25rem) and the row is 588.9 px wide; after the state change the same row is 22 px and 596.4 px wide. 588.9 / 596.4 = 0.9874, a scale of about 0.987, so the palette was still inside its open transition (`@starting-style` scale(0.98) -> 1, 180 ms keyboard open, apps/tracer/style.css:~521). The unscaled layout is identical in both states (label x offset from the icon is the same); the 3.25 px x delta is the transform. This animation is intended (TASTE: opening surfaces may animate ~180 ms from the keyboard), and exists since 2026-10-07. So the spec races an intended animation; next: bisect which merge moved the timing so the race is now lost, then settle the spec on the animation end (no fixed sleep).
Author
Owner

Finding 2 (bisect, logs ~/j377-bis-.log and ~/j377-bisect.log on dev-02, production build, cases "1440 ink" + "393 paper"): no merge broke this spec. It fails on be64f2902e, the dev merge that first contains it (offsets 1.82 px and 0.95 px against 0.5 px), and identically on 9630c2bd92 and every later tested merge; commits before be64f2902e do not have the "removal pending" row at all. #391 (5d34c133a) is not the cause. The spec has been red on dev since the day it arrived.

Verdict: the UI is right, the spec is racy. The palette's open transition (scale 0.98 -> 1, 180 ms) is intended (TASTE: opening surfaces may animate ~180 ms from the keyboard), and the layout settled is identical in both states. Fix: the spec waits for the palette's own transitions to finish (getAnimations().finished, no fixed sleep) before each measurement. Run is queued behind the build slot (position 5 at 16:53).

Finding 2 (bisect, logs ~/j377-bis-<sha>.log and ~/j377-bisect.log on dev-02, production build, cases "1440 ink" + "393 paper"): no merge broke this spec. It fails on be64f2902e, the dev merge that first contains it (offsets 1.82 px and 0.95 px against 0.5 px), and identically on 9630c2bd92 and every later tested merge; commits before be64f2902e do not have the "removal pending" row at all. #391 (5d34c133a) is not the cause. The spec has been red on dev since the day it arrived. Verdict: the UI is right, the spec is racy. The palette's open transition (scale 0.98 -> 1, 180 ms) is intended (TASTE: opening surfaces may animate ~180 ms from the keyboard), and the layout settled is identical in both states. Fix: the spec waits for the palette's own transitions to finish (`getAnimations().finished`, no fixed sleep) before each measurement. Run is queued behind the build slot (position 5 at 16:53).
Author
Owner

Finish. Branch fix-pending-removal-align, head 81844c365 (one commit on b31c2da2d), pushed to origin. Not merged, not deployed.

Cause: the spec raced the palette's intended open transition (scale 0.98 to 1, 180 ms); no merge broke it (red on be64f2902e, the first dev merge containing it; #391 is not the cause). UI unchanged; spec now awaits the palette's transitions (getAnimations().finished, no sleep).

Evidence (dev-02, production build, logs ~/j377-before.log, ~/j377-after.log, ~/j377-quick.log):

  • before (original spec on b31c2da2d): 6 failed; after (fixed spec, --repeat-each=3, all 6 viewport/theme cases): 18 passed (2.6m), i.e. 3 green runs.
  • Screenshots attached: 1440x900 before/after, 393x852 after (ink and paper). A 393x852 before shot does not exist: the original spec fails on the icon centre check before its screenshot call. At 393 the hint truncates to "removal pending · …" by design (title wins the row).
    Received:    0.955108642578125
    Received:    1.824188232421875
    Received:    1.38104248046875
    Received:    1.3821754455566406
    Received:    1.3865432739257812
    Received:    1.3894233703613281
  6 failed
EXIT=1
  18 passed (2.6m)
EXIT=0
| Rust gate                 | Result       |
+---------------------------+--------------+
| scope guard               | PASS         |
| migration names           | PASS         |
| Nix Cargo vendoring       | PASS         |
| fmt                       | PASS         |
| doc coverage ratchet      | PASS         |
| shape lints off (D351)    | PASS         |
| doc comments on diff      | PASS         |
| fixed test waits          | PASS         |
| ui literals               | PASS         |
| tracer typecheck          | PASS         |
+---------------------------+--------------+

QUICK pre-check passed. This is not the gate: run scripts/verify fast before reporting done.
QUICK_EXIT=0

verify fast not run: only a tracer spec changed (typecheck passed in quick); you asked for quick.

Finish. Branch `fix-pending-removal-align`, head 81844c365 (one commit on b31c2da2d), pushed to origin. Not merged, not deployed. **Cause:** the spec raced the palette's intended open transition (scale 0.98 to 1, 180 ms); no merge broke it (red on be64f2902e, the first dev merge containing it; #391 is not the cause). UI unchanged; spec now awaits the palette's transitions (`getAnimations().finished`, no sleep). **Evidence (dev-02, production build, logs ~/j377-before.log, ~/j377-after.log, ~/j377-quick.log):** - before (original spec on b31c2da2d): 6 failed; after (fixed spec, `--repeat-each=3`, all 6 viewport/theme cases): 18 passed (2.6m), i.e. 3 green runs. - Screenshots attached: 1440x900 before/after, 393x852 after (ink and paper). A 393x852 *before* shot does not exist: the original spec fails on the icon centre check before its screenshot call. At 393 the hint truncates to "removal pending · …" by design (title wins the row). ``` Received: 0.955108642578125 Received: 1.824188232421875 Received: 1.38104248046875 Received: 1.3821754455566406 Received: 1.3865432739257812 Received: 1.3894233703613281 6 failed EXIT=1 18 passed (2.6m) EXIT=0 | Rust gate | Result | +---------------------------+--------------+ | scope guard | PASS | | migration names | PASS | | Nix Cargo vendoring | PASS | | fmt | PASS | | doc coverage ratchet | PASS | | shape lints off (D351) | PASS | | doc comments on diff | PASS | | fixed test waits | PASS | | ui literals | PASS | | tracer typecheck | PASS | +---------------------------+--------------+ QUICK pre-check passed. This is not the gate: run scripts/verify fast before reporting done. QUICK_EXIT=0 ``` `verify fast` not run: only a tracer spec changed (typecheck passed in quick); you asked for quick.
Sign in to join this conversation.
No labels
launch-qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
kayg/infraternal#431
No description provided.