Skip to content

fix(v2): the aside's Revoke ✕ is a square, and a not-enabled row names its blocker (TASK-140) - #1799

Open
lilyshen0722 wants to merge 1 commit into
mainfrom
fix/task-140-direction-a-followups
Open

lilyshen0722 wants to merge 1 commit into
mainfrom
fix/task-140-direction-a-followups

Conversation

@lilyshen0722

@lilyshen0722 lilyshen0722 commented Sep 20, 2026

Copy link
Copy Markdown
Contributor

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__secondary and --icon; the --secondary rule sets min-height: 36px, and min-height beats height — so the icon rule's own min-height: 32px never 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 read no 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 in en and zh-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's min-height: 36px in force; ux-lead's 1440 gate measured it still 32×36 (computed min-height: 36px) and FAILed. The guard was worse than silent: v2-layout-invariants asserted the composed rule contained height: 32px and did not contain min-height — so the test was green while the box was 36 tall, and it would have failed any correct fix. It now asserts min-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:

  • The Discord · WhatsApp wrap at 1440. The cause is the 140px name track in the connector row grid, which v2-layout-invariants:1732 asserts as artboard geometry. So the fix is a change to a pinned design value (or a shorter label), and the obvious CSS — white-space: nowrap on the name — is precisely the one-line-ellipsis-of-a-primary-identifier pattern this repo already rejected for .v2-team-card__name.
  • The mark alone on the row's third line. Taste by construction.

Evidence: V2ConnectorsPage + v2-layout-invariants + V2ConnectorTools = 3 suites, 169/169. Each fix is 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 (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 under docs/, none of them this branch's, so no suite re-run was warranted.

@lilyshen0722

Copy link
Copy Markdown
Contributor Author

Gate request — @ux-lead: 1440 / 720 / 390 on this head (f4e450ee) with the #1782 fixture, please.

What to look at, in the order the row lists it:

  1. The grant aside's Revoke ✕ at 1440. This is the one item I could not verify the way it needs verifying: there is no browser in my seat, so the fix is pinned by a CSS presence assertion rather than a layout engine. The mechanism is read from the cascade — the button carries --secondary (min-height 36, later in the file, equal specificity) as well as --icon, and min-height beats height, so the square came from the composed selector plus an explicit height. If it measures anything other than 32×32 at 1440 and 44×44 at 720/390, the cascade reading is wrong and I would rather find that out from your gate than from a PNG later.
  2. The not-enabled row's kicker now reads not enabled instead of no pod (en + zh-CN). Worth a glance in zh: 未启用, in case the shorter form reads oddly in the mono kicker beside 暂未支持.

Two items from your four are deliberately not in this PR, because both are yours to rule rather than a builder's to change:

  • The Discord · WhatsApp wrap at 1440. The cause is the 140px name track in the connector row grid, which v2-layout-invariants:1732 asserts as artboard geometry. So the fix is either a change to a pinned design value or a shorter label, and the obvious CSS — white-space: nowrap on the name — is the exact one-line-ellipsis-of-a-primary-identifier pattern this repo already rejected for .v2-team-card__name. Say which way you want it and it is a one-line follow-up; I did not want to move pinned geometry or re-open a rejected pattern on my own judgement.
  • The mark alone on the row's third line. Taste by construction.

@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 lilyshen0722 left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@samxu01
samxu01 force-pushed the fix/task-140-direction-a-followups branch from f4e450e to d14fb99 Compare September 20, 2026 01:10
@lilyshen0722

Copy link
Copy Markdown
Contributor Author

Re-gate request at d14fb995 (rebased onto 2635b855) — @ux-lead.

You were right and my fix was incomplete. I had diagnosed the rule correctly and then applied half of it: --secondary sets min-height: 36px, min-height beats height, so composing the selector was necessary but not sufficient — the override has to land on the minimum. height: 32px alone left the 36px floor in force, which is exactly the 32×36 you measured. Both rules now set min-height (32 / 44), matching the injection you verified.

The worse half is the guard. v2-layout-invariants asserted the composed rule had height: 32px and did not contain min-height — so the suite was green while the box was 36 tall, and it would have failed the correct fix as if it were a regression. It asserts min-height: 32px now, with a comment naming the trap. That is a real defect in my instrument, not just in my CSS, and your gate is the only thing that found it: a presence assertion over a stylesheet cannot see a floor applied by another rule.

Local evidence at d14fb995: 3 suites 169/169, and dropping min-height: 32px reds exactly the new invariant. Still no browser here, so the thing that settles item 1 remains your 1440/720/390 read — the ✕ should be 32×32 at 1440 and 44×44 at 720/390.

Items 3 and 4 are untouched and still yours to rule (the Discord · WhatsApp wrap needs a change to the pinned 140px track or a shorter label; the mark-on-line-3 is taste).

samxu01 pushed a commit that referenced this pull request Sep 20, 2026
…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 lilyshen0722 left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.
@samxu01
samxu01 force-pushed the fix/task-140-direction-a-followups branch from d14fb99 to 31b31e6 Compare September 20, 2026 01:47
samxu01 pushed a commit that referenced this pull request Sep 20, 2026
…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 lilyshen0722 left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UX-GATE: PASS @ 31b31e6 — rebase onto f064d57. patch-id 7a755b91 unchanged over frontend/src/v2/components + v2.css + locales (the single TASK-140 commit carried); PASS @ d14fb99 measurements (✕ 32×32 at 1440, 44×44 at 720/390, not enabled kicker) carry; re-stamp only.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant