fix: preserve familiar tool toggle width #61
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fix/familiar-tool-toggle"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The long Web description on the familiar profile squeezed its On/Off control until both labels clipped. Preserve the toggle's intrinsic width so the description wraps and both choices remain usable, following ADR 0009's shared controls and ADR 0010's responsive layout.
What's in
flex: none; its text sibling can still shrink and wrap. Keep its fieldset resets in the same CSS rule and remove the obsoletemin-width: 0.Tests
StylesheetTestspins a single toggle rule withflex: none, independent of declaration order.flex: nonemade exactly the new width regression check fail (two passed, one failed); restoring it returned three passes.Browser-verified
Used the repository browser-test launcher with fresh sample data, the OpenRouter stub and Web fixture. Niko and Rotom's Web choices save immediately and persist after reload/navigation. Verified mouse clicks, Tab/Shift+Tab navigation, Enter and Space activation; screenshots use dark theme. No console errors reported by the independent browser pass. Mobile checks use resized Chromium viewports, not a physical mobile browser.
Screenshots
Desktop (1280 × 800 CSS pixels), Web enabled:
Mobile (390 × 844 CSS pixels), Web enabled:
Summary
Summary
Coverage
Shikigami.BlazorAdapter - 95.4%
Shikigami.Capabilities.Contracts - 100%
Shikigami.Capabilities.TestFixture - 95.5%
Shikigami.Capabilities.TestFixture.UI - 100%
Shikigami.Capabilities.UI.Contracts - 91.3%
Shikigami.Capabilities.Web - 97.1%
Shikigami.Domain - 98.1%
916AED265A903CAC15169BB5EE676ADBEFE655D493DD7AC75__Hex_0
916AED265A903CAC15169BB5EE676ADBEFE655D493DD7AC75__Hex_2
916AED265A903CAC15169BB5EE676ADBEFE655D493DD7AC75__MediaTypeShape_3
916AED265A903CAC15169BB5EE676ADBEFE655D493DD7AC75__NamePattern_1
Shikigami.Infrastructure - 93.7%
Mapping
ping
apping
on
ration
ts
shot
234D40E1D5003482F41439E482AB211B6EAD2E13F0A9D40B0__Id_1
234D40E1D5003482F41439E482AB211B6EAD2E13F0A9D40B0__Pattern_0
Shikigami.Kernel - 90.9%
Shikigami.Server - 85.5%
Shikigami.UseCases - 96.1%
F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__AssignmentHead_13
F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__BraceExpansion_12
F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__HexColour_7
F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__IdPattern_0
F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__Interval_4
F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__IntervalBody_11
F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__KeyPattern_2
F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__NameRule_6
F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__NewerXY_9
F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__Number_8
F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__OldCount_10
F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__TimeOfDay_3
F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__ToolPattern_1
F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__Window_5
🔮 fufu~ Jibril reviewed your code!
One line of CSS~ How adorable! But you know what they say — the smaller the diff, the harder I squeeze it... fufu~ ♡ And this little line told me a whole story.
Verdict: ⛔ I can't let this pass~ ♡
⛔ These need fixing before I'm satisfied~
StylesheetTests.csexists precisely to pin layout rules that browser passes uncover — its own doc says "these checks pin the app's remaining narrow content rules", and one of its two pins is for this very file, added after "the 390 px browser pass" found the sticky-links bug. Both previous ProfilePage layout fixes (479f625#23,b91c8bb#27) landed with tests beside them. Your rule is exactly that kind — a browser-pass-motivated layout fix — yet ships with no pin ("no new tests for this CSS-only fix"). The existing pins ARE css-only assertions, my dear — that excuse doesn't live here~ ♡And I didn't guess, I proved it: I deleted
flex: none;from the stylesheet and ranStylesheetTests+ProfileTests— all 44 still passed. The mutant survived. If someone drops or reorders that line tomorrow, CI stays green and the labels clip again — the exact bug that already escaped once.Fix: one more pin in
StylesheetTests(it's the only test class that reads the stylesheets — I checked):🔴 CI note (not your diff's fault — but settle it with a rerun before merging)
CI / imagefailed at "Browser host contract against the final image" (run 230, job 3).build,testandshell-evalare green, the same job is green on basef4586af9, and I readBrowserHostCheck.cs: it boots its own inline HTML fixture and probes the browser stack — it never loads an app page or stylesheet, so this diff has no path into it. Everything points to a runner flake, but a flake is only proven gone by a green rerun — please rerun the job, fufu~💡 Little ideas (non-blocking)~
.profile__toggleblocks. The second one'smin-width: 0is what armed the squeeze in the first place (shrink +min-width: 0= labels compress below their words). Withflex: noneit's now inert — consider merging the blocks (and dropping, or commenting why you keep, themin-width: 0) so it can't quietly re-arm if shrink ever comes back.✅ What I liked~
space-betweenrow, not the shared control — and HomePage's toggle lives in akg-clusterthat wraps instead of squeezing, so Kagaku.UI correctly stays untouched. Sharp~ ♪flex: noneis the house idiom — Kagaku.UI's own.kg-toggles__dotuses it for the same "don't squeeze me" reason, with a comment. Consistency makes me very happy~Automated review by Jibril · 2026-10-23
CI: failed (image → "Browser host contract" step; no path from this diff into it, green on base — rerun needed) for head SHA
878ada176e· Mutation probes: 1 run, 1 survived · Local suite: filteredStylesheetTests+ProfileTests— 44 passed at baseline, 44 still passed with the mutant; full suite covered by CI's greentestjobAddressed review 12829 in
704158c.The_profile_toggle_keeps_its_intrinsic_width_beside_long_textinStylesheetTests. It checks that the single toggle rule retainsflex: none, independently of property order. An independent reviewer ran the source mutation in an isolated scratch checkout: baseline 3/3, deletingflex: noneproduced 2 passes and exactly this test failing, restoration returned 3/3..profile__toggleblocks, removedmin-width: 0, and documented why the control keeps its width. Browser recheck of the compiled CSS at 1280, 390 and 320px confirms all 14 On/Off pairs fit; Web On and Off persist after navigation. Mobile evidence uses resized Chromium, not a physical device.Validation: serial build with zero warnings/errors; full suite 6,361/6,361 green locally and 6,361/6,361 in UTC. Independent source review found no issues.
Automated follow-up by Codex.
🔮 fufu~ Jibril reviewed your code!
Back so soon~ and this time that lonely little line of CSS came with a bodyguard. You know how to make a Flugel's heart flutter, scarlet~ ♡
Verdict: ✅ Looks good to me~
Every thread from my last review is closed, and I checked each one with my own hands:
StylesheetTests.cs:40) — and it's better than my sketch. Order-independent\bflex:\s*none;instead of my brittle declaration-sequence match, plusAssert.Singleover the rule itself — so.profile__togglecan never again quietly split into two blocks. That second half is you guarding against the exact duplication smell I teased you about last time. Oh? Oh! Turning a reviewer's complaint into a structural invariant… wonderful~flex: none;from the stylesheet →The_profile_toggle_keeps_its_intrinsic_width_beside_long_textfails, precisely and alone → restored, worktree clean. Last push this mutant survived with all 44 tests smiling; now it dies in 43 ms. That's what a pin is for. ♡.profile__toggleblock,border/padding/margin: 0merged in with an honest comment, the re-armingmin-width: 0gone while.profile__group-textkeeps itsmin-width: 0so the text side wraps. Squeeze fixed at exactly the right layer: the page's row, never the shared control.704158c9, including the image job's green rerun. The flake left, just as the base-green run promised it would~✅ What I liked~
Assert.Singleinvariant — beyond what I asked for, and it's the stronger half.Fufu~ merge it before I change my mind~ ♡
Automated review by Jibril · 2026-10-23
CI: green for head SHA
704158c9· Mutation probes: 1 run, 0 survived (re-run of the previously survivingflex: nonedeletion — now killed by the new pin) · Local suite: skipped (CI green)