refactor(ui): adopt the Kagaku.UI host pieces #132
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/kagaku-ui-host-migration"
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?
Second app-side landing of the Kagaku.UI host-layer extraction (Kagaku.UI #18/#19/#20; Kagura's twin is #277 there). Bumps the vendored submodule to merged main and deletes the app-side copies the library now owns. −350 lines, +38.
What changes
Companion adoption —
OrihonStoreInitializer,CircuitErrorSink,CircuitErrorPaneldeleted; 8 initializer mounts + Program.cs and the test harness point atKagaku.UI.Fluxor's. Orihon's initializer was already the forceLoad-reload variant, so behavior is identical — the wrapper it pioneered now lives in the library.ReconnectModal — the gap this audit found — Orihon shipped with no reconnect UI at all: a dropped circuit was a frozen page with zero feedback.
App.razornow mounts the library's styled dialog (token CSS, framework contract, deferred module driver).<KagakuScripts />— the hand-curated JS list becomes one library tag.caption.js(Orihon's own, outside the library) keeps its own tag beside it.Debounceretirement — Orihon's local helper (the better of the two app implementations — it was upstreamed into the library in Kagaku.UI #18, gaining the ownership-check fix and a double-dispose pin) is deleted along with its tests. Construction sites passTimeProvider.System; the two page tests referencingDelayMsuseDefaultDelay.Deliberately not in this PR
PageShell adoption and retokenizing the hardcoded rems on ProjectListPage/BiblePage — mechanical follow-ups; this PR stays a pure host-layer swap.
Verification
Submodule:
external/Kagaku.UI→48a5e8b. Build clean. All suites green: 275 adapter (containment detonations now fire through the companion), 150 domain, 287 integration, 584 use-cases.Summary
Summary
Coverage
Orihon.BlazorAdapter - 95.5%
Orihon.Domain - 100%
Orihon.Infrastructure - 97.1%
A835C427B12E8B84E2A8A7283193FC51C220B5B4E80CE8D56__BlankLines_4
A835C427B12E8B84E2A8A7283193FC51C220B5B4E80CE8D56__BlockBreaks_1
A835C427B12E8B84E2A8A7283193FC51C220B5B4E80CE8D56__SpaceRuns_3
A835C427B12E8B84E2A8A7283193FC51C220B5B4E80CE8D56__Tags_2
Orihon.Kernel - 90.9%
Orihon.Server - 94.4%
Orihon.UseCases - 97.6%
🔮 fufu~ Jibril reviewed your code!
Oh? Oh my~ A −350/+38 PR where the additions are almost entirely comments and constructor arguments? That's not a refactor, that's a heist — three app-side copies lifted cleanly into the library and the vault left spotless. I checked every drawer, you know~ ♡
Verdict: ✅ Looks good to me~
What I verified (all of it, personally~)
48a5e8bis exactly merged Kagaku.UI main — and its tree (2282e9f) is byte-identical to the50651dftip I approved in Kagaku.UI #20 round 4, which itself carried the #18 (r2) and #19 (r4) approved trees. Zero unreviewed library code rides in on this pin. That's how a vendored adoption should land — fufu, beautiful chain of custody~OrihonStoreInitializer,CircuitErrorSink/Panel(app-side),BlazorAdapter.Diagnostics,DelayMs— grep acrosssrc/+tests/returns nothing. Clean removals, not half-deletes.<Kagaku.UI.Fluxor.StoreInitializer />, and the DI registration follows in both homes that need it (Program.cs:87+AdapterTestContext:74). TheUnhandledException→e.Handled()→sink→modal contract is now pinned through the companion byCircuitErrorContainmentTests— the detonation tests genuinely fire through the library component, not a stale local copy.DefaultDelay= 700ms = the oldDelayMs, all 7 construction sites passTimeProvider.System, and the two page tests scale their wait offDefaultDelayso they can't drift. The deleted local suite's four behaviors are all superseded richer in the library suite (rapid-schedules, flush, discard-through-dispose, plus double-dispose, fault isolation, and custom-delay pins on a deterministicFakeTimeProvider). Coverage moved with the class, into the repo whose CI owns it — correct.App.razor— Orihon shipped with no reconnect UI whatsoever. A dropped circuit was a frozen page. Now it mounts the styled dialog with its deferred module driver (thetype="module"contract I mutation-probed in #18).<KagakuScripts />ships 12 scripts where the hand-list had 9 — the three additions (quicklink/mask/audio) are inert until one of their components drives them, per the #20 design. Theme stays first, before first paint.caption.jscorrectly keeps its own tag — it's Orihon's, not the library's.✅ What I liked~
App.razorcomments explain why (the frozen-page gap, caption.js staying app-side) — exactly where tribal knowledge belongs.💡 Little ideas (non-blocking)~
BiblePageTests/ProjectWorkspacePageTestsaddusing Kagaku.UI;whileCircuitErrorContainmentTests/SetupChatTestsuse fully-qualifiedKagaku.UI.Fluxor.…. Both compile cleanly; pure consistency polish for whichever style the codebase settles on.PageShell adoption and the rems retokenization as declared follow-ups — I'll be waiting for those with my knife smile ready~ fufu~ ♡
Automated review by Jibril · 2026-09-14
CI/CD: absent for head
728af2e(no bot comment yet) · Local checks: build 0w/0e · 1296/1296 tests green (275 adapter, 150 domain, 287 integration, 584 use-cases)