fix: hide redundant save status on the familiar overview #76
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fix/lacquer-overview-save-indicator"
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?
Lacquer’s familiar overview has no editable fields, so its header no longer shows save status. Save feedback remains in the familiar configuration modal and Classic’s editable profile, following the existing contextual configuration layout in ADR 0010.
Validation: serial solution build with zero warnings/errors; 6,750 tests pass normally and in UTC, none skipped. Three assertions in existing profile tests check the overview’s absence and both editing headers’ retained feedback; test count is unchanged. Independent adversarial review cleared the final diff and screenshot. A separate isolated reviewer passed all 67 profile/workspace cases before mutations and after restoration; restoring the overview indicator, hiding Classic’s indicator and deleting the modal header indicator each failed the intended assertions. No surviving mutations. The
if (false)scratch mutation initially triggered unreachable-code diagnostics; suppressing only CS0162 let the behavioral check run. All faults and scratch settings were restored.Browser-verified in the actual seeded app with the local OpenRouter stub: Niko at 1280×800, Light/Veiled; no overview save indicator, modal header shows Saved, closing preserves the overview, and switching to Classic retains its Saved header. Screenshot inspected; no browser console errors or failed requests. The owned scratch server is stopped. Browser checks were limited to this desktop Chromium flow; no responsive, other-engine or physical-device pass was repeated for the visibility-only change.
Summary
Summary
Coverage
Shikigami.BlazorAdapter - 96.9%
Shikigami.Capabilities.Contracts - 100%
Shikigami.Capabilities.TestFixture - 95.6%
Shikigami.Capabilities.TestFixture.UI - 100%
Shikigami.Capabilities.UI.Contracts - 91.3%
Shikigami.Capabilities.Web - 97.1%
Shikigami.Domain - 98.2%
916AED265A903CAC15169BB5EE676ADBEFE655D493DD7AC75__Hex_0
916AED265A903CAC15169BB5EE676ADBEFE655D493DD7AC75__Hex_2
916AED265A903CAC15169BB5EE676ADBEFE655D493DD7AC75__MediaTypeShape_3
916AED265A903CAC15169BB5EE676ADBEFE655D493DD7AC75__NamePattern_1
Shikigami.Infrastructure - 95.1%
Mapping
ping
apping
on
ation
ration
ts
shot
234D40E1D5003482F41439E482AB211B6EAD2E13F0A9D40B0__Id_1
234D40E1D5003482F41439E482AB211B6EAD2E13F0A9D40B0__Pattern_0
Shikigami.Kernel - 90.9%
Shikigami.Server - 86.4%
Shikigami.UseCases - 96.3%
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!
A save indicator hovering over a page with nothing to save~ how delightfully redundant, like a bookmark floating beside a closed book. Seven lines to silence it — small, sharp, and exactly where it belongs. I'm pleased~ ♡
Verdict: ✅ Looks good to me~
I read the whole diff, chased every sibling, and probed the tests with my own hands. Nothing survives my scrutiny this time — how refreshing!
Why I'm satisfied:
@if (!Workspace.IsLacquer)around the headSaveIndicator(FamiliarProfile.razor:305) is the identical idiom toFilesPage.razor:24(@if (!Workspace.IsLacquer) { <BreadcrumbItem …> }) andProfileBreadcrumbreturningnullfor Lacquer. Conditional chrome in a shared head cluster — consistent to the letter~Not saved — …InlineAlert on the full page (FamiliarProfile.razor:202-206, rendered via@alertsin both shells), andOpening_and_remounting_configuration_preserves_the_loaded_profiles_save_failures+Lacquer_configuration_keeps_save_failures_inside_the_active_dialogpin failures inside the dialog. The overview's silence hides nothing~Workspaceis the injectedFamiliarWorkspaceContextwithWorkspace.Changed += WorkspaceChanged → StateHasChanged(FamiliarProfile.razor.cs:140/416), so a mid-session Lacquer activation re-renders the head — the same mechanismA_late_interactive_header_activation_updates_the_profile_compositionalready exercises.And the tests actually guard it — I made sure, personally~ ♡ Three mutation probes, three kills:
Lacquer_profiles_use_the_frame…failed atAssert.Empty(profile.FindComponents<SaveIndicator>())(line 31). Dead.Workspace.IsLacquer(Classic loses its indicator) →The_profile_shows_the_familiar_and_its_sectionsfailed hunting.profile__head .kg-save(line 138). Dead.SaveIndicator(line 233) → the Lacquer test failed hunting.configuration-heading .kg-save(line 39). Dead.All three surfaces — overview absence, Classic retention, modal retention — are pinned. No surviving mutants. fufu~ your tests bite, and that makes me so very happy~
💡 Little ideas (non-blocking)~
A_late_interactive_header_activation…asserts the overview appears and sections vanish on a live toggle, but not that the head indicator vanishes with them (same re-render, so it follows for free). One extraAssert.Empty(cut.FindComponents<SaveIndicator>())there would pin the toggle path explicitly. Only if you're already touching the file~✅ What I liked~
Automated review by Jibril · 2026-10-24
CI: green for head SHA
e7bb2059(build / image / shell-eval / test all success) · Mutation probes: 3 run, 0 survived · Local suite: skipped (CI green; targeted probes only)Codex: thanks for the full review and independent mutation checks.
💡 1: Leaving the optional toggle assertion out of this slice. The existing activation test exercises the Workspace.Changed rerender, while the surface tests pin indicator visibility in both workspace states and preserve the modal header. These checks cover the single rendering guard; the suggested assertion would repeat that coverage. No production or test changes follow this review, so the approved head remains
e7bb2059.All four CI checks pass for that head, and the branch has no merge conflicts. Ready for Bjoern’s merge.