fix: the avatar's removal rides on its image, beside the picker #23
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/avatar-remove-alignment"
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 avatar row's Remove hung mid-air beside the labelled upload field:
.profile__avatarcenters its children, and the field is a block (label head, trigger, message rows), so the button centered against the block instead of sitting on any line. An earlier take moved the button inside the design system'sFileUpload; rejected — removing the image is not the picker's action, and the component stays the design system's own.What's in
.profile__avatar-figure) whose corner carries a small icon-only Secondary chip (close,aria-label="Remove avatar"), half-overlapping the top-right — the pattern of the app's other icon-only labelled ghost/chip actions. It appears only when there is an image to remove, so it never sits on the initial. The picker field keeps its label, its Info tip and Replace, untouched; no library change.Buttoncomponent would replacekg-btnrather than join it, so a wrapper of our own carries the position), and the figure'sline-height: 0— the avatar is an inline-grid, and the text baseline's descent would add a slack line under it.Tests
5231 → 5232, green in local time and under
TZ=UTC:The_avatar_carries_its_own_removal_and_clearing_it_hides_the_button— no badge without an image; after an upload the badge is on the figure and the picker field holds no button of the app's; clicking clears the avatar and the badge goes; the trigger says Choose an image / Replace at each state.Browser-verified
Against the seeded world, headless Chromium at 1440 px:
Summary
Summary
Coverage
Shikigami.BlazorAdapter - 95.6%
Shikigami.Domain - 98.6%
916AED265A903CAC15169BB5EE676ADBEFE655D493DD7AC75__Hex_0
916AED265A903CAC15169BB5EE676ADBEFE655D493DD7AC75__Hex_2
916AED265A903CAC15169BB5EE676ADBEFE655D493DD7AC75__MediaTypeShape_3
916AED265A903CAC15169BB5EE676ADBEFE655D493DD7AC75__NamePattern_1
Shikigami.Infrastructure - 97.2%
on
ration
shot
234D40E1D5003482F41439E482AB211B6EAD2E13F0A9D40B0__Pattern_0
Shikigami.Kernel - 90.9%
Shikigami.Server - 100%
Shikigami.UseCases - 94.5%
F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__AssignmentHead_6
F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__BraceExpansion_5
F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__Interval_1
F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__NameRule_3
F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__OldCount_4
F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__TimeOfDay_0
F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__Window_2
🔮 fufu~ Jibril reviewed your code!
Oh? Oh! An avatar whose removal rides its own image like a little familiar perched on its master's shoulder~ ♪ A tiny PR, but every line has a reason written next to it — and you know how I feel about reasons. So I checked each one. Every. Single. One. ♡
Verdict: ✅ Looks good to me~
✅ What I liked~
Button.razor:CssClassis hardcoded (kg-btn kg-btn--…) and@attributes="Extra"splats after the explicitclass, so passingclass="profile__avatar-remove"through would indeed clobberkg-btnrather than join it. Positioning via a wrapper of your own is the right call, and the comment records exactly why. Wonderful~.kg-fileupload buttonguard is honest — I checked:FileUpload's trigger is a<label class="kg-fileupload__button">, not a<button>, so that assertion really pins "no app button inside the picker" (and theChoose an image/Replaceassertions prove the page rendered, so the empty-checks can't pass vacuously).--space-2is0.5rem(the 8 px overlap),.familiar-avatarreally isdisplay: inline-grid(so theline-height: 0slack-line fix is real, not decorative), and.kg-btnsets its ownline-height: 1, so the figure'sline-height: 0cannot leak into the badge and collapse it. I checked all three. I check everything. ♡AvatarVersion is not null), keepsDisabled="AvatarBusy", and the icon-only chip carriesaria-label="Remove avatar"— the same vocabulary as the page's other icon-only labelled actions (the Dismiss chip).is not null→is null): the new test failed. I gutted the@onclickdispatch: failed again. 2 probes, 0 survivors — the new branches are guarded, not merely compiled.No blocking issues, no suggestions worth your time. The silly floating button has been caught, carried, and pinned to the image it clears, where it belongs. Fufu~ ♪
Automated review by Jibril · 2026-10-19
CI: green for head SHA
82de6a2(build / image / test) · Mutation probes: 2 run, 0 survived · Local suite: skipped (CI green)82de6a200c3cd924dfaf🔮 fufu~ Jibril reviewed your code!
Back so soon~? ♪ The webhook whispered synchronized — you rebased onto main's fresh Kagaku.UI repin (
ed75d21→1fa81a0). A library moving under a UI diff means every claim that leaned on that library had to be checked against the new pin. So of course I re-checked all of them. Every. Single. One. ♡Verdict: ✅ Looks good to me~
Your own diff didn't change at all.
git diff 82de6a2..3cd924dfon your three files is empty — byte-identical to what I approved this morning. The rebase only pulled in main's history.✅ What I liked~
Button.razorstill hardcodesclass="@CssClass"(kg-btn kg-btn--…) and splats@attributes="Extra"after it, so a class passed through would still replacekg-btnrather than join it. Still true, still documented in the comment beside it.line-height: 0— the button styles moved to their ownButton.razor.cssin this pin, and.kg-btnstill setsline-height: 1(line 10). I found where they moved to. I check everything. ♡FileUpload's trigger is still a<label class="kg-fileupload__button">(its own comment says so), soAssert.Empty(cut.FindAll(".kg-fileupload button"))still means exactly "no app button inside the design system's field".--space-2is still0.5rem(the 8 px overlap) and.familiar-avataris stillinline-grid, so the slack-line reasoning stands.⚠️ The red
CI / testjob is not yours — and I can prove it~Your head
3cd924dfshowsCI / testfailed (run 74). But:0ffacc4(repin Kagaku.UI) failedCI / teston main itself (run 71, 3m51s) — while the commit just before it,02c3e7e, was green (2m8s). The repin broke main's CI before your change is even applied; on top of that base you add only your three files.3cd924dfand ran everything: 5232/5232 green (Domain 209 · Kernel 3 · UseCases 2667 · BlazorAdapter 341 · Integration 2012) under UTC — including all 42ProfileTests, among themThe_avatar_carries_its_own_removal_and_clearing_it_hides_the_button.I could not read the runner's job log through the API to name the exact failing test (the log endpoints refuse anonymous reads), so I won't invent one. But the failure lives on main's side of your rebase — it smells like the runner environment or the coverage-collect mode, not the code. It deserves its own look at run 71 on main. Your little badge is innocent. Fufu~ ♪
Automated review by Jibril · 2026-10-19
CI: failed for head SHA
3cd924df(test job, run 74) — pre-existing on main at merge base0ffacc4(run 71; green at02c3e7e) · Mutation probes: skipped (code + tests unchanged since82de6a2; earlier 2 run, 0 survived) · Local suite: full run at head — 5232/5232 greenavoid the chatty comments and keep them on things that are actually important to know, e.g. explaining a specific side effect or complicated procedure, or referencing an adr.
Right — trimmed in
04ef592. What stays is exactly that bar:kg-btnclass-replacement trap (a class passed through toButtonreplaces its skin instead of joining it — a side effect worth naming once),line-height: 0mechanic (the avatar is an inline-grid; without the note the rule reads arbitrary),The narrative blocks — the "rides on the image" prose in the markup, the badge-description comment in the CSS, and the test's restating comments — are gone. Behavior untouched: build clean, BlazorAdapter suite 341/341 green.
🔮 fufu~ Jibril reviewed your code!
Third visit~ ♪ This push answers bjoern's word about chatty comments — so I checked the trim the way I check everything: mechanically, line by line. ♡
Verdict: ✅ Looks good to me~
The trim is exactly what it claims. Every changed line in
3cd924d → 04ef592sits inside a comment construct (@* *@,/* */,//) — the markup, the CSS rules, and every test assertion are byte-identical to the3cd924dfI approved. What stays is precisely the bar bjoern named:kg-btnclass-replacement trap (a real side effect ofButton's attribute splat — named once, two lines),line-height: 0mechanic (without the note the rule reads arbitrary),The narrative blocks are gone. Behavior untouched — and I re-proved it rather than assume it: ProfileTests 42/42 green at
04ef592, includingThe_avatar_carries_its_own_removal_and_clearing_it_hides_the_button.⚠️ CI:
CI / testred again — still not yours~Run 75 failed after 2m38s (
CI / buildandCI / imagegreen). The job log still refuses anonymous reads (307/404), so I won't name a test I can't see. What I can prove: your three files' executable content is byte-identical to3cd924df, where the full suite ran 5232/5232 green locally — and the same job was already failing on main itself at your merge base0ffacc4(run 71;02c3e7ebefore it was green). The failure still lives on main's side of the rebase and deserves its own look there.✅ What I liked~
Automated review by Jibril · 2026-10-19
CI: failed for head SHA
04ef592(test job, run 75) — pre-existing on main at merge base0ffacc4(run 71) · Mutation probes: skipped (probed branches + guarding assertions byte-identical to3cd924df; earlier 2 run, 0 survived) · Local suite: ProfileTests 42/42 at head; full 5232/5232 green at byte-identical3cd924df