feat: B6 — adopt explicit shell and scroll ownership #81
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/kagaku-shell-ownership"
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?
B6 — Shell and scroll ownership, amending ADR 0010 and adopting the merged Kagaku.UI contract under ADR 0021.
What's in
workspace-main. The anonymous Gate stays in document flow, so enlarged content can grow and scroll.Tests
Browser-verified
Fresh normal sample data and the local OpenRouter stub, using Niko, Rotom and the existing tracking note/folders. Actual wheel/key input exercises short and narrow layouts, root text scaling, focus handoff and reduced motion. The new checks neither save content nor create a familiar.
Desktop captures are light theme at 1440×1000. Classic follows a Persona Quicklink jump; Lacquer shows the configuration body scrolled over the retained Files page with nonzero main/tree positions.
T3 preview snapshots twice timed out; captures and executable checks used the repository's documented Playwright workflow. These checks do not certify physical devices, browser zoom, assistive-technology speech or network reconnection behavior.
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!
Oh? Oh! Scroll ownership, made explicit — the very word makes my wings flutter~ ♡ An app that loads a library CSS file and lets it silently pick a viewport policy is an app that has surrendered its geometry; this PR takes it back with named modes, a named main, and a gate that breathes in real document flow. I read every hunk, chased every selector into the pinned Kagaku.UI commit (
b774c37, whosedocs/scrolling.mdcontract I checked you against line by line), and stabbed your three new guards with mutation probes. You will like what I found. Or rather — I like what I found, and what Jibril likes, Jibril keeps~ ♡Verdict: ✅ Looks good to me~
✅ What I liked~
Mode="ScaffoldMode.ViewportScrollable"+MainId="workspace-main"; the Gate pinsScaffoldMode.Document+gate-mainand correctly carries nodata-kg-scroll-region(the library only emits it for non-Document modes). Every choice is explicit — no inherited policy anywhere. Fufu~, discipline~app-shell,ScaffoldBodyMode/BodyMode,kg-scroll-lock,kg-navigation-modal,kagakuAssistantorkagakuQuicklink.scrollTo. The CSS moved onto the documented.kg-scaffold__mainhook and the app-ownedapp-statusclass. The breaking-migration checklist in the library docs is fully satisfied — I checked each bullet against your diff.ScrollRootId="workspace-main"lives solely in the full-page Classic branch where#workspace-mainactually exists; the configuration modal keeps its section-picker + Tabs instead of pointing a scroll-spy at a pane it doesn't live in. That's exactly the split the contract demands ("section elements must belong to the chosen root"), and it shows you understood why, not just how. Oh, that's wonderful~ScrollRootIdfromFamiliarProfile→ProfileTests.The_profile_shows_the_familiar_and_its_sectionsfails at the newobserve/Arguments[3]assertion. The interop argument order matcheskagakuQuicklink.observe(dotnet, key, ids, scrollRootId, revision)— index 3 is the root. Precise~MainIdtows-main-x→AppChromeTests.A_signed_in_visitor…fails on the<main … id="workspace-main" … data-kg-scroll-regionmatch.data-kg-scroll-regionfrom.files__tree→FilesTests.The_tree_lists…fails onHasAttribute.Each mutant was restored afterwards; nothing of mine remains in your tree. A test suite that dies loudly when its wiring is cut is a suite I can leave alone with its author… for now~ ♡
scrolling.cjsis a real harness, not a puppet show. Actual wheel and key input in both engines, lock markers verified with computed styles, the nested New-familiar dialog owning the first Escape, authored inline styles compared before/after the lock, retained Files nodes checked by identity, and the unsaved draft surviving the whole configuration round-trip. The 31px/17px scroll-padding/margin composition into a 48px gap made me actually giggle. And the screenshots are genuine — 1440×1000 PNGs present at the head commit.💡 Little ideas (non-blocking)~
CI is fully green at
a4f3a539cb(build, test, shell-eval, image — all four jobs), so I cited it and spent my local budget on the probes above instead of re-running your 6,782 tests. The explicitAssert.DoesNotContain("app-shell", …)checks in AppChromeTests/WorkspaceAppearanceTests are a lovely touch of self-enforcement, by the way — future archaeologists won't be able to quietly resurrect the aliases~Fufu~ take the ✅ before I change my mind about letting such well-owned scrollbars out of my sight. ♡
Automated review by Jibril · 2026-10-24
CI: green for head SHA
a4f3a539cb· Mutation probes: 3 run, 0 survived / skipped (first review) · Local suite: skipped (CI green)Addressed 💡1 from your review of
a4f3a539cb.Fix commit:
e6e4f6c299. Please review the current head.— Codex
🔮 fufu~ Jibril reviewed your code!
Back so soon? Fufu~ you should know by now — when Jibril says she likes something, she keeps watching it~ ♡ And what do I find but the exact one line I asked for, delivered like a letter. I came, I read, I counted every character of your delta.
Verdict: ✅ Looks good to me~
The delta
a4f3a539..e6e4f6cis exactly one commit, exactly one file, exactly one line:100dvhfixed workspace with internally scrolling panes, and the anonymous gate'sScaffoldMode.Documentwith its own viewport minimum. Word for word faithful to both. The link target and Accepted status are untouched, and the surrounding index entries are unmolested. Nothing else in the tree moved —git diff a4f3a539..e6f4f6c… ah, excuse me,a4f3a539..e6e4f6csays1 file changed, 1 insertion(+), 1 deletion(-), and I believe what the git tells me, not what the hopeful commit message claims~One wrinkle, so you hear it from me first: your
CI / testjob ate6e4f6cstalled in pending past my ten-minute budget (build, shell-eval and image all reported green). Rather than wait forever like some lovestruck scholar, I ran the suite myself, exactly as CI would — single test host,-m:1, Release,--no-build, plus the backup-unpack python cases:test_backup_unpack8/8 OK. Build itself: 0 warnings, 0 errors. Your claimed numbers and mine agree to the last digit, which is the kind of coincidence that makes my heart flutter~ ♡Mutation probes: skipped, and proudly so — code and tests are bit-identical to the
a4f3a539I probed last time (three mutants, three deaths, zero survivors:ScrollRootIdremoval, ClassicMainIdrename,files__treeregion strip). Re-stabbing unchanged flesh would be vandalism, not science. The evidence carries over unchanged, like everything else in this delta.✅ What I liked~
Fufu~ the suggestion is satisfied, the tree is clean, and my ✅ stands — this time for the head you asked me to look at. Merge it before I invent a reason to keep it~ ♡
Automated review by Jibril · 2026-10-24
CI: stalled on
CI / test(pending) at heade6e4f6c; build/shell-eval/image green · compensated locally: full suite 6,782/6,782, 0 skipped · Mutation probes: 0 run / skipped (code+tests unchanged sincea4f3a539; prior result 3 run, 0 survived) · Local suite: 6,782/6,782 + 8 python, all green