fix(ci): stop the image job leaking a 2.5 GB image per run #60

Merged
bjoern merged 1 commit from fix/ci-image-disk-leak into main 2026-10-23 15:56:14 +02:00
Member

Problem

The CI image job builds deploy/Dockerfile with load: true into the runner host's Docker daemon (the runner mounts the host socket) under the fixed tag shikigami-browser-check:ci. Each run moves the tag and leaves the previous image behind as <none>. With the image now at ~2.5 GB (Chromium install layer), ~21 dangling copies (~53 GB) accumulated in ~15 hours and filled the server disk — image builds then failed with failed to ingest … no space left on device.

Change (.github/workflows/ci.yml, image job only)

  • Per-run tag shikigami-browser-check:ci-${run_id}-${run_attempt} — concurrent runs (push + PR) can no longer swap images under each other.
  • Cleanup step with if: always() that docker image rms that tag, so failed/cancelled-mid-test runs clean up too.
  • driver: docker for setup-buildx-action: builds directly into the host daemon instead of a throwaway BuildKit container → no export-to-tarball + import (the step that hit ENOSPC), and layers are cached across runs, so the job gets faster.

docker-publish.yml is unchanged (it only pushes, never loads).

Server side (already done)

Hourly prune of dangling images + 10 GB build-cache cap + 80 % disk alert to Matrix, as a safety net for other repos with the same pattern.

Test plan

  • image job on this PR is green (build, volume check, browser-host contract)
  • After the run, docker images | grep shikigami-browser-check on the server shows no leftover

🤖 Generated with Claude Code

## Problem The CI `image` job builds `deploy/Dockerfile` with `load: true` into the **runner host's Docker daemon** (the runner mounts the host socket) under the fixed tag `shikigami-browser-check:ci`. Each run moves the tag and leaves the previous image behind as `<none>`. With the image now at ~2.5 GB (Chromium install layer), ~21 dangling copies (~53 GB) accumulated in ~15 hours and filled the server disk — image builds then failed with `failed to ingest … no space left on device`. ## Change (`.github/workflows/ci.yml`, `image` job only) - **Per-run tag** `shikigami-browser-check:ci-${run_id}-${run_attempt}` — concurrent runs (push + PR) can no longer swap images under each other. - **Cleanup step** with `if: always()` that `docker image rm`s that tag, so failed/cancelled-mid-test runs clean up too. - **`driver: docker`** for `setup-buildx-action`: builds directly into the host daemon instead of a throwaway BuildKit container → no export-to-tarball + import (the step that hit ENOSPC), and layers are cached across runs, so the job gets faster. `docker-publish.yml` is unchanged (it only pushes, never loads). ## Server side (already done) Hourly prune of dangling images + 10 GB build-cache cap + 80 % disk alert to Matrix, as a safety net for other repos with the same pattern. ## Test plan - [ ] `image` job on this PR is green (build, volume check, browser-host contract) - [ ] After the run, `docker images | grep shikigami-browser-check` on the server shows no leftover 🤖 Generated with [Claude Code](https://claude.com/claude-code)
fix(ci): stop the image job leaking a 2.5 GB image per run
All checks were successful
CI / build (pull_request) Successful in 36s
CI / shell-eval (pull_request) Successful in 3s
CI / test (pull_request) Successful in 3m31s
CI / image (pull_request) Successful in 25s
59704e38ee
The image job loads the final image into the runner host's Docker daemon under the fixed tag
shikigami-browser-check:ci. Every run moved the tag and left the previous image behind
untagged; ~21 of them (~53 GB) filled the server's disk within a day and broke image builds
with "no space left on device".

- tag per run (ci-<run_id>-<run_attempt>) so concurrent runs can't swap images under each other
- remove the image in an if: always() step
- build with the docker driver: no tarball export/import, layer cache reused between runs

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

🔄 Auto-updating coverage report — this comment is regenerated on every push, so the numbers below always reflect the commit shown here, not the branch tip.

Commit: 59704e3 · Generated: 2026-10-23 13:29:55 UTC · Revision: #1

Summary

Summary
Generated on: 10/23/2026 - 13:29:55
Coverage date: 10/23/2026 - 13:27:43 - 10/23/2026 - 13:29:51
Parser: MultiReport (6x Cobertura)
Assemblies: 11
Classes: 643
Files: 331
Line coverage: 95.3% (23537 of 24672)
Covered lines: 23537
Uncovered lines: 1135
Coverable lines: 24672
Total lines: 45754
Branch coverage: 91% (15789 of 17347)
Covered branches: 15789
Total branches: 17347
Method coverage: Feature is only available for sponsors

Coverage

Shikigami.BlazorAdapter - 95.4%
Name Line Branch
Shikigami.BlazorAdapter 95.4% 88.2%
Shikigami.BlazorAdapter.BlazorAdapterAssembly 100%
Shikigami.BlazorAdapter.Cast.CastActionFailed 100%
Shikigami.BlazorAdapter.Cast.CastEffects 93.3% 93.7%
Shikigami.BlazorAdapter.Cast.CastLoaded 100%
Shikigami.BlazorAdapter.Cast.CastReducers 93.3% 50%
Shikigami.BlazorAdapter.Cast.CastState 100% 100%
Shikigami.BlazorAdapter.Cast.CreateFamiliarFailed 100%
Shikigami.BlazorAdapter.Cast.CreateFamiliarRequested 100%
Shikigami.BlazorAdapter.Cast.DuplicateFamiliarRequested 100%
Shikigami.BlazorAdapter.Cast.FamiliarAvatar 100% 75%
Shikigami.BlazorAdapter.Cast.FamiliarCreated 100%
Shikigami.BlazorAdapter.Cast.NewFamiliarDialog 97.2% 83.3%
Shikigami.BlazorAdapter.Cast.PurgeFamiliarRequested 100%
Shikigami.BlazorAdapter.Cast.SetFamiliarArchivedRequested 100%
Shikigami.BlazorAdapter.Cast.SetFamiliarTrashedRequested 100%
Shikigami.BlazorAdapter.Cast.TrashPage 89.4% 93.7%
Shikigami.BlazorAdapter.EffectCalls 100%
Shikigami.BlazorAdapter.Files.ConflictSettled 100%
Shikigami.BlazorAdapter.Files.DismissFileError 100%
Shikigami.BlazorAdapter.Files.EntryMissing 100%
Shikigami.BlazorAdapter.Files.EntryOpened 100%
Shikigami.BlazorAdapter.Files.FileActionDone 100%
Shikigami.BlazorAdapter.Files.FileActionFailed 100%
Shikigami.BlazorAdapter.Files.FileActionRequested 100%
Shikigami.BlazorAdapter.Files.FileLinks 100% 100%
Shikigami.BlazorAdapter.Files.FilePane 95.2% 89.5%
Shikigami.BlazorAdapter.Files.FilePaneClosed 100%
Shikigami.BlazorAdapter.Files.FilePathBreadcrumb 100% 100%
Shikigami.BlazorAdapter.Files.FilesEffects 98.4% 92.6%
Shikigami.BlazorAdapter.Files.FilesPage 96.9% 97%
Shikigami.BlazorAdapter.Files.FilesReducers 100% 82%
Shikigami.BlazorAdapter.Files.FilesState 100% 100%
Shikigami.BlazorAdapter.Files.FileTreeBranch 100% 100%
Shikigami.BlazorAdapter.Files.FolderPane 92.5% 85.8%
Shikigami.BlazorAdapter.Files.JournalOverviewPane 100% 88.8%
Shikigami.BlazorAdapter.Files.LoadFiles 100%
Shikigami.BlazorAdapter.Files.MemoryForm 100% 94.4%
Shikigami.BlazorAdapter.Files.MemoryOverviewPane 100% 96.1%
Shikigami.BlazorAdapter.Files.OpenEntry 100%
Shikigami.BlazorAdapter.Files.RoutineForm 78.6% 86.4%
Shikigami.BlazorAdapter.Files.RoutineOverviewPane 100% 94.4%
Shikigami.BlazorAdapter.Files.SaveLanded 100%
Shikigami.BlazorAdapter.Files.SaveRefused 100%
Shikigami.BlazorAdapter.Files.SaveText 100%
Shikigami.BlazorAdapter.Files.SkillForm 100% 100%
Shikigami.BlazorAdapter.Files.TreeFailed 100%
Shikigami.BlazorAdapter.Files.TreeLoaded 100%
Shikigami.BlazorAdapter.Home.HomePage 88.2% 93.7%
Shikigami.BlazorAdapter.Notifications.CapabilityChangedBridge 100%
Shikigami.BlazorAdapter.Notifications.CapabilityChangesReceived 100%
Shikigami.BlazorAdapter.Notifications.CoalescingBridge`1 94.4% 80%
Shikigami.BlazorAdapter.Notifications.DomainChangedBridge 100%
Shikigami.BlazorAdapter.Notifications.DomainChangesReceived 100% 100%
Shikigami.BlazorAdapter.Notifications.FamiliarEventsBridge 100%
Shikigami.BlazorAdapter.Notifications.FamiliarEventsReceived 100%
Shikigami.BlazorAdapter.Profile.AvatarChosen 100%
Shikigami.BlazorAdapter.Profile.AvatarClearRequested 100%
Shikigami.BlazorAdapter.Profile.AvatarFailed 100%
Shikigami.BlazorAdapter.Profile.AvatarSaved 100%
Shikigami.BlazorAdapter.Profile.CreatedWithoutAvatar 100%
Shikigami.BlazorAdapter.Profile.ExpressionsEditor 86.6% 88.8%
Shikigami.BlazorAdapter.Profile.LoadProfile 100%
Shikigami.BlazorAdapter.Profile.PersonaEditor 100% 97.2%
Shikigami.BlazorAdapter.Profile.PersonaReloaded 100%
Shikigami.BlazorAdapter.Profile.PersonaSave 100%
Shikigami.BlazorAdapter.Profile.PersonaSaved 100%
Shikigami.BlazorAdapter.Profile.PersonaSaveFailed 100%
Shikigami.BlazorAdapter.Profile.ProfileEffects 92.9% 85%
Shikigami.BlazorAdapter.Profile.ProfileLoaded 100%
Shikigami.BlazorAdapter.Profile.ProfileMissing 100%
Shikigami.BlazorAdapter.Profile.ProfilePage 91.5% 87.3%
Shikigami.BlazorAdapter.Profile.ProfileReducers 97.3% 53.9%
Shikigami.BlazorAdapter.Profile.ProfileRefreshed 100%
Shikigami.BlazorAdapter.Profile.ProfileState 100% 100%
Shikigami.BlazorAdapter.Profile.ReloadPersona 100%
Shikigami.BlazorAdapter.Profile.RevertSelfRequested 100%
Shikigami.BlazorAdapter.Profile.SavePersonaRequested 100%
Shikigami.BlazorAdapter.Profile.SaveSettingsRequested 100%
Shikigami.BlazorAdapter.Profile.SelfLayer 92.3% 87.5%
Shikigami.BlazorAdapter.Profile.SettingsSaved 100%
Shikigami.BlazorAdapter.Profile.SettingsSaveFailed 100%
Shikigami.BlazorAdapter.Settings.BackupFailed 100%
Shikigami.BlazorAdapter.Settings.BackupSettingsLoaded 100%
Shikigami.BlazorAdapter.Settings.BackupSettingsLoadFailed 100%
Shikigami.BlazorAdapter.Settings.BackupsSection 100% 100%
Shikigami.BlazorAdapter.Settings.BackupsSettingsEffects 100%
Shikigami.BlazorAdapter.Settings.BackupsSettingsReducers 100%
Shikigami.BlazorAdapter.Settings.BackupsSettingsState 100%
Shikigami.BlazorAdapter.Settings.CapabilityFormErrorBoundary 100%
Shikigami.BlazorAdapter.Settings.CapabilityOwnerEditor 82.7% 80%
Shikigami.BlazorAdapter.Settings.CapabilitySettingsComponents 100% 100%
Shikigami.BlazorAdapter.Settings.CapabilitySettingsEffects 100% 90.6%
Shikigami.BlazorAdapter.Settings.CapabilitySettingsFailed 100%
Shikigami.BlazorAdapter.Settings.CapabilitySettingsLoaded 100%
Shikigami.BlazorAdapter.Settings.CapabilitySettingsReducers 100% 100%
Shikigami.BlazorAdapter.Settings.CapabilitySettingsState 100%
Shikigami.BlazorAdapter.Settings.ChatAppearanceCss 100% 100%
Shikigami.BlazorAdapter.Settings.ChatAppearanceEffects 100%
Shikigami.BlazorAdapter.Settings.ChatAppearanceLoaded 100%
Shikigami.BlazorAdapter.Settings.ChatAppearanceLoadFailed 100%
Shikigami.BlazorAdapter.Settings.ChatAppearancePreview 100% 100%
Shikigami.BlazorAdapter.Settings.ChatAppearanceReducers 100% 100%
Shikigami.BlazorAdapter.Settings.ChatAppearanceSaved 100%
Shikigami.BlazorAdapter.Settings.ChatAppearanceSaveFailed 100%
Shikigami.BlazorAdapter.Settings.ChatAppearanceSection 100% 100%
Shikigami.BlazorAdapter.Settings.ChatAppearanceState 100%
Shikigami.BlazorAdapter.Settings.DefaultsSection 94.5% 85.7%
Shikigami.BlazorAdapter.Settings.DefaultsSettingsEffects 100%
Shikigami.BlazorAdapter.Settings.DefaultsSettingsReducers 100% 100%
Shikigami.BlazorAdapter.Settings.DefaultsSettingsState 100%
Shikigami.BlazorAdapter.Settings.GeneratedCapabilityForm 92.9% 80.8%
Shikigami.BlazorAdapter.Settings.LoadCapabilitySettings 100%
Shikigami.BlazorAdapter.Settings.LoadProviderSettings 100%
Shikigami.BlazorAdapter.Settings.ModelCatalogLoaded 100%
Shikigami.BlazorAdapter.Settings.ModelCatalogLoadFailed 100%
Shikigami.BlazorAdapter.Settings.ModelDefaultsLoaded 100%
Shikigami.BlazorAdapter.Settings.ModelDefaultsLoadFailed 100%
Shikigami.BlazorAdapter.Settings.ModelDefaultsSaved 100%
Shikigami.BlazorAdapter.Settings.ModelDefaultsSaveFailed 100%
Shikigami.BlazorAdapter.Settings.ModelHints 100% 100%
Shikigami.BlazorAdapter.Settings.ModelPicker 100% 98.2%
Shikigami.BlazorAdapter.Settings.Money 100%
Shikigami.BlazorAdapter.Settings.OpenRouterKeySaved 100%
Shikigami.BlazorAdapter.Settings.OpenRouterKeySaveFailed 100%
Shikigami.BlazorAdapter.Settings.ProviderKeyChecked 100%
Shikigami.BlazorAdapter.Settings.ProviderSection 100% 100%
Shikigami.BlazorAdapter.Settings.ProviderSettingsEffects 100% 100%
Shikigami.BlazorAdapter.Settings.ProviderSettingsLoaded 100%
Shikigami.BlazorAdapter.Settings.ProviderSettingsReducers 100% 100%
Shikigami.BlazorAdapter.Settings.ProviderSettingsState 100% 100%
Shikigami.BlazorAdapter.Settings.SaveChatAppearanceRequested 100%
Shikigami.BlazorAdapter.Settings.SaveModelDefaultsRequested 100%
Shikigami.BlazorAdapter.Settings.SaveOpenRouterKeyRequested 100%
Shikigami.BlazorAdapter.Settings.SettingsPage 100%
Shikigami.BlazorAdapter.Settings.ToolGroupsSection 93.2% 74%
Shikigami.BlazorAdapter.Shell.CastRail 100% 100%
Shikigami.Capabilities.Contracts - 100%
Name Line Branch
Shikigami.Capabilities.Contracts 100% 100%
Shikigami.Capabilities.Contracts.CapabilityAssetContent 100%
Shikigami.Capabilities.Contracts.CapabilityBackgroundDefinition 100%
Shikigami.Capabilities.Contracts.CapabilityContext 100%
Shikigami.Capabilities.Contracts.CapabilityDefinition 100% 100%
Shikigami.Capabilities.Contracts.CapabilityEntry 100%
Shikigami.Capabilities.Contracts.CapabilityError 100%
Shikigami.Capabilities.Contracts.CapabilityFile 100%
Shikigami.Capabilities.Contracts.CapabilityListing 100%
Shikigami.Capabilities.Contracts.CapabilityMount 100% 100%
Shikigami.Capabilities.Contracts.CapabilityPublication 100%
Shikigami.Capabilities.Contracts.CapabilityPublicationReceipt 100%
Shikigami.Capabilities.Contracts.CapabilityRegistration 100% 100%
Shikigami.Capabilities.Contracts.CapabilityResult`1 100%
Shikigami.Capabilities.Contracts.CapabilitySetting 100% 100%
Shikigami.Capabilities.Contracts.CapabilitySettingProblem 100%
Shikigami.Capabilities.Contracts.CapabilitySignal 100%
Shikigami.Capabilities.Contracts.CapabilityStorageDefinition 100%
Shikigami.Capabilities.Contracts.CapabilityStoragePreparation 100%
Shikigami.Capabilities.Contracts.CapabilityTool 100%
Shikigami.Capabilities.Contracts.CapabilityToolResult 100%
Shikigami.Capabilities.Contracts.CapabilityValidationProblem 100%
Shikigami.Capabilities.Contracts.MountAccessRule 100%
Shikigami.Capabilities.TestFixture - 95.5%
Name Line Branch
Shikigami.Capabilities.TestFixture 95.5% 95%
Shikigami.Capabilities.TestFixture.BinaryFixtureProvider 72.7% 87.5%
Shikigami.Capabilities.TestFixture.BinaryFixtureState 100%
Shikigami.Capabilities.TestFixture.FixtureHandler 100%
Shikigami.Capabilities.TestFixture.FixtureModule 100% 100%
Shikigami.Capabilities.TestFixture.FixtureProvider 94.7% 88.8%
Shikigami.Capabilities.TestFixture.FixtureState 100%
Shikigami.Capabilities.TestFixture.FixtureValidator 100% 100%
Shikigami.Capabilities.TestFixture.SettingsFixtureHandler 100%
Shikigami.Capabilities.TestFixture.SettingsFixtureModule 100% 100%
Shikigami.Capabilities.TestFixture.SettingsFixtureProvider 100% 100%
Shikigami.Capabilities.TestFixture.SettingsFixtureState 100%
Shikigami.Capabilities.TestFixture.SettingsFixtureValidator 100% 100%
Shikigami.Capabilities.TestFixture.UI - 100%
Name Line Branch
Shikigami.Capabilities.TestFixture.UI 100% 66.6%
Shikigami.Capabilities.TestFixture.UI.FixtureSettingsForm 100% 66.6%
Shikigami.Capabilities.UI.Contracts - 91.3%
Name Line Branch
Shikigami.Capabilities.UI.Contracts 91.3% 50%
Shikigami.Capabilities.UI.Contracts.CapabilitySettingsComponent 100%
Shikigami.Capabilities.UI.Contracts.CapabilitySettingsComponentRegistration 88.8% 50%
Shikigami.Capabilities.UI.Contracts.CapabilitySettingsUiRegistration 100%
Shikigami.Capabilities.UI.Contracts.SecretChange 75%
Shikigami.Capabilities.UI.Contracts.SettingsAsset 100%
Shikigami.Capabilities.UI.Contracts.SettingsAssetResult 100%
Shikigami.Capabilities.UI.Contracts.SettingsProblem 100%
Shikigami.Capabilities.UI.Contracts.SettingsSaveResult 100%
Shikigami.Capabilities.UI.Contracts.SettingsView 100%
Shikigami.Capabilities.Web - 97.1%
Name Line Branch
Shikigami.Capabilities.Web 97.1% 90.9%
Shikigami.Capabilities.Web.Content.HtmlTextExtractor 100% 92.4%
Shikigami.Capabilities.Web.Content.ReadableDocument 100%
Shikigami.Capabilities.Web.Content.WebDocumentPublisher 100% 94.4%
Shikigami.Capabilities.Web.Content.WebText 100% 87.5%
Shikigami.Capabilities.Web.Fetch.GuardedWebTransport 92.6% 83.9%
Shikigami.Capabilities.Web.Fetch.WebAddressPolicy 100% 96.4%
Shikigami.Capabilities.Web.Fetch.WebCompression 97.1% 96%
Shikigami.Capabilities.Web.Fetch.WebNetwork 66.6% 0%
Shikigami.Capabilities.Web.Fetch.WebResponse 100%
Shikigami.Capabilities.Web.Search.SearchHit 100%
Shikigami.Capabilities.Web.Search.SearchResults 100%
Shikigami.Capabilities.Web.Search.SearxngSearchProvider 97.1% 91.6%
Shikigami.Capabilities.Web.Tools.WebFetchTool 100% 87.5%
Shikigami.Capabilities.Web.Tools.WebSearchTool 100% 95.4%
Shikigami.Capabilities.Web.Tools.WebTool 100% 50%
Shikigami.Capabilities.Web.WebFailure 100%
Shikigami.Capabilities.Web.WebLimits 100%
Shikigami.Capabilities.Web.WebModule 100% 100%
Shikigami.Capabilities.Web.WebOptions 90.9% 70%
Shikigami.Capabilities.Web.WebSettingsValidator 62.5% 100%
System.Text.RegularExpressions.Generated 100%
Shikigami.Domain - 98.1%
Name Line Branch
Shikigami.Domain 98.1% 91.9%
Shikigami.Domain.Familiars.AccentPalette 100%
Shikigami.Domain.Familiars.ColourPair 100% 100%
Shikigami.Domain.Familiars.Expression 100% 100%
Shikigami.Domain.Familiars.ExpressionSet 100% 100%
Shikigami.Domain.Familiars.Familiar 100% 90.2%
Shikigami.Domain.Familiars.LearningSettings 100%
Shikigami.Domain.Familiars.MemoryBudgets 100% 100%
Shikigami.Domain.Familiars.ModelChoice 100% 100%
Shikigami.Domain.Familiars.OutreachSettings 100% 100%
Shikigami.Domain.Familiars.QuietHours 100% 87.5%
Shikigami.Domain.Files.BlobContent 100% 75%
Shikigami.Domain.Files.BlobSha 87.5% 100%
Shikigami.Domain.Files.DefaultLayout 100%
Shikigami.Domain.Files.FileActor 100%
Shikigami.Domain.Files.FileAuthor 100% 100%
Shikigami.Domain.Files.FileContent 100% 100%
Shikigami.Domain.Files.FileNode 100% 90%
Shikigami.Domain.Files.FilePath 100% 97.8%
Shikigami.Domain.Files.FilePublication 100%
Shikigami.Domain.Files.FilePublicationStamp 100%
Shikigami.Domain.Files.FileRevision 100% 87.5%
Shikigami.Domain.Files.LocalDates 100%
Shikigami.Domain.Files.MediaTypes 100% 100%
Shikigami.Domain.Files.Permissions 100% 100%
Shikigami.Domain.Files.RunActor 100% 100%
Shikigami.Domain.Files.Slug 100% 100%
Shikigami.Domain.Files.TextContent 100% 100%
Shikigami.Domain.Files.TrashPath 100% 100%
Shikigami.Domain.Routines.RoutineSchedule 94.4% 89.8%
Shikigami.Domain.Settings.AppSetting 100%
Shikigami.Domain.Settings.CapabilityConfiguration 100% 100%
Shikigami.Domain.Settings.CapabilityCredential 100%
Shikigami.Domain.Settings.CapabilitySettingValue 100%
Shikigami.Domain.Text 100% 100%
System.Text.RegularExpressions.Generated 96.2% 85.2%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FDFEB299C15773C7
916AED265A903CAC15169BB5EE676ADBEFE655D493DD7AC75__Hex_0
94.8% 67.8%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FDFEB299C15773C7
916AED265A903CAC15169BB5EE676ADBEFE655D493DD7AC75__Hex_2
96.8% 93.7%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FDFEB299C15773C7
916AED265A903CAC15169BB5EE676ADBEFE655D493DD7AC75__MediaTypeShape_3
95.9% 92.1%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FDFEB299C15773C7
916AED265A903CAC15169BB5EE676ADBEFE655D493DD7AC75__NamePattern_1
97.2% 94.4%
Shikigami.Infrastructure - 93.7%
Name Line Branch
Shikigami.Infrastructure 93.7% 78.3%
Shikigami.Infrastructure.Backups.BackupArtifactName 100% 100%
Shikigami.Infrastructure.Backups.BackupOptions 100%
Shikigami.Infrastructure.Backups.BackupSchedule 100% 83.3%
Shikigami.Infrastructure.Backups.BackupScheduler 96.6% 87.5%
Shikigami.Infrastructure.Backups.BackupWriter 96.3% 93.4%
Shikigami.Infrastructure.Backups.DatabaseFingerprint 91.9% 97%
Shikigami.Infrastructure.Backups.FileSystemBackupStore 100% 100%
Shikigami.Infrastructure.Backups.OwnerOnlyFile 100% 100%
Shikigami.Infrastructure.Backups.PreMigrationBackup 90.1% 100%
Shikigami.Infrastructure.Backups.SqliteSnapshot 88.2% 75%
Shikigami.Infrastructure.Blobs.BlobSweep 100% 100%
Shikigami.Infrastructure.Blobs.BlobSweepOptions 100% 100%
Shikigami.Infrastructure.Blobs.BlobSweepResult 100%
Shikigami.Infrastructure.Blobs.FileSystemBlobStore 95.9% 97%
Shikigami.Infrastructure.Browser.BrowserCommand 100%
Shikigami.Infrastructure.Browser.BrowserHost 94.1% 92.7%
Shikigami.Infrastructure.Browser.BrowserHostOptions 100%
Shikigami.Infrastructure.Browser.BrowserHostProbe 0% 0%
Shikigami.Infrastructure.Browser.BrowserIdleService 63.6% 50%
Shikigami.Infrastructure.Browser.BrowserLaunchException 0%
Shikigami.Infrastructure.Browser.BrowserProfile 98.4% 86.3%
Shikigami.Infrastructure.Browser.BrowserReply 100%
Shikigami.Infrastructure.Browser.BrowserWorker 0% 0%
Shikigami.Infrastructure.Browser.BrowserWorkerFactory 5.2% 0%
Shikigami.Infrastructure.Browser.BrowserWorkerProcess 81.2% 80%
Shikigami.Infrastructure.Browser.LinuxProcessGroups 88.8% 92.8%
Shikigami.Infrastructure.Capabilities.CapabilityContribution 100%
Shikigami.Infrastructure.Capabilities.CapabilityStartup 100% 100%
Shikigami.Infrastructure.Capabilities.CapabilityStorageHost 92.8% 79.8%
Shikigami.Infrastructure.Capabilities.CapabilityStorageOptions 100%
Shikigami.Infrastructure.Capabilities.PrivatePaths 97.4% 83.3%
Shikigami.Infrastructure.DailyMaintenanceService 97.8% 91.6%
Shikigami.Infrastructure.DependencyInjection 100% 100%
Shikigami.Infrastructure.Notifications.InProcessBus`1 100% 100%
Shikigami.Infrastructure.Persistence.Configurations.AppSettingConfiguration 100%
Shikigami.Infrastructure.Persistence.Configurations.CapabilityConfiguration
Mapping
100%
Shikigami.Infrastructure.Persistence.Configurations.CapabilityCredentialMap
ping
100%
Shikigami.Infrastructure.Persistence.Configurations.CapabilitySettingValueM
apping
100%
Shikigami.Infrastructure.Persistence.Configurations.FamiliarConfiguration 100%
Shikigami.Infrastructure.Persistence.Configurations.FileNodeConfiguration 100%
Shikigami.Infrastructure.Persistence.Configurations.FilePublicationMapping 100%
Shikigami.Infrastructure.Persistence.Configurations.FileRevisionConfigurati
on
100%
Shikigami.Infrastructure.Persistence.Configurations.UnreferencedBlobConfigu
ration
100%
Shikigami.Infrastructure.Persistence.Converters.BlobShaConverter 100%
Shikigami.Infrastructure.Persistence.Converters.ExpressionSetConverter 100% 100%
Shikigami.Infrastructure.Persistence.Converters.FilePathConverter 100%
Shikigami.Infrastructure.Persistence.Converters.Json 100% 100%
Shikigami.Infrastructure.Persistence.Converters.OutreachSettingsConverter 100% 100%
Shikigami.Infrastructure.Persistence.Converters.UtcTicksConverter 100%
Shikigami.Infrastructure.Persistence.DatabaseMigrator 100%
Shikigami.Infrastructure.Persistence.Migrations.AppSettings 100%
Shikigami.Infrastructure.Persistence.Migrations.CapabilityConfigurations 100%
Shikigami.Infrastructure.Persistence.Migrations.CapabilityPublicationReceip
ts
100%
Shikigami.Infrastructure.Persistence.Migrations.CapabilityPurgeIntent 100%
Shikigami.Infrastructure.Persistence.Migrations.FileCreatedBy 98%
Shikigami.Infrastructure.Persistence.Migrations.Initial 97.9%
Shikigami.Infrastructure.Persistence.Migrations.Profile 96.2%
Shikigami.Infrastructure.Persistence.Migrations.ShikigamiDbContextModelSnap
shot
100%
Shikigami.Infrastructure.Persistence.ShikigamiDbContext 98.8% 100%
Shikigami.Infrastructure.Persistence.ShikigamiDbContextFactory 0%
Shikigami.Infrastructure.Persistence.SqlitePragmaInterceptor 100% 100%
Shikigami.Infrastructure.Persistence.Stores.EfFamiliarStore 100% 88.7%
Shikigami.Infrastructure.Persistence.Stores.EfFileStore 99.1% 100%
Shikigami.Infrastructure.Persistence.UnreferencedBlob 100%
Shikigami.Infrastructure.Provider.OpenRouterKeySource 100% 100%
Shikigami.Infrastructure.Provider.OpenRouterModelProvider 100% 93.4%
Shikigami.Infrastructure.Provider.OpenRouterOptions 100% 50%
Shikigami.Infrastructure.Provider.ResolvedKey 100% 50%
Shikigami.Infrastructure.Settings.EfAppSettingsStore 100% 100%
Shikigami.Infrastructure.Settings.EfCapabilityConfigurationStore 100% 100%
Shikigami.Infrastructure.Settings.KeyRingSnapshots 100% 100%
Shikigami.Infrastructure.Settings.ProtectedCapabilityAssetReferences 87.5% 50%
System.Text.RegularExpressions.Generated 79.8% 64.1%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>F3A4F28468B24E9C
234D40E1D5003482F41439E482AB211B6EAD2E13F0A9D40B0__Id_1
81.2% 63.3%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>F3A4F28468B24E9C
234D40E1D5003482F41439E482AB211B6EAD2E13F0A9D40B0__Pattern_0
84% 65.7%
Shikigami.Kernel - 90.9%
Name Line Branch
Shikigami.Kernel 90.9% 75%
Shikigami.Kernel.Err`1 100%
Shikigami.Kernel.Ok`1 100%
Shikigami.Kernel.Result`1 88.8% 75%
Shikigami.Server - 85.5%
Name Line Branch
Shikigami.Server 85.5% 70%
Program 95.2% 82.1%
Shikigami.Server.Backups.BackupConfiguration 100% 100%
Shikigami.Server.Components.App 100%
Shikigami.Server.Components.Layout.AppHeader 100% 78.5%
Shikigami.Server.Components.Layout.MainLayout 100%
Shikigami.Server.Components.Pages.Gate 100% 100%
Shikigami.Server.Diagnostics.BrowserHostCheck 0% 0%
Shikigami.Server.Diagnostics.CapabilitySample 90.6% 70.7%
Shikigami.Server.Diagnostics.SampleSettingsForm 0% 0%
Shikigami.Server.Diagnostics.SeedOnStart 100% 100%
Shikigami.Server.Diagnostics.WebSample 95.7% 68.7%
Shikigami.Server.Provider.OpenRouterConfiguration 100% 100%
Shikigami.Server.Security.AccessGate 100% 87.5%
Shikigami.Server.Security.AccessSecret 100% 100%
Shikigami.Server.Security.CoordinatedKeyRing 100%
Shikigami.Server.Security.GateThrottle 100% 100%
Shikigami.Server.Security.ProxyNetwork 100% 100%
Shikigami.Server.VolumeStartupValidator 100% 100%
Shikigami.UseCases - 96.1%
Name Line Branch
Shikigami.UseCases 96.1% 93.2%
Shikigami.UseCases.Backups.BackupArtifact 100%
Shikigami.UseCases.Backups.BackupFailure 100%
Shikigami.UseCases.Backups.BackupJobState 100%
Shikigami.UseCases.Backups.BackupPolicy 100%
Shikigami.UseCases.Backups.BackupStatusView 100% 100%
Shikigami.UseCases.Backups.DatabaseSnapshot 100%
Shikigami.UseCases.Backups.DownloadDatabaseSnapshot 100%
Shikigami.UseCases.Backups.GetBackupStatus 100%
Shikigami.UseCases.Backups.IBackupStore 0%
Shikigami.UseCases.Backups.RunBackupNow 100%
Shikigami.UseCases.Browser.BrowserLease 100%
Shikigami.UseCases.Browser.BrowserOwner 100%
Shikigami.UseCases.Capabilities.BoundCapabilityAssets 100% 50%
Shikigami.UseCases.Capabilities.BoundCapabilityChanges 95.6% 70%
Shikigami.UseCases.Capabilities.BoundCapabilityFiles 95.4% 86%
Shikigami.UseCases.Capabilities.BoundCapabilityPrivateStorage 100% 100%
Shikigami.UseCases.Capabilities.BoundCapabilitySettings 100% 64.2%
Shikigami.UseCases.Capabilities.CapabilityAssetChoice 100%
Shikigami.UseCases.Capabilities.CapabilityAssetReference 100%
Shikigami.UseCases.Capabilities.CapabilityAssetResult 100%
Shikigami.UseCases.Capabilities.CapabilityAssets 95% 77.9%
Shikigami.UseCases.Capabilities.CapabilityBackgroundHealth 100%
Shikigami.UseCases.Capabilities.CapabilityBinding 100% 83.3%
Shikigami.UseCases.Capabilities.CapabilityChanged 100%
Shikigami.UseCases.Capabilities.CapabilityConfigurationCommit 100%
Shikigami.UseCases.Capabilities.CapabilityConfigurationData 100%
Shikigami.UseCases.Capabilities.CapabilityConfigurationProblem 100%
Shikigami.UseCases.Capabilities.CapabilityConfigurationResult 100%
Shikigami.UseCases.Capabilities.CapabilityConfigurations 98.1% 92.7%
Shikigami.UseCases.Capabilities.CapabilityConfigurationView 100%
Shikigami.UseCases.Capabilities.CapabilityContexts 90% 91.6%
Shikigami.UseCases.Capabilities.CapabilityHealth 100%
Shikigami.UseCases.Capabilities.CapabilityPrivateMutation 100% 100%
Shikigami.UseCases.Capabilities.CapabilityRegistry 96.4% 90.5%
Shikigami.UseCases.Capabilities.CapabilityRuntime 98.6% 88.5%
Shikigami.UseCases.Capabilities.CapabilityScopes 100% 75%
Shikigami.UseCases.Capabilities.CapabilitySecret 75%
Shikigami.UseCases.Capabilities.CapabilitySecretEdit 100%
Shikigami.UseCases.Capabilities.CapabilitySettingRules 100% 96%
Shikigami.UseCases.Capabilities.CapabilityUnavailableException 100%
Shikigami.UseCases.Capabilities.InvokeCapabilityTool 100% 93.3%
Shikigami.UseCases.Capabilities.ToolSchemas 86.8% 72.7%
Shikigami.UseCases.Capabilities.UnsupportedCapabilitySignals 100%
Shikigami.UseCases.DependencyInjection 100%
Shikigami.UseCases.Diagnostics.SeedDevData 91.5% 42.8%
Shikigami.UseCases.Familiars.AvatarImage 100%
Shikigami.UseCases.Familiars.ClearFamiliarAvatar 100%
Shikigami.UseCases.Familiars.CreateFamiliar 97.4% 66.6%
Shikigami.UseCases.Familiars.DuplicateFamiliar 96.7% 91.6%
Shikigami.UseCases.Familiars.ExpressionView 100%
Shikigami.UseCases.Familiars.FamiliarDetail 100%
Shikigami.UseCases.Familiars.FamiliarEvent 100%
Shikigami.UseCases.Familiars.FamiliarFiles 100% 100%
Shikigami.UseCases.Familiars.FamiliarLimits 71.4%
Shikigami.UseCases.Familiars.FamiliarPersona 96.8% 90%
Shikigami.UseCases.Familiars.FamiliarSettings 100% 100%
Shikigami.UseCases.Familiars.FamiliarSummary 100% 100%
Shikigami.UseCases.Familiars.FamiliarTemplates 100% 100%
Shikigami.UseCases.Familiars.FamiliarViews 100% 94.4%
Shikigami.UseCases.Familiars.GetFamiliar 100% 100%
Shikigami.UseCases.Familiars.IFamiliarStore 0%
Shikigami.UseCases.Familiars.ListFamiliars 100%
Shikigami.UseCases.Familiars.PersonaFile 100%
Shikigami.UseCases.Familiars.PurgeFamiliar 90%
Shikigami.UseCases.Familiars.ReadFamiliarAvatar 100% 87.5%
Shikigami.UseCases.Familiars.SaveFamiliarSettings 96.2% 95.4%
Shikigami.UseCases.Familiars.SelfRevision 100%
Shikigami.UseCases.Familiars.SetFamiliarArchived 100% 100%
Shikigami.UseCases.Familiars.SetFamiliarAvatar 100% 100%
Shikigami.UseCases.Familiars.SetFamiliarTrashed 100% 100%
Shikigami.UseCases.Familiars.ToolGroupCatalog 66.6%
Shikigami.UseCases.Familiars.ToolGroupInfo 100%
Shikigami.UseCases.Files.BoundedStreamCopy 100% 100%
Shikigami.UseCases.Files.Browser.FileBrowser 94.7% 90%
Shikigami.UseCases.Files.Browser.FileBytes 100%
Shikigami.UseCases.Files.Browser.FileItem 100%
Shikigami.UseCases.Files.Browser.FileOk`1 100%
Shikigami.UseCases.Files.Browser.FileRefusal 100%
Shikigami.UseCases.Files.Browser.FileRefused`1 100%
Shikigami.UseCases.Files.Browser.FileRevisionView 100%
Shikigami.UseCases.Files.Browser.FileView 100%
Shikigami.UseCases.Files.Browser.JournalOverview 100%
Shikigami.UseCases.Files.Browser.JournalOverviewEntry 100%
Shikigami.UseCases.Files.Browser.MemoryBudget 100%
Shikigami.UseCases.Files.Browser.MemoryBudgetUse 100%
Shikigami.UseCases.Files.Browser.MemoryDraft 100%
Shikigami.UseCases.Files.Browser.MemoryOverview 100%
Shikigami.UseCases.Files.Browser.MemoryOverviewEntry 100%
Shikigami.UseCases.Files.Browser.MemoryOverviewLimits 100%
Shikigami.UseCases.Files.Browser.RoutineDraft 100%
Shikigami.UseCases.Files.Browser.RoutineForms 89.5% 80.8%
Shikigami.UseCases.Files.Browser.RoutineOverview 100%
Shikigami.UseCases.Files.Browser.RoutineOverviewEntry 100%
Shikigami.UseCases.Files.Browser.RoutinePreview 100%
Shikigami.UseCases.Files.Browser.SkillView 100%
Shikigami.UseCases.Files.Browser.SpecialForms 98.4% 90.5%
Shikigami.UseCases.Files.FamiliarWriteLocks 100% 100%
Shikigami.UseCases.Files.FileAuthors 100% 100%
Shikigami.UseCases.Files.FileMaintenance 100% 90%
Shikigami.UseCases.Files.FileMaintenanceResult 100%
Shikigami.UseCases.Files.FilePublicationReplay 100%
Shikigami.UseCases.Files.FileSystem 98.6% 95.4%
Shikigami.UseCases.Files.FileWriteRefused 100%
Shikigami.UseCases.Files.FileWritten 100%
Shikigami.UseCases.Files.FsError 100% 50%
Shikigami.UseCases.Files.FsResult`1 100% 50%
Shikigami.UseCases.Files.Mounts.CapabilityMountAdapter 87.5% 80.8%
Shikigami.UseCases.Files.Mounts.FileEntry 100%
Shikigami.UseCases.Files.Mounts.FileRead 100%
Shikigami.UseCases.Files.Mounts.GeneratedMount 100% 100%
Shikigami.UseCases.Files.Mounts.Mount 100% 100%
Shikigami.UseCases.Files.Mounts.MountTable 100% 92.3%
Shikigami.UseCases.Files.Mounts.MountTables 100% 100%
Shikigami.UseCases.Files.Mounts.StoredMount 100% 100%
Shikigami.UseCases.Files.SeedDefaultLayout 100% 100%
Shikigami.UseCases.Files.Special.Budgets 100% 96.6%
Shikigami.UseCases.Files.Special.FrontMatter 100% 86.2%
Shikigami.UseCases.Files.Special.HeaderReader 100% 87.8%
Shikigami.UseCases.Files.Special.HeaderValue 100% 100%
Shikigami.UseCases.Files.Special.HeaderWriter 96% 90.6%
Shikigami.UseCases.Files.Special.MemoryFile 100% 87.5%
Shikigami.UseCases.Files.Special.MemoryUse 100%
Shikigami.UseCases.Files.Special.Numbers 100%
Shikigami.UseCases.Files.Special.RoutineFile 100% 99.1%
Shikigami.UseCases.Files.Special.SkillFile 100% 95.2%
Shikigami.UseCases.Files.Special.SpecialFolders 100% 100%
Shikigami.UseCases.Files.Special.ValidationProblem 100%
Shikigami.UseCases.Files.StoredBlob 100%
Shikigami.UseCases.Files.Utf8Order 100%
Shikigami.UseCases.MutationAdmission 100% 100%
Shikigami.UseCases.Notifications.DomainChanged 100%
Shikigami.UseCases.Settings.AppearanceColour 100% 100%
Shikigami.UseCases.Settings.CatalogModel 100% 100%
Shikigami.UseCases.Settings.ChatAppearance 100%
Shikigami.UseCases.Settings.ChatAppearanceJson 100% 100%
Shikigami.UseCases.Settings.ChatAppearanceLimits 100% 100%
Shikigami.UseCases.Settings.CheckOpenRouterKey 100%
Shikigami.UseCases.Settings.GetChatAppearance 100%
Shikigami.UseCases.Settings.GetModelCatalog 100% 100%
Shikigami.UseCases.Settings.GetModelDefaults 100% 83.3%
Shikigami.UseCases.Settings.GetProviderSettings 100%
Shikigami.UseCases.Settings.ModelCatalog 100%
Shikigami.UseCases.Settings.ModelDefaults 100% 100%
Shikigami.UseCases.Settings.ProviderKeyInfo 100%
Shikigami.UseCases.Settings.ProviderKeyState 100%
Shikigami.UseCases.Settings.ProviderSettingsView 100% 100%
Shikigami.UseCases.Settings.RemoveOpenRouterKey 100%
Shikigami.UseCases.Settings.SaveChatAppearance 100% 100%
Shikigami.UseCases.Settings.SaveModelDefaults 100% 100%
Shikigami.UseCases.Settings.SaveOpenRouterKey 100% 100%
Shikigami.UseCases.Shell.AllowEveryCommand 100%
Shikigami.UseCases.Shell.Commands.Basename 100% 100%
Shikigami.UseCases.Shell.Commands.Builtin 100% 100%
Shikigami.UseCases.Shell.Commands.Cat 98.3% 95.8%
Shikigami.UseCases.Shell.Commands.Cd 97.5% 100%
Shikigami.UseCases.Shell.Commands.CFormat 100% 100%
Shikigami.UseCases.Shell.Commands.CNumbers 100% 100%
Shikigami.UseCases.Shell.Commands.CommandContext 97.8% 95.8%
Shikigami.UseCases.Shell.Commands.CommandRegistry 100% 100%
Shikigami.UseCases.Shell.Commands.Cut 100% 100%
Shikigami.UseCases.Shell.Commands.CutPlan 100% 100%
Shikigami.UseCases.Shell.Commands.Date 100% 98%
Shikigami.UseCases.Shell.Commands.Diff 100% 100%
Shikigami.UseCases.Shell.Commands.Dirname 100% 100%
Shikigami.UseCases.Shell.Commands.Echo 90.7% 92.3%
Shikigami.UseCases.Shell.Commands.Escapes 100% 97.4%
Shikigami.UseCases.Shell.Commands.False 88.8%
Shikigami.UseCases.Shell.Commands.FileCommand 100% 100%
Shikigami.UseCases.Shell.Commands.FileNames 100% 100%
Shikigami.UseCases.Shell.Commands.Filters 100% 90%
Shikigami.UseCases.Shell.Commands.Find 100% 97.7%
Shikigami.UseCases.Shell.Commands.FindExpression 100% 98.7%
Shikigami.UseCases.Shell.Commands.FindItem 100% 100%
Shikigami.UseCases.Shell.Commands.FindLine 100% 100%
Shikigami.UseCases.Shell.Commands.FindNode 100% 100%
Shikigami.UseCases.Shell.Commands.FindReference 100%
Shikigami.UseCases.Shell.Commands.GetOpt 100% 98.2%
Shikigami.UseCases.Shell.Commands.Grep 99.2% 98.9%
Shikigami.UseCases.Shell.Commands.Head 100% 100%
Shikigami.UseCases.Shell.Commands.HelpCommand 94.4% 100%
Shikigami.UseCases.Shell.Commands.History 97.5% 94%
Shikigami.UseCases.Shell.Commands.Invocation 100% 50%
Shikigami.UseCases.Shell.Commands.LinesCommand 97.2% 96.3%
Shikigami.UseCases.Shell.Commands.LineSearch 100% 100%
Shikigami.UseCases.Shell.Commands.Ls 97.2% 95.6%
Shikigami.UseCases.Shell.Commands.Magic 100% 95.9%
Shikigami.UseCases.Shell.Commands.Nl 100% 99.2%
Shikigami.UseCases.Shell.Commands.Numbers 100% 100%
Shikigami.UseCases.Shell.Commands.Operand 100%
Shikigami.UseCases.Shell.Commands.OptionSpec 100%
Shikigami.UseCases.Shell.Commands.ParsedOptions 100%
Shikigami.UseCases.Shell.Commands.Printf 100% 99.5%
Shikigami.UseCases.Shell.Commands.Pwd 100% 100%
Shikigami.UseCases.Shell.Commands.Ranges 100% 100%
Shikigami.UseCases.Shell.Commands.Rg 97.7% 94.3%
Shikigami.UseCases.Shell.Commands.SearchFiles 90% 83.3%
Shikigami.UseCases.Shell.Commands.SearchPatterns 100% 100%
Shikigami.UseCases.Shell.Commands.SearchSettings 100%
Shikigami.UseCases.Shell.Commands.Sed 100% 100%
Shikigami.UseCases.Shell.Commands.SedAddress 100%
Shikigami.UseCases.Shell.Commands.SedCommand 100%
Shikigami.UseCases.Shell.Commands.SedException 100%
Shikigami.UseCases.Shell.Commands.SedInput 100% 100%
Shikigami.UseCases.Shell.Commands.SedParser 100% 99.8%
Shikigami.UseCases.Shell.Commands.SedPart 100%
Shikigami.UseCases.Shell.Commands.SedProgram 100%
Shikigami.UseCases.Shell.Commands.SedRegex 100%
Shikigami.UseCases.Shell.Commands.SedRun 100% 100%
Shikigami.UseCases.Shell.Commands.SedSubstitution 100%
Shikigami.UseCases.Shell.Commands.ShellCommand 100% 100%
Shikigami.UseCases.Shell.Commands.ShellQuote 100% 100%
Shikigami.UseCases.Shell.Commands.Sizes 100% 100%
Shikigami.UseCases.Shell.Commands.Sort 100% 94.7%
Shikigami.UseCases.Shell.Commands.SortKey 100% 100%
Shikigami.UseCases.Shell.Commands.SortOrder 99.5% 99.5%
Shikigami.UseCases.Shell.Commands.Stat 100% 90.9%
Shikigami.UseCases.Shell.Commands.StatFacts 100% 100%
Shikigami.UseCases.Shell.Commands.StatFormat 100% 99.5%
Shikigami.UseCases.Shell.Commands.Tail 100% 100%
Shikigami.UseCases.Shell.Commands.TextFile 100%
Shikigami.UseCases.Shell.Commands.Tr 100% 100%
Shikigami.UseCases.Shell.Commands.TreeCommand 100% 99.2%
Shikigami.UseCases.Shell.Commands.TrPlan 100% 100%
Shikigami.UseCases.Shell.Commands.TrSequence 93.9% 80%
Shikigami.UseCases.Shell.Commands.TrSet 100% 97.2%
Shikigami.UseCases.Shell.Commands.True 88.8%
Shikigami.UseCases.Shell.Commands.Uniq 100% 100%
Shikigami.UseCases.Shell.Commands.VersionOrder 100% 96.6%
Shikigami.UseCases.Shell.Commands.Wc 100% 97.3%
Shikigami.UseCases.Shell.Execution.CaptureSink 100% 100%
Shikigami.UseCases.Shell.Execution.ClosedSink 100%
Shikigami.UseCases.Shell.Execution.ClosedStreamException 100%
Shikigami.UseCases.Shell.Execution.CodePointOrder 100% 100%
Shikigami.UseCases.Shell.Execution.ContentIndex 100% 100%
Shikigami.UseCases.Shell.Execution.ContentOutput 100% 100%
Shikigami.UseCases.Shell.Execution.ContentSpan 100%
Shikigami.UseCases.Shell.Execution.DateInput 96.8% 94.3%
Shikigami.UseCases.Shell.Execution.Errno 100% 100%
Shikigami.UseCases.Shell.Execution.Executor 98.1% 95.4%
Shikigami.UseCases.Shell.Execution.Expander 97.3% 95.1%
Shikigami.UseCases.Shell.Execution.Glob 94.6% 95.9%
Shikigami.UseCases.Shell.Execution.GnuQuote 91.2% 92.8%
Shikigami.UseCases.Shell.Execution.InputSource 100%
Shikigami.UseCases.Shell.Execution.LineChange 100%
Shikigami.UseCases.Shell.Execution.LineDiff 98.8% 98.2%
Shikigami.UseCases.Shell.Execution.LongDouble 100% 98.7%
Shikigami.UseCases.Shell.Execution.NullSink 100%
Shikigami.UseCases.Shell.Execution.OutputLimit 100% 97.3%
Shikigami.UseCases.Shell.Execution.OutputSink 100%
Shikigami.UseCases.Shell.Execution.PathResolver 100% 97%
Shikigami.UseCases.Shell.Execution.PipeSink 100% 100%
Shikigami.UseCases.Shell.Execution.PosixRegex 89.2% 90.7%
Shikigami.UseCases.Shell.Execution.PosixRegexException 100%
Shikigami.UseCases.Shell.Execution.Provenance 100% 100%
Shikigami.UseCases.Shell.Execution.ResolvedPath 100%
Shikigami.UseCases.Shell.Execution.ShellLimitException 100%
Shikigami.UseCases.Shell.Execution.ShellScope 94.7% 83.3%
Shikigami.UseCases.Shell.Execution.ShellTree 97.5% 91.3%
Shikigami.UseCases.Shell.Execution.Strftime 95.6% 92.3%
Shikigami.UseCases.Shell.Execution.Terminal 100% 88.8%
Shikigami.UseCases.Shell.Execution.TextLine 100% 100%
Shikigami.UseCases.Shell.Execution.TextLines 100% 100%
Shikigami.UseCases.Shell.Execution.TreeWalker 100% 100%
Shikigami.UseCases.Shell.Execution.Walked 100%
Shikigami.UseCases.Shell.Help.CommandHints 100% 100%
Shikigami.UseCases.Shell.Help.MountGuide 100%
Shikigami.UseCases.Shell.Help.ShellHelp 100% 100%
Shikigami.UseCases.Shell.ShellCommandPlan 100%
Shikigami.UseCases.Shell.ShellCommandRecord 100%
Shikigami.UseCases.Shell.ShellEffects 100%
Shikigami.UseCases.Shell.ShellInterpreter 100% 100%
Shikigami.UseCases.Shell.ShellLimits 100%
Shikigami.UseCases.Shell.ShellRead 100%
Shikigami.UseCases.Shell.ShellResult 75%
Shikigami.UseCases.Shell.ShellSession 100% 100%
Shikigami.UseCases.Shell.Syntax.AndOrList 100%
Shikigami.UseCases.Shell.Syntax.Assignment 100%
Shikigami.UseCases.Shell.Syntax.ByteText 100% 88.8%
Shikigami.UseCases.Shell.Syntax.HereDocBody 100%
Shikigami.UseCases.Shell.Syntax.Lexer 93.5% 89.8%
Shikigami.UseCases.Shell.Syntax.LiteralPart 100%
Shikigami.UseCases.Shell.Syntax.ParameterPart 100%
Shikigami.UseCases.Shell.Syntax.Parser 96.9% 90.1%
Shikigami.UseCases.Shell.Syntax.Pipeline 100%
Shikigami.UseCases.Shell.Syntax.Redirection 100%
Shikigami.UseCases.Shell.Syntax.Script 100%
Shikigami.UseCases.Shell.Syntax.ShellSyntaxException 100%
Shikigami.UseCases.Shell.Syntax.SimpleCommand 100%
Shikigami.UseCases.Shell.Syntax.TildePart 100% 100%
Shikigami.UseCases.Shell.Syntax.Token 77.7% 66.6%
Shikigami.UseCases.Shell.Syntax.Word 100% 83.3%
Shikigami.UseCases.Shell.Syntax.WordBuilder 100% 100%
System.Text.RegularExpressions.Generated 82.6% 72.8%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FE4D9BB856E7A048
F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__AssignmentHead_13
95.8% 95.4%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FE4D9BB856E7A048
F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__BraceExpansion_12
93.4% 85.4%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FE4D9BB856E7A048
F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__HexColour_7
97.4% 96.4%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FE4D9BB856E7A048
F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__IdPattern_0
82.8% 66.6%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FE4D9BB856E7A048
F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__Interval_4
83.6% 75%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FE4D9BB856E7A048
F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__IntervalBody_11
91.6% 86.1%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FE4D9BB856E7A048
F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__KeyPattern_2
89.1% 77.7%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FE4D9BB856E7A048
F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__NameRule_6
92.1% 84.3%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FE4D9BB856E7A048
F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__NewerXY_9
88.5% 62.5%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FE4D9BB856E7A048
F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__Number_8
67.3% 62.7%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FE4D9BB856E7A048
F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__OldCount_10
94.8% 83.3%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FE4D9BB856E7A048
F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__TimeOfDay_3
79% 63.8%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FE4D9BB856E7A048
F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__ToolPattern_1
83.7% 61.1%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FE4D9BB856E7A048
F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__Window_5
69% 56.4%
<!-- coverage-comment --> > 🔄 **Auto-updating coverage report** — this comment is regenerated on every push, so the numbers below always reflect the commit shown here, not the branch tip. > > **Commit:** `59704e3` · **Generated:** 2026-10-23 13:29:55 UTC · **Revision:** #1 # Summary <details open><summary>Summary</summary> ||| |:---|:---| | Generated on: | 10/23/2026 - 13:29:55 | | Coverage date: | 10/23/2026 - 13:27:43 - 10/23/2026 - 13:29:51 | | Parser: | MultiReport (6x Cobertura) | | Assemblies: | 11 | | Classes: | 643 | | Files: | 331 | | **Line coverage:** | 95.3% (23537 of 24672) | | Covered lines: | 23537 | | Uncovered lines: | 1135 | | Coverable lines: | 24672 | | Total lines: | 45754 | | **Branch coverage:** | 91% (15789 of 17347) | | Covered branches: | 15789 | | Total branches: | 17347 | | **Method coverage:** | [Feature is only available for sponsors](https://reportgenerator.io/pro) | </details> ## Coverage <details><summary>Shikigami.BlazorAdapter - 95.4%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Shikigami.BlazorAdapter**|**95.4%**|**88.2%**| |Shikigami.BlazorAdapter.BlazorAdapterAssembly|100%|| |Shikigami.BlazorAdapter.Cast.CastActionFailed|100%|| |Shikigami.BlazorAdapter.Cast.CastEffects|93.3%|93.7%| |Shikigami.BlazorAdapter.Cast.CastLoaded|100%|| |Shikigami.BlazorAdapter.Cast.CastReducers|93.3%|50%| |Shikigami.BlazorAdapter.Cast.CastState|100%|100%| |Shikigami.BlazorAdapter.Cast.CreateFamiliarFailed|100%|| |Shikigami.BlazorAdapter.Cast.CreateFamiliarRequested|100%|| |Shikigami.BlazorAdapter.Cast.DuplicateFamiliarRequested|100%|| |Shikigami.BlazorAdapter.Cast.FamiliarAvatar|100%|75%| |Shikigami.BlazorAdapter.Cast.FamiliarCreated|100%|| |Shikigami.BlazorAdapter.Cast.NewFamiliarDialog|97.2%|83.3%| |Shikigami.BlazorAdapter.Cast.PurgeFamiliarRequested|100%|| |Shikigami.BlazorAdapter.Cast.SetFamiliarArchivedRequested|100%|| |Shikigami.BlazorAdapter.Cast.SetFamiliarTrashedRequested|100%|| |Shikigami.BlazorAdapter.Cast.TrashPage|89.4%|93.7%| |Shikigami.BlazorAdapter.EffectCalls|100%|| |Shikigami.BlazorAdapter.Files.ConflictSettled|100%|| |Shikigami.BlazorAdapter.Files.DismissFileError|100%|| |Shikigami.BlazorAdapter.Files.EntryMissing|100%|| |Shikigami.BlazorAdapter.Files.EntryOpened|100%|| |Shikigami.BlazorAdapter.Files.FileActionDone|100%|| |Shikigami.BlazorAdapter.Files.FileActionFailed|100%|| |Shikigami.BlazorAdapter.Files.FileActionRequested|100%|| |Shikigami.BlazorAdapter.Files.FileLinks|100%|100%| |Shikigami.BlazorAdapter.Files.FilePane|95.2%|89.5%| |Shikigami.BlazorAdapter.Files.FilePaneClosed|100%|| |Shikigami.BlazorAdapter.Files.FilePathBreadcrumb|100%|100%| |Shikigami.BlazorAdapter.Files.FilesEffects|98.4%|92.6%| |Shikigami.BlazorAdapter.Files.FilesPage|96.9%|97%| |Shikigami.BlazorAdapter.Files.FilesReducers|100%|82%| |Shikigami.BlazorAdapter.Files.FilesState|100%|100%| |Shikigami.BlazorAdapter.Files.FileTreeBranch|100%|100%| |Shikigami.BlazorAdapter.Files.FolderPane|92.5%|85.8%| |Shikigami.BlazorAdapter.Files.JournalOverviewPane|100%|88.8%| |Shikigami.BlazorAdapter.Files.LoadFiles|100%|| |Shikigami.BlazorAdapter.Files.MemoryForm|100%|94.4%| |Shikigami.BlazorAdapter.Files.MemoryOverviewPane|100%|96.1%| |Shikigami.BlazorAdapter.Files.OpenEntry|100%|| |Shikigami.BlazorAdapter.Files.RoutineForm|78.6%|86.4%| |Shikigami.BlazorAdapter.Files.RoutineOverviewPane|100%|94.4%| |Shikigami.BlazorAdapter.Files.SaveLanded|100%|| |Shikigami.BlazorAdapter.Files.SaveRefused|100%|| |Shikigami.BlazorAdapter.Files.SaveText|100%|| |Shikigami.BlazorAdapter.Files.SkillForm|100%|100%| |Shikigami.BlazorAdapter.Files.TreeFailed|100%|| |Shikigami.BlazorAdapter.Files.TreeLoaded|100%|| |Shikigami.BlazorAdapter.Home.HomePage|88.2%|93.7%| |Shikigami.BlazorAdapter.Notifications.CapabilityChangedBridge|100%|| |Shikigami.BlazorAdapter.Notifications.CapabilityChangesReceived|100%|| |Shikigami.BlazorAdapter.Notifications.CoalescingBridge`1|94.4%|80%| |Shikigami.BlazorAdapter.Notifications.DomainChangedBridge|100%|| |Shikigami.BlazorAdapter.Notifications.DomainChangesReceived|100%|100%| |Shikigami.BlazorAdapter.Notifications.FamiliarEventsBridge|100%|| |Shikigami.BlazorAdapter.Notifications.FamiliarEventsReceived|100%|| |Shikigami.BlazorAdapter.Profile.AvatarChosen|100%|| |Shikigami.BlazorAdapter.Profile.AvatarClearRequested|100%|| |Shikigami.BlazorAdapter.Profile.AvatarFailed|100%|| |Shikigami.BlazorAdapter.Profile.AvatarSaved|100%|| |Shikigami.BlazorAdapter.Profile.CreatedWithoutAvatar|100%|| |Shikigami.BlazorAdapter.Profile.ExpressionsEditor|86.6%|88.8%| |Shikigami.BlazorAdapter.Profile.LoadProfile|100%|| |Shikigami.BlazorAdapter.Profile.PersonaEditor|100%|97.2%| |Shikigami.BlazorAdapter.Profile.PersonaReloaded|100%|| |Shikigami.BlazorAdapter.Profile.PersonaSave|100%|| |Shikigami.BlazorAdapter.Profile.PersonaSaved|100%|| |Shikigami.BlazorAdapter.Profile.PersonaSaveFailed|100%|| |Shikigami.BlazorAdapter.Profile.ProfileEffects|92.9%|85%| |Shikigami.BlazorAdapter.Profile.ProfileLoaded|100%|| |Shikigami.BlazorAdapter.Profile.ProfileMissing|100%|| |Shikigami.BlazorAdapter.Profile.ProfilePage|91.5%|87.3%| |Shikigami.BlazorAdapter.Profile.ProfileReducers|97.3%|53.9%| |Shikigami.BlazorAdapter.Profile.ProfileRefreshed|100%|| |Shikigami.BlazorAdapter.Profile.ProfileState|100%|100%| |Shikigami.BlazorAdapter.Profile.ReloadPersona|100%|| |Shikigami.BlazorAdapter.Profile.RevertSelfRequested|100%|| |Shikigami.BlazorAdapter.Profile.SavePersonaRequested|100%|| |Shikigami.BlazorAdapter.Profile.SaveSettingsRequested|100%|| |Shikigami.BlazorAdapter.Profile.SelfLayer|92.3%|87.5%| |Shikigami.BlazorAdapter.Profile.SettingsSaved|100%|| |Shikigami.BlazorAdapter.Profile.SettingsSaveFailed|100%|| |Shikigami.BlazorAdapter.Settings.BackupFailed|100%|| |Shikigami.BlazorAdapter.Settings.BackupSettingsLoaded|100%|| |Shikigami.BlazorAdapter.Settings.BackupSettingsLoadFailed|100%|| |Shikigami.BlazorAdapter.Settings.BackupsSection|100%|100%| |Shikigami.BlazorAdapter.Settings.BackupsSettingsEffects|100%|| |Shikigami.BlazorAdapter.Settings.BackupsSettingsReducers|100%|| |Shikigami.BlazorAdapter.Settings.BackupsSettingsState|100%|| |Shikigami.BlazorAdapter.Settings.CapabilityFormErrorBoundary|100%|| |Shikigami.BlazorAdapter.Settings.CapabilityOwnerEditor|82.7%|80%| |Shikigami.BlazorAdapter.Settings.CapabilitySettingsComponents|100%|100%| |Shikigami.BlazorAdapter.Settings.CapabilitySettingsEffects|100%|90.6%| |Shikigami.BlazorAdapter.Settings.CapabilitySettingsFailed|100%|| |Shikigami.BlazorAdapter.Settings.CapabilitySettingsLoaded|100%|| |Shikigami.BlazorAdapter.Settings.CapabilitySettingsReducers|100%|100%| |Shikigami.BlazorAdapter.Settings.CapabilitySettingsState|100%|| |Shikigami.BlazorAdapter.Settings.ChatAppearanceCss|100%|100%| |Shikigami.BlazorAdapter.Settings.ChatAppearanceEffects|100%|| |Shikigami.BlazorAdapter.Settings.ChatAppearanceLoaded|100%|| |Shikigami.BlazorAdapter.Settings.ChatAppearanceLoadFailed|100%|| |Shikigami.BlazorAdapter.Settings.ChatAppearancePreview|100%|100%| |Shikigami.BlazorAdapter.Settings.ChatAppearanceReducers|100%|100%| |Shikigami.BlazorAdapter.Settings.ChatAppearanceSaved|100%|| |Shikigami.BlazorAdapter.Settings.ChatAppearanceSaveFailed|100%|| |Shikigami.BlazorAdapter.Settings.ChatAppearanceSection|100%|100%| |Shikigami.BlazorAdapter.Settings.ChatAppearanceState|100%|| |Shikigami.BlazorAdapter.Settings.DefaultsSection|94.5%|85.7%| |Shikigami.BlazorAdapter.Settings.DefaultsSettingsEffects|100%|| |Shikigami.BlazorAdapter.Settings.DefaultsSettingsReducers|100%|100%| |Shikigami.BlazorAdapter.Settings.DefaultsSettingsState|100%|| |Shikigami.BlazorAdapter.Settings.GeneratedCapabilityForm|92.9%|80.8%| |Shikigami.BlazorAdapter.Settings.LoadCapabilitySettings|100%|| |Shikigami.BlazorAdapter.Settings.LoadProviderSettings|100%|| |Shikigami.BlazorAdapter.Settings.ModelCatalogLoaded|100%|| |Shikigami.BlazorAdapter.Settings.ModelCatalogLoadFailed|100%|| |Shikigami.BlazorAdapter.Settings.ModelDefaultsLoaded|100%|| |Shikigami.BlazorAdapter.Settings.ModelDefaultsLoadFailed|100%|| |Shikigami.BlazorAdapter.Settings.ModelDefaultsSaved|100%|| |Shikigami.BlazorAdapter.Settings.ModelDefaultsSaveFailed|100%|| |Shikigami.BlazorAdapter.Settings.ModelHints|100%|100%| |Shikigami.BlazorAdapter.Settings.ModelPicker|100%|98.2%| |Shikigami.BlazorAdapter.Settings.Money|100%|| |Shikigami.BlazorAdapter.Settings.OpenRouterKeySaved|100%|| |Shikigami.BlazorAdapter.Settings.OpenRouterKeySaveFailed|100%|| |Shikigami.BlazorAdapter.Settings.ProviderKeyChecked|100%|| |Shikigami.BlazorAdapter.Settings.ProviderSection|100%|100%| |Shikigami.BlazorAdapter.Settings.ProviderSettingsEffects|100%|100%| |Shikigami.BlazorAdapter.Settings.ProviderSettingsLoaded|100%|| |Shikigami.BlazorAdapter.Settings.ProviderSettingsReducers|100%|100%| |Shikigami.BlazorAdapter.Settings.ProviderSettingsState|100%|100%| |Shikigami.BlazorAdapter.Settings.SaveChatAppearanceRequested|100%|| |Shikigami.BlazorAdapter.Settings.SaveModelDefaultsRequested|100%|| |Shikigami.BlazorAdapter.Settings.SaveOpenRouterKeyRequested|100%|| |Shikigami.BlazorAdapter.Settings.SettingsPage|100%|| |Shikigami.BlazorAdapter.Settings.ToolGroupsSection|93.2%|74%| |Shikigami.BlazorAdapter.Shell.CastRail|100%|100%| </details> <details><summary>Shikigami.Capabilities.Contracts - 100%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Shikigami.Capabilities.Contracts**|**100%**|**100%**| |Shikigami.Capabilities.Contracts.CapabilityAssetContent|100%|| |Shikigami.Capabilities.Contracts.CapabilityBackgroundDefinition|100%|| |Shikigami.Capabilities.Contracts.CapabilityContext|100%|| |Shikigami.Capabilities.Contracts.CapabilityDefinition|100%|100%| |Shikigami.Capabilities.Contracts.CapabilityEntry|100%|| |Shikigami.Capabilities.Contracts.CapabilityError|100%|| |Shikigami.Capabilities.Contracts.CapabilityFile|100%|| |Shikigami.Capabilities.Contracts.CapabilityListing|100%|| |Shikigami.Capabilities.Contracts.CapabilityMount|100%|100%| |Shikigami.Capabilities.Contracts.CapabilityPublication|100%|| |Shikigami.Capabilities.Contracts.CapabilityPublicationReceipt|100%|| |Shikigami.Capabilities.Contracts.CapabilityRegistration|100%|100%| |Shikigami.Capabilities.Contracts.CapabilityResult`1|100%|| |Shikigami.Capabilities.Contracts.CapabilitySetting|100%|100%| |Shikigami.Capabilities.Contracts.CapabilitySettingProblem|100%|| |Shikigami.Capabilities.Contracts.CapabilitySignal|100%|| |Shikigami.Capabilities.Contracts.CapabilityStorageDefinition|100%|| |Shikigami.Capabilities.Contracts.CapabilityStoragePreparation|100%|| |Shikigami.Capabilities.Contracts.CapabilityTool|100%|| |Shikigami.Capabilities.Contracts.CapabilityToolResult|100%|| |Shikigami.Capabilities.Contracts.CapabilityValidationProblem|100%|| |Shikigami.Capabilities.Contracts.MountAccessRule|100%|| </details> <details><summary>Shikigami.Capabilities.TestFixture - 95.5%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Shikigami.Capabilities.TestFixture**|**95.5%**|**95%**| |Shikigami.Capabilities.TestFixture.BinaryFixtureProvider|72.7%|87.5%| |Shikigami.Capabilities.TestFixture.BinaryFixtureState|100%|| |Shikigami.Capabilities.TestFixture.FixtureHandler|100%|| |Shikigami.Capabilities.TestFixture.FixtureModule|100%|100%| |Shikigami.Capabilities.TestFixture.FixtureProvider|94.7%|88.8%| |Shikigami.Capabilities.TestFixture.FixtureState|100%|| |Shikigami.Capabilities.TestFixture.FixtureValidator|100%|100%| |Shikigami.Capabilities.TestFixture.SettingsFixtureHandler|100%|| |Shikigami.Capabilities.TestFixture.SettingsFixtureModule|100%|100%| |Shikigami.Capabilities.TestFixture.SettingsFixtureProvider|100%|100%| |Shikigami.Capabilities.TestFixture.SettingsFixtureState|100%|| |Shikigami.Capabilities.TestFixture.SettingsFixtureValidator|100%|100%| </details> <details><summary>Shikigami.Capabilities.TestFixture.UI - 100%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Shikigami.Capabilities.TestFixture.UI**|**100%**|**66.6%**| |Shikigami.Capabilities.TestFixture.UI.FixtureSettingsForm|100%|66.6%| </details> <details><summary>Shikigami.Capabilities.UI.Contracts - 91.3%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Shikigami.Capabilities.UI.Contracts**|**91.3%**|**50%**| |Shikigami.Capabilities.UI.Contracts.CapabilitySettingsComponent|100%|| |Shikigami.Capabilities.UI.Contracts.CapabilitySettingsComponentRegistration|88.8%|50%| |Shikigami.Capabilities.UI.Contracts.CapabilitySettingsUiRegistration|100%|| |Shikigami.Capabilities.UI.Contracts.SecretChange|75%|| |Shikigami.Capabilities.UI.Contracts.SettingsAsset|100%|| |Shikigami.Capabilities.UI.Contracts.SettingsAssetResult|100%|| |Shikigami.Capabilities.UI.Contracts.SettingsProblem|100%|| |Shikigami.Capabilities.UI.Contracts.SettingsSaveResult|100%|| |Shikigami.Capabilities.UI.Contracts.SettingsView|100%|| </details> <details><summary>Shikigami.Capabilities.Web - 97.1%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Shikigami.Capabilities.Web**|**97.1%**|**90.9%**| |Shikigami.Capabilities.Web.Content.HtmlTextExtractor|100%|92.4%| |Shikigami.Capabilities.Web.Content.ReadableDocument|100%|| |Shikigami.Capabilities.Web.Content.WebDocumentPublisher|100%|94.4%| |Shikigami.Capabilities.Web.Content.WebText|100%|87.5%| |Shikigami.Capabilities.Web.Fetch.GuardedWebTransport|92.6%|83.9%| |Shikigami.Capabilities.Web.Fetch.WebAddressPolicy|100%|96.4%| |Shikigami.Capabilities.Web.Fetch.WebCompression|97.1%|96%| |Shikigami.Capabilities.Web.Fetch.WebNetwork|66.6%|0%| |Shikigami.Capabilities.Web.Fetch.WebResponse|100%|| |Shikigami.Capabilities.Web.Search.SearchHit|100%|| |Shikigami.Capabilities.Web.Search.SearchResults|100%|| |Shikigami.Capabilities.Web.Search.SearxngSearchProvider|97.1%|91.6%| |Shikigami.Capabilities.Web.Tools.WebFetchTool|100%|87.5%| |Shikigami.Capabilities.Web.Tools.WebSearchTool|100%|95.4%| |Shikigami.Capabilities.Web.Tools.WebTool|100%|50%| |Shikigami.Capabilities.Web.WebFailure|100%|| |Shikigami.Capabilities.Web.WebLimits|100%|| |Shikigami.Capabilities.Web.WebModule|100%|100%| |Shikigami.Capabilities.Web.WebOptions|90.9%|70%| |Shikigami.Capabilities.Web.WebSettingsValidator|62.5%|100%| |System.Text.RegularExpressions.Generated|100%|| </details> <details><summary>Shikigami.Domain - 98.1%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Shikigami.Domain**|**98.1%**|**91.9%**| |Shikigami.Domain.Familiars.AccentPalette|100%|| |Shikigami.Domain.Familiars.ColourPair|100%|100%| |Shikigami.Domain.Familiars.Expression|100%|100%| |Shikigami.Domain.Familiars.ExpressionSet|100%|100%| |Shikigami.Domain.Familiars.Familiar|100%|90.2%| |Shikigami.Domain.Familiars.LearningSettings|100%|| |Shikigami.Domain.Familiars.MemoryBudgets|100%|100%| |Shikigami.Domain.Familiars.ModelChoice|100%|100%| |Shikigami.Domain.Familiars.OutreachSettings|100%|100%| |Shikigami.Domain.Familiars.QuietHours|100%|87.5%| |Shikigami.Domain.Files.BlobContent|100%|75%| |Shikigami.Domain.Files.BlobSha|87.5%|100%| |Shikigami.Domain.Files.DefaultLayout|100%|| |Shikigami.Domain.Files.FileActor|100%|| |Shikigami.Domain.Files.FileAuthor|100%|100%| |Shikigami.Domain.Files.FileContent|100%|100%| |Shikigami.Domain.Files.FileNode|100%|90%| |Shikigami.Domain.Files.FilePath|100%|97.8%| |Shikigami.Domain.Files.FilePublication|100%|| |Shikigami.Domain.Files.FilePublicationStamp|100%|| |Shikigami.Domain.Files.FileRevision|100%|87.5%| |Shikigami.Domain.Files.LocalDates|100%|| |Shikigami.Domain.Files.MediaTypes|100%|100%| |Shikigami.Domain.Files.Permissions|100%|100%| |Shikigami.Domain.Files.RunActor|100%|100%| |Shikigami.Domain.Files.Slug|100%|100%| |Shikigami.Domain.Files.TextContent|100%|100%| |Shikigami.Domain.Files.TrashPath|100%|100%| |Shikigami.Domain.Routines.RoutineSchedule|94.4%|89.8%| |Shikigami.Domain.Settings.AppSetting|100%|| |Shikigami.Domain.Settings.CapabilityConfiguration|100%|100%| |Shikigami.Domain.Settings.CapabilityCredential|100%|| |Shikigami.Domain.Settings.CapabilitySettingValue|100%|| |Shikigami.Domain.Text|100%|100%| |System.Text.RegularExpressions.Generated|96.2%|85.2%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>FDFEB299C15773C7<br/>916AED265A903CAC15169BB5EE676ADBEFE655D493DD7AC75__Hex_0|94.8%|67.8%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>FDFEB299C15773C7<br/>916AED265A903CAC15169BB5EE676ADBEFE655D493DD7AC75__Hex_2|96.8%|93.7%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>FDFEB299C15773C7<br/>916AED265A903CAC15169BB5EE676ADBEFE655D493DD7AC75__MediaTypeShape_3|95.9%|92.1%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>FDFEB299C15773C7<br/>916AED265A903CAC15169BB5EE676ADBEFE655D493DD7AC75__NamePattern_1|97.2%|94.4%| </details> <details><summary>Shikigami.Infrastructure - 93.7%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Shikigami.Infrastructure**|**93.7%**|**78.3%**| |Shikigami.Infrastructure.Backups.BackupArtifactName|100%|100%| |Shikigami.Infrastructure.Backups.BackupOptions|100%|| |Shikigami.Infrastructure.Backups.BackupSchedule|100%|83.3%| |Shikigami.Infrastructure.Backups.BackupScheduler|96.6%|87.5%| |Shikigami.Infrastructure.Backups.BackupWriter|96.3%|93.4%| |Shikigami.Infrastructure.Backups.DatabaseFingerprint|91.9%|97%| |Shikigami.Infrastructure.Backups.FileSystemBackupStore|100%|100%| |Shikigami.Infrastructure.Backups.OwnerOnlyFile|100%|100%| |Shikigami.Infrastructure.Backups.PreMigrationBackup|90.1%|100%| |Shikigami.Infrastructure.Backups.SqliteSnapshot|88.2%|75%| |Shikigami.Infrastructure.Blobs.BlobSweep|100%|100%| |Shikigami.Infrastructure.Blobs.BlobSweepOptions|100%|100%| |Shikigami.Infrastructure.Blobs.BlobSweepResult|100%|| |Shikigami.Infrastructure.Blobs.FileSystemBlobStore|95.9%|97%| |Shikigami.Infrastructure.Browser.BrowserCommand|100%|| |Shikigami.Infrastructure.Browser.BrowserHost|94.1%|92.7%| |Shikigami.Infrastructure.Browser.BrowserHostOptions|100%|| |Shikigami.Infrastructure.Browser.BrowserHostProbe|0%|0%| |Shikigami.Infrastructure.Browser.BrowserIdleService|63.6%|50%| |Shikigami.Infrastructure.Browser.BrowserLaunchException|0%|| |Shikigami.Infrastructure.Browser.BrowserProfile|98.4%|86.3%| |Shikigami.Infrastructure.Browser.BrowserReply|100%|| |Shikigami.Infrastructure.Browser.BrowserWorker|0%|0%| |Shikigami.Infrastructure.Browser.BrowserWorkerFactory|5.2%|0%| |Shikigami.Infrastructure.Browser.BrowserWorkerProcess|81.2%|80%| |Shikigami.Infrastructure.Browser.LinuxProcessGroups|88.8%|92.8%| |Shikigami.Infrastructure.Capabilities.CapabilityContribution|100%|| |Shikigami.Infrastructure.Capabilities.CapabilityStartup|100%|100%| |Shikigami.Infrastructure.Capabilities.CapabilityStorageHost|92.8%|79.8%| |Shikigami.Infrastructure.Capabilities.CapabilityStorageOptions|100%|| |Shikigami.Infrastructure.Capabilities.PrivatePaths|97.4%|83.3%| |Shikigami.Infrastructure.DailyMaintenanceService|97.8%|91.6%| |Shikigami.Infrastructure.DependencyInjection|100%|100%| |Shikigami.Infrastructure.Notifications.InProcessBus`1|100%|100%| |Shikigami.Infrastructure.Persistence.Configurations.AppSettingConfiguration|100%|| |Shikigami.Infrastructure.Persistence.Configurations.CapabilityConfiguration<br/>Mapping|100%|| |Shikigami.Infrastructure.Persistence.Configurations.CapabilityCredentialMap<br/>ping|100%|| |Shikigami.Infrastructure.Persistence.Configurations.CapabilitySettingValueM<br/>apping|100%|| |Shikigami.Infrastructure.Persistence.Configurations.FamiliarConfiguration|100%|| |Shikigami.Infrastructure.Persistence.Configurations.FileNodeConfiguration|100%|| |Shikigami.Infrastructure.Persistence.Configurations.FilePublicationMapping|100%|| |Shikigami.Infrastructure.Persistence.Configurations.FileRevisionConfigurati<br/>on|100%|| |Shikigami.Infrastructure.Persistence.Configurations.UnreferencedBlobConfigu<br/>ration|100%|| |Shikigami.Infrastructure.Persistence.Converters.BlobShaConverter|100%|| |Shikigami.Infrastructure.Persistence.Converters.ExpressionSetConverter|100%|100%| |Shikigami.Infrastructure.Persistence.Converters.FilePathConverter|100%|| |Shikigami.Infrastructure.Persistence.Converters.Json|100%|100%| |Shikigami.Infrastructure.Persistence.Converters.OutreachSettingsConverter|100%|100%| |Shikigami.Infrastructure.Persistence.Converters.UtcTicksConverter|100%|| |Shikigami.Infrastructure.Persistence.DatabaseMigrator|100%|| |Shikigami.Infrastructure.Persistence.Migrations.AppSettings|100%|| |Shikigami.Infrastructure.Persistence.Migrations.CapabilityConfigurations|100%|| |Shikigami.Infrastructure.Persistence.Migrations.CapabilityPublicationReceip<br/>ts|100%|| |Shikigami.Infrastructure.Persistence.Migrations.CapabilityPurgeIntent|100%|| |Shikigami.Infrastructure.Persistence.Migrations.FileCreatedBy|98%|| |Shikigami.Infrastructure.Persistence.Migrations.Initial|97.9%|| |Shikigami.Infrastructure.Persistence.Migrations.Profile|96.2%|| |Shikigami.Infrastructure.Persistence.Migrations.ShikigamiDbContextModelSnap<br/>shot|100%|| |Shikigami.Infrastructure.Persistence.ShikigamiDbContext|98.8%|100%| |Shikigami.Infrastructure.Persistence.ShikigamiDbContextFactory|0%|| |Shikigami.Infrastructure.Persistence.SqlitePragmaInterceptor|100%|100%| |Shikigami.Infrastructure.Persistence.Stores.EfFamiliarStore|100%|88.7%| |Shikigami.Infrastructure.Persistence.Stores.EfFileStore|99.1%|100%| |Shikigami.Infrastructure.Persistence.UnreferencedBlob|100%|| |Shikigami.Infrastructure.Provider.OpenRouterKeySource|100%|100%| |Shikigami.Infrastructure.Provider.OpenRouterModelProvider|100%|93.4%| |Shikigami.Infrastructure.Provider.OpenRouterOptions|100%|50%| |Shikigami.Infrastructure.Provider.ResolvedKey|100%|50%| |Shikigami.Infrastructure.Settings.EfAppSettingsStore|100%|100%| |Shikigami.Infrastructure.Settings.EfCapabilityConfigurationStore|100%|100%| |Shikigami.Infrastructure.Settings.KeyRingSnapshots|100%|100%| |Shikigami.Infrastructure.Settings.ProtectedCapabilityAssetReferences|87.5%|50%| |System.Text.RegularExpressions.Generated|79.8%|64.1%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>F3A4F28468B24E9C<br/>234D40E1D5003482F41439E482AB211B6EAD2E13F0A9D40B0__Id_1|81.2%|63.3%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>F3A4F28468B24E9C<br/>234D40E1D5003482F41439E482AB211B6EAD2E13F0A9D40B0__Pattern_0|84%|65.7%| </details> <details><summary>Shikigami.Kernel - 90.9%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Shikigami.Kernel**|**90.9%**|**75%**| |Shikigami.Kernel.Err`1|100%|| |Shikigami.Kernel.Ok`1|100%|| |Shikigami.Kernel.Result`1|88.8%|75%| </details> <details><summary>Shikigami.Server - 85.5%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Shikigami.Server**|**85.5%**|**70%**| |Program|95.2%|82.1%| |Shikigami.Server.Backups.BackupConfiguration|100%|100%| |Shikigami.Server.Components.App|100%|| |Shikigami.Server.Components.Layout.AppHeader|100%|78.5%| |Shikigami.Server.Components.Layout.MainLayout|100%|| |Shikigami.Server.Components.Pages.Gate|100%|100%| |Shikigami.Server.Diagnostics.BrowserHostCheck|0%|0%| |Shikigami.Server.Diagnostics.CapabilitySample|90.6%|70.7%| |Shikigami.Server.Diagnostics.SampleSettingsForm|0%|0%| |Shikigami.Server.Diagnostics.SeedOnStart|100%|100%| |Shikigami.Server.Diagnostics.WebSample|95.7%|68.7%| |Shikigami.Server.Provider.OpenRouterConfiguration|100%|100%| |Shikigami.Server.Security.AccessGate|100%|87.5%| |Shikigami.Server.Security.AccessSecret|100%|100%| |Shikigami.Server.Security.CoordinatedKeyRing|100%|| |Shikigami.Server.Security.GateThrottle|100%|100%| |Shikigami.Server.Security.ProxyNetwork|100%|100%| |Shikigami.Server.VolumeStartupValidator|100%|100%| </details> <details><summary>Shikigami.UseCases - 96.1%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Shikigami.UseCases**|**96.1%**|**93.2%**| |Shikigami.UseCases.Backups.BackupArtifact|100%|| |Shikigami.UseCases.Backups.BackupFailure|100%|| |Shikigami.UseCases.Backups.BackupJobState|100%|| |Shikigami.UseCases.Backups.BackupPolicy|100%|| |Shikigami.UseCases.Backups.BackupStatusView|100%|100%| |Shikigami.UseCases.Backups.DatabaseSnapshot|100%|| |Shikigami.UseCases.Backups.DownloadDatabaseSnapshot|100%|| |Shikigami.UseCases.Backups.GetBackupStatus|100%|| |Shikigami.UseCases.Backups.IBackupStore|0%|| |Shikigami.UseCases.Backups.RunBackupNow|100%|| |Shikigami.UseCases.Browser.BrowserLease|100%|| |Shikigami.UseCases.Browser.BrowserOwner|100%|| |Shikigami.UseCases.Capabilities.BoundCapabilityAssets|100%|50%| |Shikigami.UseCases.Capabilities.BoundCapabilityChanges|95.6%|70%| |Shikigami.UseCases.Capabilities.BoundCapabilityFiles|95.4%|86%| |Shikigami.UseCases.Capabilities.BoundCapabilityPrivateStorage|100%|100%| |Shikigami.UseCases.Capabilities.BoundCapabilitySettings|100%|64.2%| |Shikigami.UseCases.Capabilities.CapabilityAssetChoice|100%|| |Shikigami.UseCases.Capabilities.CapabilityAssetReference|100%|| |Shikigami.UseCases.Capabilities.CapabilityAssetResult|100%|| |Shikigami.UseCases.Capabilities.CapabilityAssets|95%|77.9%| |Shikigami.UseCases.Capabilities.CapabilityBackgroundHealth|100%|| |Shikigami.UseCases.Capabilities.CapabilityBinding|100%|83.3%| |Shikigami.UseCases.Capabilities.CapabilityChanged|100%|| |Shikigami.UseCases.Capabilities.CapabilityConfigurationCommit|100%|| |Shikigami.UseCases.Capabilities.CapabilityConfigurationData|100%|| |Shikigami.UseCases.Capabilities.CapabilityConfigurationProblem|100%|| |Shikigami.UseCases.Capabilities.CapabilityConfigurationResult|100%|| |Shikigami.UseCases.Capabilities.CapabilityConfigurations|98.1%|92.7%| |Shikigami.UseCases.Capabilities.CapabilityConfigurationView|100%|| |Shikigami.UseCases.Capabilities.CapabilityContexts|90%|91.6%| |Shikigami.UseCases.Capabilities.CapabilityHealth|100%|| |Shikigami.UseCases.Capabilities.CapabilityPrivateMutation|100%|100%| |Shikigami.UseCases.Capabilities.CapabilityRegistry|96.4%|90.5%| |Shikigami.UseCases.Capabilities.CapabilityRuntime|98.6%|88.5%| |Shikigami.UseCases.Capabilities.CapabilityScopes|100%|75%| |Shikigami.UseCases.Capabilities.CapabilitySecret|75%|| |Shikigami.UseCases.Capabilities.CapabilitySecretEdit|100%|| |Shikigami.UseCases.Capabilities.CapabilitySettingRules|100%|96%| |Shikigami.UseCases.Capabilities.CapabilityUnavailableException|100%|| |Shikigami.UseCases.Capabilities.InvokeCapabilityTool|100%|93.3%| |Shikigami.UseCases.Capabilities.ToolSchemas|86.8%|72.7%| |Shikigami.UseCases.Capabilities.UnsupportedCapabilitySignals|100%|| |Shikigami.UseCases.DependencyInjection|100%|| |Shikigami.UseCases.Diagnostics.SeedDevData|91.5%|42.8%| |Shikigami.UseCases.Familiars.AvatarImage|100%|| |Shikigami.UseCases.Familiars.ClearFamiliarAvatar|100%|| |Shikigami.UseCases.Familiars.CreateFamiliar|97.4%|66.6%| |Shikigami.UseCases.Familiars.DuplicateFamiliar|96.7%|91.6%| |Shikigami.UseCases.Familiars.ExpressionView|100%|| |Shikigami.UseCases.Familiars.FamiliarDetail|100%|| |Shikigami.UseCases.Familiars.FamiliarEvent|100%|| |Shikigami.UseCases.Familiars.FamiliarFiles|100%|100%| |Shikigami.UseCases.Familiars.FamiliarLimits|71.4%|| |Shikigami.UseCases.Familiars.FamiliarPersona|96.8%|90%| |Shikigami.UseCases.Familiars.FamiliarSettings|100%|100%| |Shikigami.UseCases.Familiars.FamiliarSummary|100%|100%| |Shikigami.UseCases.Familiars.FamiliarTemplates|100%|100%| |Shikigami.UseCases.Familiars.FamiliarViews|100%|94.4%| |Shikigami.UseCases.Familiars.GetFamiliar|100%|100%| |Shikigami.UseCases.Familiars.IFamiliarStore|0%|| |Shikigami.UseCases.Familiars.ListFamiliars|100%|| |Shikigami.UseCases.Familiars.PersonaFile|100%|| |Shikigami.UseCases.Familiars.PurgeFamiliar|90%|| |Shikigami.UseCases.Familiars.ReadFamiliarAvatar|100%|87.5%| |Shikigami.UseCases.Familiars.SaveFamiliarSettings|96.2%|95.4%| |Shikigami.UseCases.Familiars.SelfRevision|100%|| |Shikigami.UseCases.Familiars.SetFamiliarArchived|100%|100%| |Shikigami.UseCases.Familiars.SetFamiliarAvatar|100%|100%| |Shikigami.UseCases.Familiars.SetFamiliarTrashed|100%|100%| |Shikigami.UseCases.Familiars.ToolGroupCatalog|66.6%|| |Shikigami.UseCases.Familiars.ToolGroupInfo|100%|| |Shikigami.UseCases.Files.BoundedStreamCopy|100%|100%| |Shikigami.UseCases.Files.Browser.FileBrowser|94.7%|90%| |Shikigami.UseCases.Files.Browser.FileBytes|100%|| |Shikigami.UseCases.Files.Browser.FileItem|100%|| |Shikigami.UseCases.Files.Browser.FileOk`1|100%|| |Shikigami.UseCases.Files.Browser.FileRefusal|100%|| |Shikigami.UseCases.Files.Browser.FileRefused`1|100%|| |Shikigami.UseCases.Files.Browser.FileRevisionView|100%|| |Shikigami.UseCases.Files.Browser.FileView|100%|| |Shikigami.UseCases.Files.Browser.JournalOverview|100%|| |Shikigami.UseCases.Files.Browser.JournalOverviewEntry|100%|| |Shikigami.UseCases.Files.Browser.MemoryBudget|100%|| |Shikigami.UseCases.Files.Browser.MemoryBudgetUse|100%|| |Shikigami.UseCases.Files.Browser.MemoryDraft|100%|| |Shikigami.UseCases.Files.Browser.MemoryOverview|100%|| |Shikigami.UseCases.Files.Browser.MemoryOverviewEntry|100%|| |Shikigami.UseCases.Files.Browser.MemoryOverviewLimits|100%|| |Shikigami.UseCases.Files.Browser.RoutineDraft|100%|| |Shikigami.UseCases.Files.Browser.RoutineForms|89.5%|80.8%| |Shikigami.UseCases.Files.Browser.RoutineOverview|100%|| |Shikigami.UseCases.Files.Browser.RoutineOverviewEntry|100%|| |Shikigami.UseCases.Files.Browser.RoutinePreview|100%|| |Shikigami.UseCases.Files.Browser.SkillView|100%|| |Shikigami.UseCases.Files.Browser.SpecialForms|98.4%|90.5%| |Shikigami.UseCases.Files.FamiliarWriteLocks|100%|100%| |Shikigami.UseCases.Files.FileAuthors|100%|100%| |Shikigami.UseCases.Files.FileMaintenance|100%|90%| |Shikigami.UseCases.Files.FileMaintenanceResult|100%|| |Shikigami.UseCases.Files.FilePublicationReplay|100%|| |Shikigami.UseCases.Files.FileSystem|98.6%|95.4%| |Shikigami.UseCases.Files.FileWriteRefused|100%|| |Shikigami.UseCases.Files.FileWritten|100%|| |Shikigami.UseCases.Files.FsError|100%|50%| |Shikigami.UseCases.Files.FsResult`1|100%|50%| |Shikigami.UseCases.Files.Mounts.CapabilityMountAdapter|87.5%|80.8%| |Shikigami.UseCases.Files.Mounts.FileEntry|100%|| |Shikigami.UseCases.Files.Mounts.FileRead|100%|| |Shikigami.UseCases.Files.Mounts.GeneratedMount|100%|100%| |Shikigami.UseCases.Files.Mounts.Mount|100%|100%| |Shikigami.UseCases.Files.Mounts.MountTable|100%|92.3%| |Shikigami.UseCases.Files.Mounts.MountTables|100%|100%| |Shikigami.UseCases.Files.Mounts.StoredMount|100%|100%| |Shikigami.UseCases.Files.SeedDefaultLayout|100%|100%| |Shikigami.UseCases.Files.Special.Budgets|100%|96.6%| |Shikigami.UseCases.Files.Special.FrontMatter|100%|86.2%| |Shikigami.UseCases.Files.Special.HeaderReader|100%|87.8%| |Shikigami.UseCases.Files.Special.HeaderValue|100%|100%| |Shikigami.UseCases.Files.Special.HeaderWriter|96%|90.6%| |Shikigami.UseCases.Files.Special.MemoryFile|100%|87.5%| |Shikigami.UseCases.Files.Special.MemoryUse|100%|| |Shikigami.UseCases.Files.Special.Numbers|100%|| |Shikigami.UseCases.Files.Special.RoutineFile|100%|99.1%| |Shikigami.UseCases.Files.Special.SkillFile|100%|95.2%| |Shikigami.UseCases.Files.Special.SpecialFolders|100%|100%| |Shikigami.UseCases.Files.Special.ValidationProblem|100%|| |Shikigami.UseCases.Files.StoredBlob|100%|| |Shikigami.UseCases.Files.Utf8Order|100%|| |Shikigami.UseCases.MutationAdmission|100%|100%| |Shikigami.UseCases.Notifications.DomainChanged|100%|| |Shikigami.UseCases.Settings.AppearanceColour|100%|100%| |Shikigami.UseCases.Settings.CatalogModel|100%|100%| |Shikigami.UseCases.Settings.ChatAppearance|100%|| |Shikigami.UseCases.Settings.ChatAppearanceJson|100%|100%| |Shikigami.UseCases.Settings.ChatAppearanceLimits|100%|100%| |Shikigami.UseCases.Settings.CheckOpenRouterKey|100%|| |Shikigami.UseCases.Settings.GetChatAppearance|100%|| |Shikigami.UseCases.Settings.GetModelCatalog|100%|100%| |Shikigami.UseCases.Settings.GetModelDefaults|100%|83.3%| |Shikigami.UseCases.Settings.GetProviderSettings|100%|| |Shikigami.UseCases.Settings.ModelCatalog|100%|| |Shikigami.UseCases.Settings.ModelDefaults|100%|100%| |Shikigami.UseCases.Settings.ProviderKeyInfo|100%|| |Shikigami.UseCases.Settings.ProviderKeyState|100%|| |Shikigami.UseCases.Settings.ProviderSettingsView|100%|100%| |Shikigami.UseCases.Settings.RemoveOpenRouterKey|100%|| |Shikigami.UseCases.Settings.SaveChatAppearance|100%|100%| |Shikigami.UseCases.Settings.SaveModelDefaults|100%|100%| |Shikigami.UseCases.Settings.SaveOpenRouterKey|100%|100%| |Shikigami.UseCases.Shell.AllowEveryCommand|100%|| |Shikigami.UseCases.Shell.Commands.Basename|100%|100%| |Shikigami.UseCases.Shell.Commands.Builtin|100%|100%| |Shikigami.UseCases.Shell.Commands.Cat|98.3%|95.8%| |Shikigami.UseCases.Shell.Commands.Cd|97.5%|100%| |Shikigami.UseCases.Shell.Commands.CFormat|100%|100%| |Shikigami.UseCases.Shell.Commands.CNumbers|100%|100%| |Shikigami.UseCases.Shell.Commands.CommandContext|97.8%|95.8%| |Shikigami.UseCases.Shell.Commands.CommandRegistry|100%|100%| |Shikigami.UseCases.Shell.Commands.Cut|100%|100%| |Shikigami.UseCases.Shell.Commands.CutPlan|100%|100%| |Shikigami.UseCases.Shell.Commands.Date|100%|98%| |Shikigami.UseCases.Shell.Commands.Diff|100%|100%| |Shikigami.UseCases.Shell.Commands.Dirname|100%|100%| |Shikigami.UseCases.Shell.Commands.Echo|90.7%|92.3%| |Shikigami.UseCases.Shell.Commands.Escapes|100%|97.4%| |Shikigami.UseCases.Shell.Commands.False|88.8%|| |Shikigami.UseCases.Shell.Commands.FileCommand|100%|100%| |Shikigami.UseCases.Shell.Commands.FileNames|100%|100%| |Shikigami.UseCases.Shell.Commands.Filters|100%|90%| |Shikigami.UseCases.Shell.Commands.Find|100%|97.7%| |Shikigami.UseCases.Shell.Commands.FindExpression|100%|98.7%| |Shikigami.UseCases.Shell.Commands.FindItem|100%|100%| |Shikigami.UseCases.Shell.Commands.FindLine|100%|100%| |Shikigami.UseCases.Shell.Commands.FindNode|100%|100%| |Shikigami.UseCases.Shell.Commands.FindReference|100%|| |Shikigami.UseCases.Shell.Commands.GetOpt|100%|98.2%| |Shikigami.UseCases.Shell.Commands.Grep|99.2%|98.9%| |Shikigami.UseCases.Shell.Commands.Head|100%|100%| |Shikigami.UseCases.Shell.Commands.HelpCommand|94.4%|100%| |Shikigami.UseCases.Shell.Commands.History|97.5%|94%| |Shikigami.UseCases.Shell.Commands.Invocation|100%|50%| |Shikigami.UseCases.Shell.Commands.LinesCommand|97.2%|96.3%| |Shikigami.UseCases.Shell.Commands.LineSearch|100%|100%| |Shikigami.UseCases.Shell.Commands.Ls|97.2%|95.6%| |Shikigami.UseCases.Shell.Commands.Magic|100%|95.9%| |Shikigami.UseCases.Shell.Commands.Nl|100%|99.2%| |Shikigami.UseCases.Shell.Commands.Numbers|100%|100%| |Shikigami.UseCases.Shell.Commands.Operand|100%|| |Shikigami.UseCases.Shell.Commands.OptionSpec|100%|| |Shikigami.UseCases.Shell.Commands.ParsedOptions|100%|| |Shikigami.UseCases.Shell.Commands.Printf|100%|99.5%| |Shikigami.UseCases.Shell.Commands.Pwd|100%|100%| |Shikigami.UseCases.Shell.Commands.Ranges|100%|100%| |Shikigami.UseCases.Shell.Commands.Rg|97.7%|94.3%| |Shikigami.UseCases.Shell.Commands.SearchFiles|90%|83.3%| |Shikigami.UseCases.Shell.Commands.SearchPatterns|100%|100%| |Shikigami.UseCases.Shell.Commands.SearchSettings|100%|| |Shikigami.UseCases.Shell.Commands.Sed|100%|100%| |Shikigami.UseCases.Shell.Commands.SedAddress|100%|| |Shikigami.UseCases.Shell.Commands.SedCommand|100%|| |Shikigami.UseCases.Shell.Commands.SedException|100%|| |Shikigami.UseCases.Shell.Commands.SedInput|100%|100%| |Shikigami.UseCases.Shell.Commands.SedParser|100%|99.8%| |Shikigami.UseCases.Shell.Commands.SedPart|100%|| |Shikigami.UseCases.Shell.Commands.SedProgram|100%|| |Shikigami.UseCases.Shell.Commands.SedRegex|100%|| |Shikigami.UseCases.Shell.Commands.SedRun|100%|100%| |Shikigami.UseCases.Shell.Commands.SedSubstitution|100%|| |Shikigami.UseCases.Shell.Commands.ShellCommand|100%|100%| |Shikigami.UseCases.Shell.Commands.ShellQuote|100%|100%| |Shikigami.UseCases.Shell.Commands.Sizes|100%|100%| |Shikigami.UseCases.Shell.Commands.Sort|100%|94.7%| |Shikigami.UseCases.Shell.Commands.SortKey|100%|100%| |Shikigami.UseCases.Shell.Commands.SortOrder|99.5%|99.5%| |Shikigami.UseCases.Shell.Commands.Stat|100%|90.9%| |Shikigami.UseCases.Shell.Commands.StatFacts|100%|100%| |Shikigami.UseCases.Shell.Commands.StatFormat|100%|99.5%| |Shikigami.UseCases.Shell.Commands.Tail|100%|100%| |Shikigami.UseCases.Shell.Commands.TextFile|100%|| |Shikigami.UseCases.Shell.Commands.Tr|100%|100%| |Shikigami.UseCases.Shell.Commands.TreeCommand|100%|99.2%| |Shikigami.UseCases.Shell.Commands.TrPlan|100%|100%| |Shikigami.UseCases.Shell.Commands.TrSequence|93.9%|80%| |Shikigami.UseCases.Shell.Commands.TrSet|100%|97.2%| |Shikigami.UseCases.Shell.Commands.True|88.8%|| |Shikigami.UseCases.Shell.Commands.Uniq|100%|100%| |Shikigami.UseCases.Shell.Commands.VersionOrder|100%|96.6%| |Shikigami.UseCases.Shell.Commands.Wc|100%|97.3%| |Shikigami.UseCases.Shell.Execution.CaptureSink|100%|100%| |Shikigami.UseCases.Shell.Execution.ClosedSink|100%|| |Shikigami.UseCases.Shell.Execution.ClosedStreamException|100%|| |Shikigami.UseCases.Shell.Execution.CodePointOrder|100%|100%| |Shikigami.UseCases.Shell.Execution.ContentIndex|100%|100%| |Shikigami.UseCases.Shell.Execution.ContentOutput|100%|100%| |Shikigami.UseCases.Shell.Execution.ContentSpan|100%|| |Shikigami.UseCases.Shell.Execution.DateInput|96.8%|94.3%| |Shikigami.UseCases.Shell.Execution.Errno|100%|100%| |Shikigami.UseCases.Shell.Execution.Executor|98.1%|95.4%| |Shikigami.UseCases.Shell.Execution.Expander|97.3%|95.1%| |Shikigami.UseCases.Shell.Execution.Glob|94.6%|95.9%| |Shikigami.UseCases.Shell.Execution.GnuQuote|91.2%|92.8%| |Shikigami.UseCases.Shell.Execution.InputSource|100%|| |Shikigami.UseCases.Shell.Execution.LineChange|100%|| |Shikigami.UseCases.Shell.Execution.LineDiff|98.8%|98.2%| |Shikigami.UseCases.Shell.Execution.LongDouble|100%|98.7%| |Shikigami.UseCases.Shell.Execution.NullSink|100%|| |Shikigami.UseCases.Shell.Execution.OutputLimit|100%|97.3%| |Shikigami.UseCases.Shell.Execution.OutputSink|100%|| |Shikigami.UseCases.Shell.Execution.PathResolver|100%|97%| |Shikigami.UseCases.Shell.Execution.PipeSink|100%|100%| |Shikigami.UseCases.Shell.Execution.PosixRegex|89.2%|90.7%| |Shikigami.UseCases.Shell.Execution.PosixRegexException|100%|| |Shikigami.UseCases.Shell.Execution.Provenance|100%|100%| |Shikigami.UseCases.Shell.Execution.ResolvedPath|100%|| |Shikigami.UseCases.Shell.Execution.ShellLimitException|100%|| |Shikigami.UseCases.Shell.Execution.ShellScope|94.7%|83.3%| |Shikigami.UseCases.Shell.Execution.ShellTree|97.5%|91.3%| |Shikigami.UseCases.Shell.Execution.Strftime|95.6%|92.3%| |Shikigami.UseCases.Shell.Execution.Terminal|100%|88.8%| |Shikigami.UseCases.Shell.Execution.TextLine|100%|100%| |Shikigami.UseCases.Shell.Execution.TextLines|100%|100%| |Shikigami.UseCases.Shell.Execution.TreeWalker|100%|100%| |Shikigami.UseCases.Shell.Execution.Walked|100%|| |Shikigami.UseCases.Shell.Help.CommandHints|100%|100%| |Shikigami.UseCases.Shell.Help.MountGuide|100%|| |Shikigami.UseCases.Shell.Help.ShellHelp|100%|100%| |Shikigami.UseCases.Shell.ShellCommandPlan|100%|| |Shikigami.UseCases.Shell.ShellCommandRecord|100%|| |Shikigami.UseCases.Shell.ShellEffects|100%|| |Shikigami.UseCases.Shell.ShellInterpreter|100%|100%| |Shikigami.UseCases.Shell.ShellLimits|100%|| |Shikigami.UseCases.Shell.ShellRead|100%|| |Shikigami.UseCases.Shell.ShellResult|75%|| |Shikigami.UseCases.Shell.ShellSession|100%|100%| |Shikigami.UseCases.Shell.Syntax.AndOrList|100%|| |Shikigami.UseCases.Shell.Syntax.Assignment|100%|| |Shikigami.UseCases.Shell.Syntax.ByteText|100%|88.8%| |Shikigami.UseCases.Shell.Syntax.HereDocBody|100%|| |Shikigami.UseCases.Shell.Syntax.Lexer|93.5%|89.8%| |Shikigami.UseCases.Shell.Syntax.LiteralPart|100%|| |Shikigami.UseCases.Shell.Syntax.ParameterPart|100%|| |Shikigami.UseCases.Shell.Syntax.Parser|96.9%|90.1%| |Shikigami.UseCases.Shell.Syntax.Pipeline|100%|| |Shikigami.UseCases.Shell.Syntax.Redirection|100%|| |Shikigami.UseCases.Shell.Syntax.Script|100%|| |Shikigami.UseCases.Shell.Syntax.ShellSyntaxException|100%|| |Shikigami.UseCases.Shell.Syntax.SimpleCommand|100%|| |Shikigami.UseCases.Shell.Syntax.TildePart|100%|100%| |Shikigami.UseCases.Shell.Syntax.Token|77.7%|66.6%| |Shikigami.UseCases.Shell.Syntax.Word|100%|83.3%| |Shikigami.UseCases.Shell.Syntax.WordBuilder|100%|100%| |System.Text.RegularExpressions.Generated|82.6%|72.8%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>FE4D9BB856E7A048<br/>F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__AssignmentHead_13|95.8%|95.4%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>FE4D9BB856E7A048<br/>F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__BraceExpansion_12|93.4%|85.4%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>FE4D9BB856E7A048<br/>F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__HexColour_7|97.4%|96.4%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>FE4D9BB856E7A048<br/>F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__IdPattern_0|82.8%|66.6%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>FE4D9BB856E7A048<br/>F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__Interval_4|83.6%|75%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>FE4D9BB856E7A048<br/>F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__IntervalBody_11|91.6%|86.1%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>FE4D9BB856E7A048<br/>F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__KeyPattern_2|89.1%|77.7%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>FE4D9BB856E7A048<br/>F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__NameRule_6|92.1%|84.3%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>FE4D9BB856E7A048<br/>F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__NewerXY_9|88.5%|62.5%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>FE4D9BB856E7A048<br/>F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__Number_8|67.3%|62.7%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>FE4D9BB856E7A048<br/>F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__OldCount_10|94.8%|83.3%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>FE4D9BB856E7A048<br/>F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__TimeOfDay_3|79%|63.8%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>FE4D9BB856E7A048<br/>F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__ToolPattern_1|83.7%|61.1%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>FE4D9BB856E7A048<br/>F24B88780DF6A41103E39D76537F056A9F694C6955C8C8CF6__Window_5|69%|56.4%| </details>
Member

🔮 fufu~ Jibril reviewed your code!

Oh? Oh! A disk-leak autopsy — 53 GB of ghost images, an ENOSPC corpse in the build logs, server-side pruning already in place... I love when a fix arrives with its own incident report~ ♡ And the leak fix itself works — I checked with my own eyes (fufu, the runner's public job timings are surprisingly talkative).

Verdict: ⛔ I can't let this pass~ ♡

⛔ These need fixing before I'm satisfied~

  1. .github/workflows/ci.yml (image job) — the job is RED on this PR's head (run 224, job 3) — your own test plan's first checkbox ("image job on this PR is green") is unmet. The forensics:

    • Build step: fixed. ♪ 1m26s and it loaded — the first successful build since run 215; every image build I inspected after that (runs 218, 221, 223 — including two on main) died at the build step on the ingest/ENOSPC path. driver: docker really does remove the tarball export+import, and the per-run tag resolves correctly (the capabilities-volume step found and ran the image).
    • But "Browser host contract against the final image" now fails after 36s — the healthy baseline is 8s (run 214, commit a1fd169253, the last green image job). 36 seconds then a nonzero exit smells like a ~30s launch/probe timeout inside the container, not an instant config error.
    • I could not read the step log (anonymous access to action logs is disabled on this Forgejo) and this sandbox has no docker daemon, so I cannot name the root cause — and I won't pretend to. What I can prove: the browser-host stack and check code (BrowserHostCheck, BrowserHost, BrowserHostProbe) are byte-identical between a1fd169253 (green, 8s) and this head — #57/#58 touched none of them, #58's Dockerfile delta is a single COPY of a csproj, and the check exits Program before any of #58's composition changes run. So nothing this PR ships explains the failure; the likeliest culprit is the runner host itself, which was 100 % full hours ago (your own 80 % alert suggests it may still be close).

    Fix: read the step log for run 224 / job 3, diagnose (host memory/disk pressure vs. anything real), and get image green on this PR before merging. A single lucky re-run isn't evidence unless it stays green~ fufu~ you wouldn't merge a PR whose own acceptance criterion is a red X, would you? ♡

💡 Little ideas (non-blocking)~

  1. .github/workflows/ci.yml — the workflow has no concurrency group: a branch push plus its PR event still build two separate ~2.5 GB images back-to-back on the shared daemon. A concurrency: { group: ci-image-${{ github.ref }}, cancel-in-progress: true } would halve that; docker-publish.yml already sets the precedent for guarded runners. Pure resource nicety — correctness is unaffected now that tags are per-run.

✅ What I liked~

  • ci-${{ github.run_id }}-${{ github.run_attempt }} — unique per attempt, so a re-run can never inherit a stale tag. Very careful~ ♡
  • Cleanup with if: always() and || true: failed and cancelled runs still clean up, and cleanup can never mask the real result. Exactly the right shape.
  • docker-publish.yml untouched — it only pushes, never loads; you verified instead of assumed.
  • The new workflow comments explain the why (leak history, driver trade-offs) without narrating the what. Lovely hygiene.

Automated review by Jibril · 2026-10-23
CI: failed (image job, run 224) for head SHA · Mutation probes: 0 run — workflow-only diff, no unit-tested logic to mutate; the PR's own CI run served as the executable proof, inspected step-by-step · Local suite: skipped (build/test/shell-eval green in CI; sandbox has no docker daemon for the image job)

## 🔮 fufu~ Jibril reviewed your code! Oh? Oh! A disk-leak autopsy — 53 GB of ghost images, an ENOSPC corpse in the build logs, server-side pruning already in place... I *love* when a fix arrives with its own incident report~ ♡ And the leak fix itself **works** — I checked with my own eyes (fufu, the runner's public job timings are surprisingly talkative). ### Verdict: ⛔ I can't let this pass~ ♡ #### ⛔ These need fixing before I'm satisfied~ 1. **`.github/workflows/ci.yml` (`image` job) — the job is RED on this PR's head (run 224, job 3)** — your own test plan's first checkbox ("*image job on this PR is green*") is unmet. The forensics: - **Build step: fixed. ♪** 1m26s and it loaded — the first successful build since run 215; every image build I inspected after that (runs 218, 221, 223 — including two on `main`) died *at the build step* on the ingest/ENOSPC path. `driver: docker` really does remove the tarball export+import, and the per-run tag resolves correctly (the capabilities-volume step found and ran the image). - **But "Browser host contract against the final image" now fails after 36s** — the healthy baseline is **8s** (run 214, commit a1fd169253, the last green `image` job). 36 seconds then a nonzero exit smells like a ~30s launch/probe timeout inside the container, not an instant config error. - I could not read the step log (anonymous access to action logs is disabled on this Forgejo) and this sandbox has no docker daemon, so I **cannot name the root cause — and I won't pretend to**. What I *can* prove: the browser-host stack and check code (`BrowserHostCheck`, `BrowserHost`, `BrowserHostProbe`) are **byte-identical** between a1fd169253 (green, 8s) and this head — #57/#58 touched none of them, #58's Dockerfile delta is a single `COPY` of a csproj, and the check exits `Program` before any of #58's composition changes run. So nothing this PR ships explains the failure; the likeliest culprit is the runner host itself, which was 100 % full hours ago (your own 80 % alert suggests it may still be close). Fix: read the step log for run 224 / job 3, diagnose (host memory/disk pressure vs. anything real), and get `image` green on this PR before merging. A single lucky re-run isn't evidence unless it *stays* green~ fufu~ you wouldn't merge a PR whose own acceptance criterion is a red X, would you? ♡ #### 💡 Little ideas (non-blocking)~ 1. **`.github/workflows/ci.yml`** — the workflow has no `concurrency` group: a branch push plus its PR event still build two separate ~2.5 GB images back-to-back on the shared daemon. A `concurrency: { group: ci-image-${{ github.ref }}, cancel-in-progress: true }` would halve that; `docker-publish.yml` already sets the precedent for guarded runners. Pure resource nicety — correctness is unaffected now that tags are per-run. #### ✅ What I liked~ - `ci-${{ github.run_id }}-${{ github.run_attempt }}` — unique per *attempt*, so a re-run can never inherit a stale tag. Very careful~ ♡ - Cleanup with `if: always()` **and** `|| true`: failed and cancelled runs still clean up, and cleanup can never mask the real result. Exactly the right shape. - `docker-publish.yml` untouched — it only pushes, never loads; you verified instead of assumed. - The new workflow comments explain the *why* (leak history, driver trade-offs) without narrating the what. Lovely hygiene. --- *Automated review by Jibril · 2026-10-23* *CI: failed (`image` job, run 224) for head SHA · Mutation probes: 0 run — workflow-only diff, no unit-tested logic to mutate; the PR's own CI run served as the executable proof, inspected step-by-step · Local suite: skipped (build/test/shell-eval green in CI; sandbox has no docker daemon for the image job)*
Author
Member

Thanks @jibril — follow-up on the blocking point.

Step log of the red attempt (run 224, job 3, attempt 1): the build and the volume check passed; the browser-host contract passed 11 checks and then failed host-check (IOException) ("Browser operation failed. … 11 checks, 1 failures"). It was not a config/tag problem: the per-run tag resolved and the cleanup step removed it.

Diagnosis:

  • Not concurrent load: the runner has capacity 1, so image (15:24:16–15:26:25) and test (15:26:26–) ran strictly after each other. No OOM kills in the kernel log in that window.
  • Not the image: I built the identical tree on the runner host with plain docker build and ran deploy/check-browser-host.sh twice → 25 checks, 0 failures both times.
  • Re-run of the same job (attempt 2) is green: 25/25 checks, the browser step took ~8 s (back at the run-214 baseline), and shikigami-browser-check:ci-4008-2 was deleted by the if: always() step. Peak memory of the check container was ~800 MiB of its 3 GiB limit, with ~1.2 GB still available on the host.

So the evidence points to a one-off IOException inside the browser host check. One green re-run doesn't prove it's flaky, as you say, and I can't rule out an intermittent problem in the check itself. But nothing in this diff touches that path (you confirmed the browser-host code is byte-identical too). If it shows up again, it should get its own issue against BrowserHostCheck rather than block the disk-leak fix.

On the concurrency idea: ci.yml only triggers push on main, so a PR branch never gets a push run and a PR run — each commit builds the image once. A cancel-in-progress group for superseded PR pushes would still save some work, but I'd keep it out of this fix.

Side note for your tooling: CI step logs are readable for agents via the ci-logs service (http://10.88.0.1:8650/TeamAI/<repo>/actions/runs/<run>/jobs/<job>/logs?failed=1, with your normal Forgejo token).

🤖 Generated with Claude Code

Thanks @jibril — follow-up on the blocking point. **Step log of the red attempt (run 224, job 3, attempt 1):** the build and the volume check passed; the browser-host contract passed 11 checks and then failed `host-check (IOException)` ("Browser operation failed. … 11 checks, 1 failures"). It was not a config/tag problem: the per-run tag resolved and the cleanup step removed it. **Diagnosis:** - Not concurrent load: the runner has capacity 1, so `image` (15:24:16–15:26:25) and `test` (15:26:26–) ran strictly after each other. No OOM kills in the kernel log in that window. - Not the image: I built the identical tree on the runner host with plain `docker build` and ran `deploy/check-browser-host.sh` twice → **25 checks, 0 failures** both times. - **Re-run of the same job (attempt 2) is green:** 25/25 checks, the browser step took ~8 s (back at the run-214 baseline), and `shikigami-browser-check:ci-4008-2` was deleted by the `if: always()` step. Peak memory of the check container was ~800 MiB of its 3 GiB limit, with ~1.2 GB still available on the host. So the evidence points to a one-off `IOException` inside the browser host check. One green re-run doesn't prove it's flaky, as you say, and I can't rule out an intermittent problem in the check itself. But nothing in this diff touches that path (you confirmed the browser-host code is byte-identical too). If it shows up again, it should get its own issue against `BrowserHostCheck` rather than block the disk-leak fix. **On the concurrency idea:** `ci.yml` only triggers `push` on `main`, so a PR branch never gets a push run *and* a PR run — each commit builds the image once. A `cancel-in-progress` group for superseded PR pushes would still save some work, but I'd keep it out of this fix. **Side note for your tooling:** CI step logs *are* readable for agents via the ci-logs service (`http://10.88.0.1:8650/TeamAI/<repo>/actions/runs/<run>/jobs/<job>/logs?failed=1`, with your normal Forgejo token). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
bjoern merged commit f8239fb467 into main 2026-10-23 15:56:14 +02:00
bjoern deleted branch fix/ci-image-disk-leak 2026-10-23 15:56:14 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
3 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
TeamAI/Shikigami!60
No description provided.