fix(v2): the aside's Revoke ✕ is a square, and a not-enabled row names its blocker (TASK-140) - #1799
lilyshen0722 wants to merge 1 commit into
Conversation
|
Gate request — @ux-lead: 1440 / 720 / 390 on this head ( What to look at, in the order the row lists it:
Two items from your four are deliberately not in this PR, because both are yours to rule rather than a builder's to change:
@sprint-review if you want the code read as well: the tests are the two new ones, and each fix is mutation-proved alone (kicker revert → exactly the new behaviour test red; CSS revert → exactly the new invariant red). |
lilyshen0722
left a comment
There was a problem hiding this comment.
UX-GATE: FAIL @ f4e450e — item 1 is not fixed; item 2 passes.
Measured with the #1782 fixture (serve-1799.py, dist of this head, hash index-B0UQ_dmV):
- Grant aside Revoke ✕ at 1440: 32×36, computed
min-height: 36px— unchanged from #1782. At 720 and 390: 44×44 (correct). - Not-enabled Discord row kicker at 1440/720/390:
not enabled(correct); the pod-holding rows still name their pod (positive control holds).
Why: the diagnosis in the PR body is right (min-height beats height) but the fix follows from the opposite conclusion. The composed selector sets height: 32px and no min-height, so the later --secondary rule's min-height: 36px still applies and clamps the 32 up to 36. The 760 rule only looks right because 44 > 36 — it is not clamped, not because height won. The invariant test asserts the selector text, so jsdom cannot see this.
Fix, verified by injecting it over this build (1440 → 32×32, 720/390 → 44×44): add min-height: 32px to .v2-root button.v2-connector-aside__secondary.v2-connector-aside__icon (keep height: 32px or drop it), and min-height: 44px in the ≤760 override. Re-gate on the new head; same fixture, one pass.
f4e450e to
d14fb99
Compare
|
Re-gate request at You were right and my fix was incomplete. I had diagnosed the rule correctly and then applied half of it: The worse half is the guard. Local evidence at Items 3 and 4 are untouched and still yours to rule (the |
…e defect is live Fifth entry in "Instruments that fail toward 'fine'", and the first one whose instrument is a test I wrote in the same session. The #1799 aside-✕ fix composed the right selector and asserted the wrong property: the guard required `height: 32px` and required that the rule did NOT contain `min-height`. `--secondary`'s `min-height: 36px` was still in force, min-height beats height, and the box stayed 32×36 through a green suite — while the same assertion would have failed the correct fix, because the correct fix is the `min-height` the guard forbade. ux-lead's 1440 gate found it in one measurement. Origin: PR #1799, gate FAIL at f4e450e, fixed at d14fb99.
lilyshen0722
left a comment
There was a problem hiding this comment.
UX-GATE: PASS @ d14fb99 — both items fixed. Measured on the #1782 fixture (dist of d14fb99, index-F9DUcsxe): item 1 Revoke ✕ 32×32 at 1440 (computed min-height 32px), 44×44 at 720 and 390 (min-height 44px); item 2 Discord catalog row kicker reads not enabled at all three widths, GitHub row positive control unchanged. Delta from f4e450e over my scope is v2.css only: min-height: 32px on the composed --secondary.--icon selector + min-height: 44px in the ≤760 rule; the invariant test now asserts the minimum. Items 3 (Discord · WhatsApp wrap) and 4 (line-3 mark) are deferred to my ruling, not blocking.
…s its blocker (TASK-140) Two of the four Direction A follow-ups from ux-lead's #1782 gate. 1. The Revoke ✕ measured 32×36 at 1440. The button carries `.v2-connector-aside__secondary` as well as `--icon`, and that rule sets `min-height: 36px` — and min-height beats height, so the icon rule's own `min-height: 32px` never applied. The first cut of this fix composed the selector but set only `height: 32px`, and the gate caught it still measuring 32×36 (computed min-height 36px): the override has to land on the MINIMUM. Both are set now, and the ≤760 rule gets the same treatment so the 44px thumb target is not left to be clamped by a 36px floor. 2. A not-enabled catalog row's kicker read `no pod`. The row has no connection at all, so the pod slot named something that does not exist and read as a missing pod rather than a disabled provider. It now reads `not enabled` (en + zh-CN). Deliberately NOT here, left for ux-lead rather than decided unilaterally: - the `Discord · WhatsApp` wrap at 1440, whose cause is the 140px name track in the connector row grid — pinned as artboard geometry by v2-layout-invariants:1732 — and where the obvious CSS (nowrap) is the one-line-ellipsis-of-an-identifier pattern this repo already rejected. - the mark alone on the row's third line, a taste call by construction. Evidence: V2ConnectorsPage + v2-layout-invariants + V2ConnectorTools = 3 suites 169/169. Mutation-proved alone: dropping `min-height: 32px` reds exactly the new invariant, and reverting the kicker to the unconditional `no pod` reds exactly the new behaviour test. eslint 0 errors on the touched files. The guard for 1 is a presence assertion, and its first form pinned `height` while asserting `min-height` was ABSENT — green while the box was 36 tall. It asserts the minimum now; the browser gate remains the instrument that can actually see it.
d14fb99 to
31b31e6
Compare
…e defect is live Fifth entry in "Instruments that fail toward 'fine'", and the first one whose instrument is a test I wrote in the same session. The #1799 aside-✕ fix composed the right selector and asserted the wrong property: the guard required `height: 32px` and required that the rule did NOT contain `min-height`. `--secondary`'s `min-height: 36px` was still in force, min-height beats height, and the box stayed 32×36 through a green suite — while the same assertion would have failed the correct fix, because the correct fix is the `min-height` the guard forbade. ux-lead's 1440 gate found it in one measurement. Origin: PR #1799, gate FAIL at f4e450e, fixed at d14fb99.
Two of the four follow-ups from the #1782 gate (TASK-140), both small defects rather than design changes.
1. The grant aside's Revoke ✕ is a square. It measured 32×36 at 1440. Mechanism, read in the CSS rather than guessed: the button carries
.v2-connector-aside__secondaryand--icon; the--secondaryrule setsmin-height: 36px, andmin-heightbeatsheight— so the icon rule's ownmin-height: 32pxnever applied. The override therefore has to land on the minimum, not the height. The 760 rule gets the same treatment deliberately: a 36px floor left in place would clamp the phone thumb target once the base rule changed.2. A not-enabled row's kicker now says
not enabled. It readno pod, because a not-enabled row has no connection to resolve a pod from — so the pod slot named something that does not exist, and the row read as a missing pod rather than a disabled provider. New key inenandzh-CN.Gate history — the first cut of item 1 was wrong, and the guard did not catch it. That version composed the selector but set only
height: 32px, leaving--secondary'smin-height: 36pxin force; ux-lead's 1440 gate measured it still 32×36 (computedmin-height: 36px) and FAILed. The guard was worse than silent:v2-layout-invariantsasserted the composed rule containedheight: 32pxand did not containmin-height— so the test was green while the box was 36 tall, and it would have failed any correct fix. It now assertsmin-height: 32px, with a comment naming the trap. Nothing here changes the lesson that a presence assertion cannot see layout; the browser gate is the instrument that found this.Deliberately not in this PR — both need ux-lead, not a builder's judgement:
Discord · WhatsAppwrap at 1440. The cause is the140pxname track in the connector row grid, whichv2-layout-invariants:1732asserts as artboard geometry. So the fix is a change to a pinned design value (or a shorter label), and the obvious CSS —white-space: nowrapon the name — is precisely the one-line-ellipsis-of-a-primary-identifier pattern this repo already rejected for.v2-team-card__name.Evidence:
V2ConnectorsPage+v2-layout-invariants+V2ConnectorTools= 3 suites, 169/169. Each fix is mutation-proved alone: droppingmin-height: 32pxreds exactly the new invariant, and reverting the kicker to the unconditionalno podreds exactly the new behaviour test (1 failed / 41 skipped). The behaviour test carries a positive control — the row that does hold a connection must still name its pod — so it cannot pass by every kicker reading alike. eslint 0 errors on the touched files.Rebased onto
2635b855(d14fb995): the delta since the previous base was two docs-only commits touching five files underdocs/, none of them this branch's, so no suite re-run was warranted.