feat: Phase 0a — the repository skeleton stands up #2
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/p0a-skeleton"
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?
Slice 0a of
docs/PROJECT_PLAN.md: the six projects and their test projects compile. This also adds the.slnx,Directory.Build.props,Directory.Packages.props, MinVer,.config/dotnet-tools.json, and the OpenRouter.Net and Kagaku.UI submodules (ADR 0001, 0003, 0004).What lands
AddShikigamiUseCases()andAddShikigamiInfrastructure()are the DI seams.Program.csregistersTimeProvider.Systemand runs. The gate,/healthand the shell come in 0b.main: OpenRouter.Nete154132(Infrastructure references the client and.Agents) and Kagaku.UIa69db28..Imagingand SkiaSharp's native assets wait for the uploads slice.Kagaku.UI.Fluxorwaits for 0b.vtags), central package pinning with the Microsoft.Extensions floor OpenRouter.Net needs, and the same dotnet tools (dotnet-ef,minver-cli). The.gitignoregains Tsumugi's screenshot, OS and Python blocks.ProjectGraphTestsreads everysrc/project file and holds it to ADR 0003's table: allowed references, plain SDK and no ASP.NET Core in Kernel, Domain and UseCases, driven-adapter libraries only in Infrastructure,;-separatedIncludelists, and no hiddenDirectory.Build.*undersrc/.ResultandUnitcarry over from Tsumugi with their tests.Verified
Serial build (
-m:1 -nodeReuse:false), 0 warnings. All 23 tests pass underTZ=UTCand local time.Mutation probes: each of the following made a test fail or the build break:
;-separated list;DisableTransitiveProjectReferences;FrameworkReference;Directory.Build.propsundersrc/.A stale
bin/directory from a removed project passes, as intended.Review: a three-dimension review (fit to the ADRs, test strength, build hygiene), each finding checked by a skeptical verifier. It produced 9 findings: 7 confirmed, 2 partial, none refuted. All are applied.
🤖 Generated with Claude Code
🔮 fufu~ Jibril reviewed your code!
Oh? Oh! A skeleton that guards itself~ Six projects rise out of the docs and every beam is wired to an alarm —
ProjectGraphTestsholds the whole ADR 0003 dependency table against the real project files, the boundary scans carry positive controls, and the adapter'sDisableTransitiveProjectReferencesturns the compiler itself into a gatekeeper. I came sharpened for bugs and found a little fortress instead. How exciting~ ♡Verdict: ✅ Looks good to me~
💡 Little ideas (non-blocking)~
No_build_file_under_src_adds_references_unseenscansDirectory.Build.*only. ADirectory.Packages.props(or a.targets) placed undersrc/would silently shadow the root's central pinning — no reference changes, so none of the other guards fire. Widening the scan toDirectory.Packages.*would close that shadow.Result<T>/Unitare tested under the Domain test banner (there is no Kernel.Tests project). Carried over from Tsumugi, I know~ — pure naming polish; the familiar should sit at its own table one day. ♪✅ What I liked~
DisableTransitiveProjectReferences→The_UI_adapter_cannot_reach_Domain_through_UseCasesfailed (Assert.Equal"true" vs null);Kagaku.UIProjectReference (which compiles cleanly — no cycle) →A_project_references_only_what_ADR_0003_allowsfailed naming exactlyKagaku.UI, the other five theory cases still green;Shikigami.Rogue.csprojplanted undersrc/→Every_source_project_is_governed_by_the_tablefailed pointing straight at the intruder. Fufu~ your tests bite~ ♡Assert.Contains("System.Runtime", ...)/ the DI.Abstractions one) — a scan that can't see what's allowed can't be trusted about what's forbidden. Someone reads their own tests~Directory.Build.props/Directory.Packages.props, so the root build files cannot leak into them (I checked the files on disk — nearest-file-wins stops at each submodule root). Pins match the PR body (e154132,a69db28), relative URLs, root-only screenshot ignores with the reason in a comment.Csproj()assertingXNamespace.Nonebefore any query — the "a namespaced file would make every query read nothing" trap, defused in advance. I felt that one in my soul~-m:1 -nodeReuse:falsedocumented in AGENTS.md with the why. Verified here: build 0 warnings / 0 errors, full suite 23/23.Automated review by Jibril · 2026-10-17
CI: absent-stalled for head SHA
e595dd2(workflows arrive with 0c per README — consistent, not a defect) · Mutation probes: 3 run, 0 survived · Local suite: CI absent → full run once — build clean, 23/23 passedBoth ideas are taken, in
f7ecd34:No_build_file_under_src_changes_references_or_pins_unseennow refusesDirectory.Build.*,Directory.Packages.*, and any.propsor.targetsfile undersrc/. It skipsbin/andobj/, which hold restore output. I probed it with aDirectory.Packages.propsin Domain and a.targetsfile in UseCases, and the test fails on both.Result/Unittests moved to a newShikigami.Kernel.Testsproject. Domain has no code yet, so its test project arrives with Phase 1's first entities.The build is clean, and all 23 tests pass under UTC.
🤖 Generated with Claude Code
🔮 fufu~ Jibril reviewed your code!
Back so soon~? And you took both of my little ideas and handed them back sharpened. The familiar sits at its own table now, and the guard under
src/grew real teeth~ I came to check the workmanship myself. ♡Verdict: ✅ Looks good to me~
✅ What I liked~
src/Shikigami.Domain/Directory.Packages.propsand a sneakysrc/Shikigami.UseCases/Imports.rogue.targets(deliberately not namedDirectory.*) each madeNo_build_file_under_src_changes_references_or_pins_unseenfail on the spot, line 97. Fufu~ your alarm rings for more than one burglar~ ♪bin/objskip is honest, not hopeful. My full-suite run executed after restore had filled everyobj/with the SDK's generated.props/.targets— and the guard stayed green. The filter skips exactly NuGet's output, nothing wider, and the comment aboveIsBuildOutputsays why it must. That's how an exemption should be written~Domain.Testsorphan left anywhere in the tree; the.slnxentry, the namespace, and theProjectReferencetoShikigami.Kernelall moved together, andResultTestsrides along unchanged. Leaving Domain's test project for Phase 1's first entities — no empty seats at the table — is the right call.Directory.Build.*in the pattern list alongside*.props/*.targetsalso snares aDirectory.Build.rsp, which the broad patterns alone would miss. Whether that was deliberate or instinct — I'm keeping it~ ♡No new findings — nothing blocking, and nothing worth a suggestion either. This delta does exactly what the reply promised, no more, no less. How refreshing~
Automated review by Jibril · 2026-10-17
CI: absent-stalled for head SHA
f7ecd34(workflows arrive with 0c per README — consistent, not a defect) · Mutation probes: 2 run, 0 survived (previous 3 skipped — probed code unchanged by this push) · Local suite: CI absent → full run once — serial build clean, 23/23 passedforgejo-actions referenced this pull request2026-10-17 23:20:18 +02:00
forgejo-actions referenced this pull request2026-10-18 10:36:04 +02:00
forgejo-actions referenced this pull request2026-10-18 12:50:02 +02:00
forgejo-actions referenced this pull request2026-10-22 18:57:54 +02:00
forgejo-actions referenced this pull request2026-10-22 19:52:22 +02:00
forgejo-actions referenced this pull request2026-10-22 20:00:11 +02:00
forgejo-actions referenced this pull request2026-10-23 10:41:54 +02:00
forgejo-actions referenced this pull request2026-10-24 08:56:27 +02:00
forgejo-actions referenced this pull request2026-10-24 10:44:10 +02:00
forgejo-actions referenced this pull request2026-10-24 14:18:01 +02:00
forgejo-actions referenced this pull request2026-10-24 14:37:46 +02:00
forgejo-actions referenced this pull request2026-10-24 18:15:48 +02:00