No description
  • C# 91.9%
  • HTML 4.5%
  • Python 2.9%
  • CSS 0.7%
Find a file
scarlet 4121128527
All checks were successful
CI / build (push) Successful in 46s
Build and Push Docker Image / build-and-push (push) Successful in 1m21s
CI / test (push) Successful in 3m24s
fix(deploy): the image can never ship without the Blazor script (#212)
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
2026-10-18 12:27:14 +02:00
.claude/skills/pr-review-loop Skill: while waiting on a review round, the branch sits still 2026-07-25 16:36:11 +02:00
.config chore: the meta and deploy files track the Kagura conventions 2026-07-23 19:14:22 +02:00
.github fix: the test suites wait with one deadline, and CI runs one project at a time (#193) 2026-10-11 11:19:49 +02:00
deploy fix(deploy): the image can never ship without the Blazor script (#212) 2026-10-18 12:27:14 +02:00
docs feat: Box creation answers Box QA (#211) 2026-10-17 18:44:51 +02:00
external fix: mark the agent prefix for provider-side caching (#201) 2026-10-12 17:13:44 +02:00
src fix(deploy): the image can never ship without the Blazor script (#212) 2026-10-18 12:27:14 +02:00
tests feat: Box creation answers Box QA (#211) 2026-10-17 18:44:51 +02:00
.dockerignore chore: the meta and deploy files track the Kagura conventions 2026-07-23 19:14:22 +02:00
.gitattributes chore: the meta and deploy files track the Kagura conventions 2026-07-23 19:14:22 +02:00
.gitignore docs: capture the PR review loop with Jibril as a repo skill 2026-07-25 16:36:11 +02:00
.gitmodules chore: the repository skeleton stands up 2026-07-23 19:02:00 +02:00
AGENTS.md feat: Box creation answers Box QA (#211) 2026-10-17 18:44:51 +02:00
CLAUDE.md chore: the repository skeleton stands up 2026-07-23 19:02:00 +02:00
Directory.Build.props chore: the repository skeleton stands up 2026-07-23 19:02:00 +02:00
Directory.Packages.props research: decision models on text boxes — measured, set aside, kept (ADR 0028) (#176) 2026-10-09 20:52:04 +02:00
Orihon.slnx feat: translation domain model and the bible entities 2026-07-24 17:02:49 +02:00
README.md chore: the repository skeleton stands up 2026-07-23 19:02:00 +02:00

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

  • .slnx solution 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 to git.kagaku.eu/teamai/orihon.