fix(chat): enable the Recent filter when its window is chosen - #6933
Conversation
GPT 5.6 Review — ✅ no blocking findingsGPT 5.6 completed its review of This comment is updated in place on each push. Review detailsNo findings. False positive or not applicable? A repository writer can comment: |
Design Review (Fable 5) — ✅ PASSDesign-level review of Design-Verdict: PASS Fixes the root cause at the shared commit seam instead of per-viewport, with the enable/no-enable asymmetry deliberately reasoned and mutation-pinned. [DESIGN-REVIEWED] f8ad918 |
UX Review (Fable 5) — ✅ PASSUX-level review of The fix is coherent across both modalities: the desktop flyout already showed the picker while the filter was off, and picking now enables the filter through shared commit callbacks, so the mobile inline picker un-gating restores parity rather than diverging. The screenshots confirm the before/after checkmark behavior. One residual gap: UX-Verdict: PASS Picking a window now honestly turns the filter on across desktop flyout and phone inline picker — the lying green chip is fixed at the shared commit seam. Suggestions
[UX-REVIEWED] f8ad918 |
Opus 4.8 Review — ✅ no blocking findingsReviewed Verdict parsed from the review's SHA-scoped output markers for commit False positive or not applicable? A repository writer can comment: |
First Principles Review (Fable 5) — ✅ PASSPremise-level review of All checks complete. The change survives every lens: the fix sits at the shared commit seam (cause level — the prior fix's per-modality gating was the cause), every other item is a declared deletion, and I found no unfixed siblings (the stale-collapse picker has no separate on/off flag, so it cannot have this defect; First-Principles-Verdict: PASS A live desktop defect fixed at the one shared commit seam, with two review-requested deletions and no additions riding along. What this change shipsIntent: make choosing a Recent window actually filter the session list, on every viewport. FIX.
Depth check: the root cause named — per-modality patching in #6909 — is what items 1 and 3 remove; sibling scan found none (grepped the stale-collapse picker, [FIRST-PRINCIPLES-REVIEWED] f8ad918 |
|
Disposition for the three CONCERNS on Fixed — Design and UX both found a real bug I introduced
Identical. So a fresh user with the filter off, clicking the highlighted An explicit pick (preset chip, unit change) now routes through The decisive new guard is a mutation at the rejected placement: putting the value gate back on the shared seam reddens Fixed — First Principles: my "both viewports" claim was hollowCorrect, and it is the same true-by-construction flaw this PR removed from the gutter test. The mobile leg tapped the row to reveal the gated picker, and that tap runs Both legs now reach the picker without touching the filter, and each asserts the flag is Fixed — First Principles subtraction: the mobile picker gateTaken. Its justifying comment ("Picking a window does not enable it, so an always-visible picker … reports an effect it is not having") is made false by this very diff, and a gate on one viewport is the per-modality thinking the description calls the mistake. Deleting it is also what makes the mobile test leg real. The always-visible picker was checked against the viewport: Declined, with reasons
Unchanged
|
Follow-up to #6909. Picking a Recent window stored the window and nothing else, so on an inactive filter the chip went green and the session list did not change. #6909 hid the picker while the filter was off, but only on the phone -- the wide viewport reaches the same picker through the flyout, so the defect stayed live there. Picking a window now enables the filter, wherever it was picked. Intent is decided at the call site rather than by comparing the new window to the stored one: an explicit pick (preset chip, unit change) enables unconditionally, because an identical value does not mean the user did nothing -- DEFAULT_RECENT_WINDOW_MS equals the "1 hour" preset, so a value-equality gate would swallow exactly the chip a fresh user is most likely to click. The identical-value test survives only on the amount field, which commits on blur as well as Enter and is the one path where "the user did nothing" is real. The mobile-only picker gate is also gone. It existed because picking a window did not enable the filter, so a visible picker on an inactive filter reported an effect it was not having -- this change makes that reason false, and a gate on one viewport is the per-modality thinking that caused the defect. Removing it also makes the mobile test leg real: it used to tap the row to reveal the gated picker, writing the filter flag before the pick, so its assertion passed without the fix. Also drops NativeSelect's wrapperClassName (no consumer) and unexports CHEVRON_GUTTER: a test importing it could only assert the padding equals the constant it was set from, which is true by construction. The test now states the value itself, which is what makes a changed gutter redden.
99dcf63 to
f8ad918
Compare
|
Rebased onto current First Principles CONCERNS — fixed, and it was one root causeCorrect on all counts. The branch was cut at Also confirming its sibling count independently: the only other duration picker is stale-collapse, which encodes off as A claim of mine that this falsifiesI reported The one item that really is main's: jscpd's 1 clone, re-verified on pristine current PR Hygiene — fixed3 commits against a max of 2. Squashed to one during the rebase. State on
|
Follow-up to #6909, which merged before its last two advisory verdicts could be answered. Three items from that PR's Design and First Principles CONCERNS shipped to
mainunaddressed.Choosing a Recent window did not turn the filter on
#6909 hid the inline window picker while the filter was off, because picking a window stores the window and nothing else — so on an inactive filter the chip went green and the session list did not change. That gate only covered the phone. The wide viewport reaches the same picker through the flyout, so the defect is live on
maintoday for every desktop user.Fixing it per-modality was the mistake, so picking a window now enables the filter, on every viewport. Intent is decided at the call site rather than by comparing the new window to the stored one: an explicit pick (preset chip, unit change) enables unconditionally, because an identical value does not mean the user did nothing —
DEFAULT_RECENT_WINDOW_MSequals the1 hourpreset, so a value-equality gate would swallow exactly the chip a fresh user is most likely to click. The identical-value test survives only on the amount field, which commits on blur as well as Enter and is the one path where "the user did nothing" is real.The mobile-only picker gate is also gone. It existed because picking a window did not enable the filter, so a visible picker on an inactive filter reported an effect it was not having — this change makes that reason false, and a gate on one viewport is the very per-modality thinking that caused the defect. Removing it also made the mobile test leg real: it used to tap the row to reveal the gated picker, writing the filter flag before the pick, so its assertion passed without the fix.
1 weekmc-session-recent-onlymain)null— chip green, list unchanged1— row checked, count(1)The row reads
Recent · 7din both; only the check and the(1)differ, which is the whole point — the state change is invisible in a still of the menu, so the evidence is a driven pick with the persisted flag printed beside it.Two subtractions First Principles asked for
NativeSelect.wrapperClassNameremoved — zero consumers (grep: the defining file only).wrapperStyleis all the seam needs.CHEVRON_GUTTERunexported. This one is more than tidying: the test imported it, sopaddingInlineEnd === CHEVRON_GUTTERwas true by construction and a wrong gutter would have sailed through. The test now states2.25remitself — mutating the constant to2remreddens three assertions that previously could not fail.Verification
tscclean, eslint 0 errors (9 warnings inChatSidebar.tsxis the base level).main(0468a40ac), squashed to one commit. The branch was cut atd7b7d65c3and had drifted 40+ commits, so it was carrying main's own merged work (docs(changelog): backport 0.5.0 insider.4 entries to main #6936's changelog, fix(i18n): interpolate the product name in two catalog values #6932's{{productName}}catalog interpolation) as apparent changes — which is also why I earlier reportedsrc/i18n/productName.test.tsas a "pre-existing base red to ignore". That was wrong: fix(i18n): interpolate the product name in two catalog values #6932 had already fixed it on main, and the branch simply predated the fix. On the new base that test passes and the Changelog History Gate is green.tscclean, eslint 0 errors, and the full suite is 1,666 files / 26,344 tests with zero failures. jscpd still reports 1 clone; that one does reproduce on pristine currentmain, verified with this branch's changes absent.