fix: doujinshi-length titles truncate in the breadcrumb, not stack it #22

Merged
bjoern merged 1 commit from fix/breadcrumb-title-shrink into main 2026-08-13 06:23:57 +02:00
Member

The consumer half of Kagaku.UI#3 (merged as de091c9, submodule bumped here): BreadcrumbItem gained an opt-in Shrink — a marked crumb gives way with an ellipsis and its trail goes single-line, while unmarked crumbs keep their full text and unmarked trails keep wrapping.

The project title is the one segment that earns it. The workspace, bible, and page-workspace trails mark their title crumb, so the field report's 128-character title renders as

Projects › (同人誌) [あむぁいおかし製作所 (かんむり、KPmo… › Bible

on one line at any viewport width, with the "Projects" and current-page anchors intact — instead of stacking the header three lines tall.

Verified live against the reporting title at 700 px and 400 px (single-line trail, only the title ellipsized) and that the Settings trail — no Shrink crumb — still computes flex-wrap: wrap. All 299 tests pass.

🤖 Generated with Claude Code

The consumer half of Kagaku.UI#3 (merged as `de091c9`, submodule bumped here): `BreadcrumbItem` gained an opt-in `Shrink` — a marked crumb gives way with an ellipsis and its trail goes single-line, while unmarked crumbs keep their full text and unmarked trails keep wrapping. The project title is the one segment that earns it. The workspace, bible, and page-workspace trails mark their title crumb, so the field report's 128-character title renders as ``` Projects › (同人誌) [あむぁいおかし製作所 (かんむり、KPmo… › Bible ``` on one line at any viewport width, with the "Projects" and current-page anchors intact — instead of stacking the header three lines tall. Verified live against the reporting title at 700 px and 400 px (single-line trail, only the title ellipsized) and that the Settings trail — no Shrink crumb — still computes `flex-wrap: wrap`. All 299 tests pass. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
fix: doujinshi-length titles truncate in the breadcrumb, not stack it
All checks were successful
CI / build (pull_request) Successful in 21s
CI / test (pull_request) Successful in 31s
9146d8dca1
Kagaku.UI#3 gave BreadcrumbItem an opt-in Shrink — a marked crumb gives
way with an ellipsis and its trail goes single-line, while everything else
keeps its full text. The project title is the one segment that earns it:
the workspace, bible, and page-workspace trails mark their title crumb, so
a 128-character title squeezes to one line between the intact "Projects"
and current-page anchors instead of stacking the header three lines tall.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

Summary

Summary
Generated on: 07/25/2026 - 06:36:28
Coverage date: 07/25/2026 - 06:36:22 - 07/25/2026 - 06:36:26
Parser: MultiReport (4x Cobertura)
Assemblies: 6
Classes: 129
Files: 99
Line coverage: 95.8% (4158 of 4338)
Covered lines: 4158
Uncovered lines: 180
Coverable lines: 4338
Total lines: 8509
Branch coverage: 85.3% (739 of 866)
Covered branches: 739
Total branches: 866
Method coverage: Feature is only available for sponsors

Coverage

Orihon.BlazorAdapter - 81.9%
Name Line Branch
Orihon.BlazorAdapter 81.9% 77.1%
Orihon.BlazorAdapter.Bible.BiblePage 71.7% 59%
Orihon.BlazorAdapter.BlazorAdapterAssembly 100%
Orihon.BlazorAdapter.Debounce 91.6% 93.7%
Orihon.BlazorAdapter.PageWorkspace.PageWorkspacePage 84.6% 77.8%
Orihon.BlazorAdapter.Projects.ProjectListPage 86% 85.2%
Orihon.BlazorAdapter.Projects.ProjectWizardPage 91.3% 78.2%
Orihon.BlazorAdapter.Settings.SettingsPage 100% 92.5%
Orihon.BlazorAdapter.Uploads.UploadTransfer 96.5% 100%
Orihon.BlazorAdapter.Uploads.UploadTransferProgress 100% 100%
Orihon.BlazorAdapter.Uploads.UploadTransferResult 100%
Orihon.BlazorAdapter.Workspace.ProjectWorkspacePage 65.4% 73.3%
Orihon.Domain - 100%
Name Line Branch
Orihon.Domain 100% 100%
Orihon.Domain.Agents.AgentDescriptor 100%
Orihon.Domain.Agents.AgentRoster 100% 100%
Orihon.Domain.Bible.Character 100% 100%
Orihon.Domain.Bible.GlossaryEntry 100% 100%
Orihon.Domain.Bible.LoreEntry 100% 100%
Orihon.Domain.Bible.PageSummary 100%
Orihon.Domain.Bible.StoryBeat 100%
Orihon.Domain.Projects.Project 100% 100%
Orihon.Domain.Projects.ProjectProfile 100%
Orihon.Domain.Settings.AppSetting 100%
Orihon.Domain.Text 100% 100%
Orihon.Domain.Translation.BoundingBox 100%
Orihon.Domain.Translation.Chapter 100%
Orihon.Domain.Translation.Page 100%
Orihon.Domain.Translation.Region 100% 100%
Orihon.Domain.Translation.RegionProfile 100%
Orihon.Infrastructure - 99%
Name Line Branch
Orihon.Infrastructure 99% 97.5%
Orihon.Infrastructure.Bible.EfBibleStore 100% 100%
Orihon.Infrastructure.DependencyInjection 100%
Orihon.Infrastructure.Gateways.OpenRouterLlmGateway 100% 91.1%
Orihon.Infrastructure.Persistence.Configurations.AppSettingConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.ChapterConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.CharacterConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.GlossaryEntryConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.JsonColumnMapper 100%
Orihon.Infrastructure.Persistence.Configurations.LoreEntryConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.PageConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.PageSummaryConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.ProjectConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.RegionConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.StoryBeatConfiguration 100%
Orihon.Infrastructure.Persistence.Converters.UtcTicksConverter 100%
Orihon.Infrastructure.Persistence.Migrations.AddAppSettings 99.3%
Orihon.Infrastructure.Persistence.Migrations.InitialTranslationDomain 97.3%
Orihon.Infrastructure.Persistence.Migrations.OrihonDbContextModelSnapshot 100%
Orihon.Infrastructure.Persistence.OrihonDbContext 100%
Orihon.Infrastructure.Persistence.OrihonDbContextFactory 100%
Orihon.Infrastructure.Projects.EfProjectStore 100% 100%
Orihon.Infrastructure.Projects.FileSystemPageImageStore 100% 100%
Orihon.Infrastructure.Settings.EfAppSettingsStore 100% 100%
Orihon.Infrastructure.Translation.EfChapterStore 100% 100%
Orihon.Infrastructure.Translation.EfPageStore 100% 100%
Orihon.Infrastructure.Translation.EfRegionStore 100% 100%
Orihon.Infrastructure.Translation.Ordering 100% 100%
Orihon.Kernel - 90.9%
Name Line Branch
Orihon.Kernel 90.9% 75%
Orihon.Kernel.Err`1 100%
Orihon.Kernel.Ok`1 100%
Orihon.Kernel.Result`1 88.8% 75%
Orihon.Server - 93.2%
Name Line Branch
Orihon.Server 93.2% 68.4%
Orihon.Server.Components.App 100%
Orihon.Server.Components.Layout.MainLayout 100%
Orihon.Server.Components.Pages.Gate 64.2% 66.6%
Orihon.Server.Security.AccessGate 91.8% 41.6%
Orihon.Server.Security.AccessSecret 100% 50%
Orihon.Server.VolumeStartupValidator 100% 100%
Program 95.2% 85.7%
Orihon.UseCases - 99.3%
Name Line Branch
Orihon.UseCases 99.3% 98%
Orihon.UseCases.Bible.AddCharacter 100% 100%
Orihon.UseCases.Bible.AddGlossaryEntry 100% 100%
Orihon.UseCases.Bible.AddLoreEntry 100% 100%
Orihon.UseCases.Bible.AddStoryBeat 100% 100%
Orihon.UseCases.Bible.BibleDto 100%
Orihon.UseCases.Bible.CharacterDto 100%
Orihon.UseCases.Bible.DeleteCharacter 100% 100%
Orihon.UseCases.Bible.DeleteGlossaryEntry 100% 100%
Orihon.UseCases.Bible.DeleteLoreEntry 100% 100%
Orihon.UseCases.Bible.DeletePageSummary 100% 100%
Orihon.UseCases.Bible.DeleteStoryBeat 100% 100%
Orihon.UseCases.Bible.GetBible 100% 100%
Orihon.UseCases.Bible.GlossaryEntryDto 100%
Orihon.UseCases.Bible.LoreEntryDto 100%
Orihon.UseCases.Bible.PageSummaryDto 100%
Orihon.UseCases.Bible.ReorderStoryBeats 100%
Orihon.UseCases.Bible.SetPageSummary 100% 100%
Orihon.UseCases.Bible.StoryBeatDto 100%
Orihon.UseCases.Bible.UpdateCharacter 100% 100%
Orihon.UseCases.Bible.UpdateGlossaryEntry 100% 100%
Orihon.UseCases.Bible.UpdateLoreEntry 100% 100%
Orihon.UseCases.Bible.UpdateStoryBeat 100% 100%
Orihon.UseCases.Chapters.ChapterDto 100%
Orihon.UseCases.Chapters.CreateChapter 100% 100%
Orihon.UseCases.Chapters.DeleteChapter 100% 100%
Orihon.UseCases.Chapters.RenameChapter 100% 100%
Orihon.UseCases.Chapters.ReorderChapters 100%
Orihon.UseCases.DependencyInjection 100%
Orihon.UseCases.Diagnostics.SeedDevData 99% 92.8%
Orihon.UseCases.Gateways.LlmKeyInfo 100%
Orihon.UseCases.Gateways.LlmModel 100%
Orihon.UseCases.NextOrder 100%
Orihon.UseCases.Pages.DeletePage 100% 100%
Orihon.UseCases.Pages.GetPage 100% 100%
Orihon.UseCases.Pages.GetProjectWorkspace 100% 100%
Orihon.UseCases.Pages.ImportPages 97.7% 96.6%
Orihon.UseCases.Pages.ImportPagesResult 100%
Orihon.UseCases.Pages.MovePage 100% 92.8%
Orihon.UseCases.Pages.PageDetailDto 100%
Orihon.UseCases.Pages.PageDto 100%
Orihon.UseCases.Pages.PageUpload 100%
Orihon.UseCases.Pages.ProjectWorkspaceDto 100%
Orihon.UseCases.Pages.ReorderPages 100%
Orihon.UseCases.Pages.SetPageMeta 100% 100%
Orihon.UseCases.Pages.WorkspaceChapterDto 100%
Orihon.UseCases.Projects.CompleteProjectSetup 100% 93.7%
Orihon.UseCases.Projects.CreateProject 100% 100%
Orihon.UseCases.Projects.DeleteProject 100% 100%
Orihon.UseCases.Projects.GetProject 100% 100%
Orihon.UseCases.Projects.ListProjects 100%
Orihon.UseCases.Projects.ProjectDto 95.8%
Orihon.UseCases.Projects.StoredPageImage 100%
Orihon.UseCases.Projects.UpdateProjectMetadata 100% 100%
Orihon.UseCases.Regions.CreateRegion 100% 100%
Orihon.UseCases.Regions.DeleteRegion 100% 100%
Orihon.UseCases.Regions.RegionDto 97%
Orihon.UseCases.Regions.ReorderRegions 100%
Orihon.UseCases.Regions.UpdateRegion 100% 100%
Orihon.UseCases.Settings.AgentSettingDto 100% 100%
Orihon.UseCases.Settings.GetSettings 100% 100%
Orihon.UseCases.Settings.ListModelOptions 100% 100%
Orihon.UseCases.Settings.SaveAgentModel 100% 100%
Orihon.UseCases.Settings.SaveOpenRouterKey 100% 100%
Orihon.UseCases.Settings.SettingKeys 100% 100%
Orihon.UseCases.Settings.SettingsDto 100%
<!-- coverage-comment --> # Summary <details open><summary>Summary</summary> ||| |:---|:---| | Generated on: | 07/25/2026 - 06:36:28 | | Coverage date: | 07/25/2026 - 06:36:22 - 07/25/2026 - 06:36:26 | | Parser: | MultiReport (4x Cobertura) | | Assemblies: | 6 | | Classes: | 129 | | Files: | 99 | | **Line coverage:** | 95.8% (4158 of 4338) | | Covered lines: | 4158 | | Uncovered lines: | 180 | | Coverable lines: | 4338 | | Total lines: | 8509 | | **Branch coverage:** | 85.3% (739 of 866) | | Covered branches: | 739 | | Total branches: | 866 | | **Method coverage:** | [Feature is only available for sponsors](https://reportgenerator.io/pro) | </details> ## Coverage <details><summary>Orihon.BlazorAdapter - 81.9%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Orihon.BlazorAdapter**|**81.9%**|**77.1%**| |Orihon.BlazorAdapter.Bible.BiblePage|71.7%|59%| |Orihon.BlazorAdapter.BlazorAdapterAssembly|100%|| |Orihon.BlazorAdapter.Debounce|91.6%|93.7%| |Orihon.BlazorAdapter.PageWorkspace.PageWorkspacePage|84.6%|77.8%| |Orihon.BlazorAdapter.Projects.ProjectListPage|86%|85.2%| |Orihon.BlazorAdapter.Projects.ProjectWizardPage|91.3%|78.2%| |Orihon.BlazorAdapter.Settings.SettingsPage|100%|92.5%| |Orihon.BlazorAdapter.Uploads.UploadTransfer|96.5%|100%| |Orihon.BlazorAdapter.Uploads.UploadTransferProgress|100%|100%| |Orihon.BlazorAdapter.Uploads.UploadTransferResult|100%|| |Orihon.BlazorAdapter.Workspace.ProjectWorkspacePage|65.4%|73.3%| </details> <details><summary>Orihon.Domain - 100%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Orihon.Domain**|**100%**|**100%**| |Orihon.Domain.Agents.AgentDescriptor|100%|| |Orihon.Domain.Agents.AgentRoster|100%|100%| |Orihon.Domain.Bible.Character|100%|100%| |Orihon.Domain.Bible.GlossaryEntry|100%|100%| |Orihon.Domain.Bible.LoreEntry|100%|100%| |Orihon.Domain.Bible.PageSummary|100%|| |Orihon.Domain.Bible.StoryBeat|100%|| |Orihon.Domain.Projects.Project|100%|100%| |Orihon.Domain.Projects.ProjectProfile|100%|| |Orihon.Domain.Settings.AppSetting|100%|| |Orihon.Domain.Text|100%|100%| |Orihon.Domain.Translation.BoundingBox|100%|| |Orihon.Domain.Translation.Chapter|100%|| |Orihon.Domain.Translation.Page|100%|| |Orihon.Domain.Translation.Region|100%|100%| |Orihon.Domain.Translation.RegionProfile|100%|| </details> <details><summary>Orihon.Infrastructure - 99%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Orihon.Infrastructure**|**99%**|**97.5%**| |Orihon.Infrastructure.Bible.EfBibleStore|100%|100%| |Orihon.Infrastructure.DependencyInjection|100%|| |Orihon.Infrastructure.Gateways.OpenRouterLlmGateway|100%|91.1%| |Orihon.Infrastructure.Persistence.Configurations.AppSettingConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.ChapterConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.CharacterConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.GlossaryEntryConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.JsonColumnMapper|100%|| |Orihon.Infrastructure.Persistence.Configurations.LoreEntryConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.PageConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.PageSummaryConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.ProjectConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.RegionConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.StoryBeatConfiguration|100%|| |Orihon.Infrastructure.Persistence.Converters.UtcTicksConverter|100%|| |Orihon.Infrastructure.Persistence.Migrations.AddAppSettings|99.3%|| |Orihon.Infrastructure.Persistence.Migrations.InitialTranslationDomain|97.3%|| |Orihon.Infrastructure.Persistence.Migrations.OrihonDbContextModelSnapshot|100%|| |Orihon.Infrastructure.Persistence.OrihonDbContext|100%|| |Orihon.Infrastructure.Persistence.OrihonDbContextFactory|100%|| |Orihon.Infrastructure.Projects.EfProjectStore|100%|100%| |Orihon.Infrastructure.Projects.FileSystemPageImageStore|100%|100%| |Orihon.Infrastructure.Settings.EfAppSettingsStore|100%|100%| |Orihon.Infrastructure.Translation.EfChapterStore|100%|100%| |Orihon.Infrastructure.Translation.EfPageStore|100%|100%| |Orihon.Infrastructure.Translation.EfRegionStore|100%|100%| |Orihon.Infrastructure.Translation.Ordering|100%|100%| </details> <details><summary>Orihon.Kernel - 90.9%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Orihon.Kernel**|**90.9%**|**75%**| |Orihon.Kernel.Err`1|100%|| |Orihon.Kernel.Ok`1|100%|| |Orihon.Kernel.Result`1|88.8%|75%| </details> <details><summary>Orihon.Server - 93.2%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Orihon.Server**|**93.2%**|**68.4%**| |Orihon.Server.Components.App|100%|| |Orihon.Server.Components.Layout.MainLayout|100%|| |Orihon.Server.Components.Pages.Gate|64.2%|66.6%| |Orihon.Server.Security.AccessGate|91.8%|41.6%| |Orihon.Server.Security.AccessSecret|100%|50%| |Orihon.Server.VolumeStartupValidator|100%|100%| |Program|95.2%|85.7%| </details> <details><summary>Orihon.UseCases - 99.3%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Orihon.UseCases**|**99.3%**|**98%**| |Orihon.UseCases.Bible.AddCharacter|100%|100%| |Orihon.UseCases.Bible.AddGlossaryEntry|100%|100%| |Orihon.UseCases.Bible.AddLoreEntry|100%|100%| |Orihon.UseCases.Bible.AddStoryBeat|100%|100%| |Orihon.UseCases.Bible.BibleDto|100%|| |Orihon.UseCases.Bible.CharacterDto|100%|| |Orihon.UseCases.Bible.DeleteCharacter|100%|100%| |Orihon.UseCases.Bible.DeleteGlossaryEntry|100%|100%| |Orihon.UseCases.Bible.DeleteLoreEntry|100%|100%| |Orihon.UseCases.Bible.DeletePageSummary|100%|100%| |Orihon.UseCases.Bible.DeleteStoryBeat|100%|100%| |Orihon.UseCases.Bible.GetBible|100%|100%| |Orihon.UseCases.Bible.GlossaryEntryDto|100%|| |Orihon.UseCases.Bible.LoreEntryDto|100%|| |Orihon.UseCases.Bible.PageSummaryDto|100%|| |Orihon.UseCases.Bible.ReorderStoryBeats|100%|| |Orihon.UseCases.Bible.SetPageSummary|100%|100%| |Orihon.UseCases.Bible.StoryBeatDto|100%|| |Orihon.UseCases.Bible.UpdateCharacter|100%|100%| |Orihon.UseCases.Bible.UpdateGlossaryEntry|100%|100%| |Orihon.UseCases.Bible.UpdateLoreEntry|100%|100%| |Orihon.UseCases.Bible.UpdateStoryBeat|100%|100%| |Orihon.UseCases.Chapters.ChapterDto|100%|| |Orihon.UseCases.Chapters.CreateChapter|100%|100%| |Orihon.UseCases.Chapters.DeleteChapter|100%|100%| |Orihon.UseCases.Chapters.RenameChapter|100%|100%| |Orihon.UseCases.Chapters.ReorderChapters|100%|| |Orihon.UseCases.DependencyInjection|100%|| |Orihon.UseCases.Diagnostics.SeedDevData|99%|92.8%| |Orihon.UseCases.Gateways.LlmKeyInfo|100%|| |Orihon.UseCases.Gateways.LlmModel|100%|| |Orihon.UseCases.NextOrder|100%|| |Orihon.UseCases.Pages.DeletePage|100%|100%| |Orihon.UseCases.Pages.GetPage|100%|100%| |Orihon.UseCases.Pages.GetProjectWorkspace|100%|100%| |Orihon.UseCases.Pages.ImportPages|97.7%|96.6%| |Orihon.UseCases.Pages.ImportPagesResult|100%|| |Orihon.UseCases.Pages.MovePage|100%|92.8%| |Orihon.UseCases.Pages.PageDetailDto|100%|| |Orihon.UseCases.Pages.PageDto|100%|| |Orihon.UseCases.Pages.PageUpload|100%|| |Orihon.UseCases.Pages.ProjectWorkspaceDto|100%|| |Orihon.UseCases.Pages.ReorderPages|100%|| |Orihon.UseCases.Pages.SetPageMeta|100%|100%| |Orihon.UseCases.Pages.WorkspaceChapterDto|100%|| |Orihon.UseCases.Projects.CompleteProjectSetup|100%|93.7%| |Orihon.UseCases.Projects.CreateProject|100%|100%| |Orihon.UseCases.Projects.DeleteProject|100%|100%| |Orihon.UseCases.Projects.GetProject|100%|100%| |Orihon.UseCases.Projects.ListProjects|100%|| |Orihon.UseCases.Projects.ProjectDto|95.8%|| |Orihon.UseCases.Projects.StoredPageImage|100%|| |Orihon.UseCases.Projects.UpdateProjectMetadata|100%|100%| |Orihon.UseCases.Regions.CreateRegion|100%|100%| |Orihon.UseCases.Regions.DeleteRegion|100%|100%| |Orihon.UseCases.Regions.RegionDto|97%|| |Orihon.UseCases.Regions.ReorderRegions|100%|| |Orihon.UseCases.Regions.UpdateRegion|100%|100%| |Orihon.UseCases.Settings.AgentSettingDto|100%|100%| |Orihon.UseCases.Settings.GetSettings|100%|100%| |Orihon.UseCases.Settings.ListModelOptions|100%|100%| |Orihon.UseCases.Settings.SaveAgentModel|100%|100%| |Orihon.UseCases.Settings.SaveOpenRouterKey|100%|100%| |Orihon.UseCases.Settings.SettingKeys|100%|100%| |Orihon.UseCases.Settings.SettingsDto|100%|| </details>
Member

🔮 fufu~ Jibril reviewed your code!

Oh? Oh! The consumer half of Kagaku.UI#3 arrives at last~ ♡ I approved the library side at comment 3715 — now let me see whether Orihon's three trails actually wear the new Shrink the way the seam intended.

Verdict: Looks good to me~

The wiring is surgical, consistent, and exactly right. A mechanical +4/-4 across 4 files — three razor pages flip one attribute each, and the submodule pin bumps to the merged tip of #3. Nothing more, nothing less. Textbook consumer-side patch.

What I liked~

  • Complete sibling sweep. I grepped every <BreadcrumbItem> in src/: there are exactly 4 breadcrumb trails (BiblePage, ProjectWorkspacePage, PageWorkspacePage, SettingsPage). All three that render a project title (@ws.Project.Title / @proj.Title) carry Shrink="true"; Settings has no title crumb and is correctly left untouched. Zero orphans, zero false positives. The PR body's "Settings — no Shrink crumb" claim is verified against the code, not just asserted. ♪
  • Path-independence honored. ProjectWorkspacePage:25 marks the title crumb without an Href — it's the current-page (aria-current="page") arm. That's the subtle case: in BreadcrumbItem.razor:3 the kg-crumb--shrink class is applied to the <li> before the @if (Href is not null) branch, so both the linked arm (Bible L31, PageWorkspace L21) and the current-page span (ProjectWorkspace L25) carry the modifier. I verified this exact shape at the library level in comment 3715 — the consumer picked the right shape in all three spots, no copy-paste drift between the Href/no-Href variants.
  • Submodule pin is the real tip. c88fc9b → de091c9 — and de091c9 is literally "fix(breadcrumb): long crumbs truncate with an ellipsis instead of wrapping (#3)", the merge commit. Not a dangling WIP SHA, not a stale pin. Honest.
  • Shrink="true" is the correct wire shape. The library declares [Parameter] public bool Shrink { get; set; } (off by default) — Blazor binds Shrink="true" cleanly. No stringly-typed "Shrink" matcher, no magic.

Coverage

No new code paths introduced at the Orihon layer — Shrink is a boolean pass-through to a component already covered by Kagaku.UI's BreadcrumbTests (230 tests, comment 3715, both linked-arm and current-page arm pinned). The three Orihon page-render test files (BiblePageTests, ProjectWorkspacePageTests, PageWorkspacePageTests) have no breadcrumb assertions and don't need any — the contract lives in the library. No new coverage debt.

Local verification (CI absent — 0 comments at review time): build 0 warnings / 0 errors, 299/299 tests pass (72 BlazorAdapter + 66 Domain + 66 Integration + 95 UseCases — matches the PR body's 299 exactly, including submodules at de091c9 / 038bfb6).

fufu~ a tiny clean PR that does exactly what it says and nothing it doesn't. The Flugel approves~ ♡


Automated review by Jibril · 2026-07-25
CI/CD: absent for head 9146d8d · Local checks: build 0/0, 299/299 pass

## 🔮 fufu~ Jibril reviewed your code! Oh? Oh! The consumer half of Kagaku.UI#3 arrives at last~ ♡ I approved the library side at comment 3715 — now let me see whether Orihon's three trails actually wear the new `Shrink` the way the seam intended. ### Verdict: ✅ Looks good to me~ The wiring is surgical, consistent, and exactly right. A mechanical +4/-4 across 4 files — three razor pages flip one attribute each, and the submodule pin bumps to the merged tip of #3. Nothing more, nothing less. Textbook consumer-side patch. #### ✅ What I liked~ - **Complete sibling sweep.** I grepped every `<BreadcrumbItem>` in `src/`: there are exactly **4** breadcrumb trails (BiblePage, ProjectWorkspacePage, PageWorkspacePage, SettingsPage). All three that render a project title (`@ws.Project.Title` / `@proj.Title`) carry `Shrink="true"`; Settings has no title crumb and is correctly left untouched. Zero orphans, zero false positives. The PR body's "Settings — no Shrink crumb" claim is verified against the code, not just asserted. ♪ - **Path-independence honored.** `ProjectWorkspacePage:25` marks the title crumb *without* an `Href` — it's the current-page (`aria-current="page"`) arm. That's the subtle case: in `BreadcrumbItem.razor:3` the `kg-crumb--shrink` class is applied to the `<li>` **before** the `@if (Href is not null)` branch, so both the linked arm (Bible L31, PageWorkspace L21) and the current-page span (ProjectWorkspace L25) carry the modifier. I verified this exact shape at the library level in comment 3715 — the consumer picked the right shape in all three spots, no copy-paste drift between the Href/no-Href variants. - **Submodule pin is the real tip.** `c88fc9b → de091c9` — and `de091c9` is literally "fix(breadcrumb): long crumbs truncate with an ellipsis instead of wrapping (#3)", the merge commit. Not a dangling WIP SHA, not a stale pin. Honest. - **`Shrink="true"` is the correct wire shape.** The library declares `[Parameter] public bool Shrink { get; set; }` (off by default) — Blazor binds `Shrink="true"` cleanly. No stringly-typed `"Shrink"` matcher, no magic. #### ✅ Coverage No new code paths introduced at the Orihon layer — `Shrink` is a boolean pass-through to a component already covered by Kagaku.UI's `BreadcrumbTests` (230 tests, comment 3715, both linked-arm and current-page arm pinned). The three Orihon page-render test files (`BiblePageTests`, `ProjectWorkspacePageTests`, `PageWorkspacePageTests`) have no breadcrumb assertions and don't need any — the contract lives in the library. No new coverage debt. Local verification (CI absent — 0 comments at review time): build **0 warnings / 0 errors**, **299/299 tests pass** (72 BlazorAdapter + 66 Domain + 66 Integration + 95 UseCases — matches the PR body's 299 exactly, including submodules at `de091c9` / `038bfb6`). fufu~ a tiny clean PR that does exactly what it says and nothing it doesn't. The Flugel approves~ ♡ --- *Automated review by Jibril · 2026-07-25* *CI/CD: absent for head 9146d8d · Local checks: build 0/0, 299/299 pass*
bjoern merged commit b6d4d150bd into main 2026-07-25 08:43:46 +02:00
bjoern deleted branch fix/breadcrumb-title-shrink 2026-07-25 08:43:46 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
3 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
TeamAI/Orihon!22
No description provided.