No description
- C# 91.9%
- HTML 4.5%
- Python 2.9%
- CSS 0.7%
Insurance for the deploy image (ADR-free change: build and Dockerfile only). The goal is that a future Dockerfile change can't quietly ship a UI that renders but never responds. **What's in** - `src/Orihon.Server/Orihon.Server.csproj`: sets `<RequiresAspNetWebAssets>true</RequiresAspNetWebAssets>` explicitly. SDK 10.0.4xx is what `mcr.microsoft.com/dotnet/sdk:10.0` ships now. It sets that property only when it can see `.razor` Content items at restore time (`Microsoft.NET.Sdk.Web.ProjectSystem.targets`). Only then does it restore `Microsoft.AspNetCore.App.Internal.Assets`, the pack that carries `_framework/blazor.web.js`. Shikigami's image hit exactly this: its Dockerfile restored from the .csproj files alone and published with `--no-restore`, and the image shipped without the Blazor script. Setting the property explicitly means restore order no longer matters. - `deploy/Dockerfile`: after the `dotnet publish` in the build stage, `RUN test -f /app/publish/wwwroot/_framework/blazor.web.js`. Without the script, the access gate's fallback policy answers the missing asset with a redirect to the gate page instead of an error, so nothing else would catch it. Now the image build fails. **Orihon isn't broken today.** `deploy/Dockerfile` runs `COPY . .` before `dotnet restore`, so the SDK sees the `.razor` files and the published image already contains `blazor.web.js`. This PR guards against a later restore-layer optimisation or a `--no-restore` publish bringing the bug in silently. **Verified** - `dotnet build src/Orihon.Server/Orihon.Server.csproj -m:1 -nodeReuse:false`: 0 warnings, 0 errors. - `podman build -f deploy/Dockerfile -t orihon-guard-check .` from the worktree root, with the default `APP_VERSION`: succeeded, and the new `test -f` step passed. `podman run --rm --entrypoint ls … /app/wwwroot/_framework/` lists `blazor.web.js` (with `.br`/`.gz`) in the runtime image. The image was removed afterwards. - Not tested: whether the guard fails when the file is missing. No negative build was run. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: schattenan <schattenan@kagaku.eu> Reviewed-on: #212 |
||
|---|---|---|
| .claude/skills/pr-review-loop | ||
| .config | ||
| .github | ||
| deploy | ||
| docs | ||
| external | ||
| src | ||
| tests | ||
| .dockerignore | ||
| .gitattributes | ||
| .gitignore | ||
| .gitmodules | ||
| AGENTS.md | ||
| CLAUDE.md | ||
| Directory.Build.props | ||
| Directory.Packages.props | ||
| Orihon.slnx | ||
| README.md | ||
Orihon
A single-user, self-hosted doujinshi translation harness — a Blazor Server app that drives translation through a heavy-handed, inspectable AI workflow graph.
Status: repository skeleton. Structure, submodules, central package management, CI and the container build are in place. The architecture (ADRs) and user stories are written next, before feature code.
Prerequisites
- .NET SDK 10.0+
- Access to the vendored submodules on
git.kagaku.eu(TeamAI org)
Getting started
# Clone WITH submodules (OpenRouter.Net, Kagaku.UI live under external/)
git clone --recurse-submodules <orihon-url>
# Already cloned without them?
git submodule update --init --recursive
dotnet build Orihon.slnx --configuration Release
dotnet test Orihon.slnx --configuration Release
dotnet run --project src/Orihon.Server # http://localhost:5000, /health
Layout
| Project | Responsibility |
|---|---|
src/Orihon.Kernel |
Technical primitives (Result<T>). References nothing. |
src/Orihon.Domain |
Entities and value objects. Pure — no I/O, no framework attributes. |
src/Orihon.UseCases |
Application layer: use cases and the ports they depend on. |
src/Orihon.Infrastructure |
Driven adapters. The only project that sees the vendored clients. |
src/Orihon.BlazorAdapter |
Primary UI adapter (Razor Class Library). |
src/Orihon.Server |
ASP.NET host + composition root. |
tests/* |
Unit, integration and component test projects. |
external/* |
Vendored libraries as git submodules (OpenRouter.Net, Kagaku.UI). |
Dependency direction: Kernel → Domain → UseCases → {Infrastructure, BlazorAdapter} → Server,
enforced by the project-reference graph.
Conventions
.slnxsolution format;Directory.Build.props+Directory.Packages.props(central package management).net10.0, nullable + implicit usings on, warnings-as-errors, deterministic, invariant globalization.- Versioning via MinVer (
v-prefixed tags). - CI on Forgejo Actions (
.github/workflows/); container image published togit.kagaku.eu/teamai/orihon.