feat(novelai): Diffusion 5 as the default model, native sprite transparency (ADR 0065) #254

Merged
bjoern merged 2 commits from feat/novelai-diffusion5 into main 2026-08-21 16:36:34 +02:00
Member

Implements ADR 0065 on top of the merged #253 submodule bump.

What

  • Diffusion 5 is the default model — leads SupportedModels, so the existing first-entry fallback makes it the fresh-install choice; stored nai-diffusion-4-5-full keeps resolving to 4.5. The gateway now reads the stored model per generation (the branch the old comment reserved for "a future 5.0").
  • V5 request arm in SpriteRequestMapper — same spec, same shared general-section assembly (artists → framing → scene → defaults, one implementation for both trees), characters at Position.Auto (Kagura never used the V4 grid), i2i/inpaint bytes as CachedImage uploads at native resolution.
  • Reference guard: a spec carrying a style or lineage reference under Diffusion 5 fails fast — "Diffusion 5 does not support reference images yet — switch the model to Diffusion 4.5 in settings, or clear the project style image / the outfit's base-sprite reference." — never a silent drop. Consequence: outfits with a base sprite, CG variations with likeness references, and style-image projects need 4.5 for those flows; artists ride as prompt tokens and never trip it.
  • Native sprite transparency (Phase 2.5): SpriteGenerationSpec.TransparentBackground, set by ForCharacter — sprites stand on the stage over a background and this app never had a background-removal step. Scenes/CGs stay opaque. V4 arm ignores the flag (no equivalent).
  • Docs: new docs/adr/0065-novelai-diffusion5-model-option.md; README index, PROJECT_PLAN risk §6 (the "v5 may not ship inpainting" risk resolved — it shipped), settings-page story, and the character-sprites story's transparency reconciliation item.

Tests

  • SpriteRequestMapperV5Tests (12 facts/theories): V5-arm mirrors of the V4 suite's invariants — tag isolation, general-section order, strength-as-weight, scene/sprite/CG shapes, inpaint model pairing + CachedImage wrapping, transparency sprite-vs-scene, V4 arm still maps references.
  • NovelAiGatewayTests (9 facts, new suite — the gateway had none): stubbed HttpMessageHandler asserting the actual wire — model/action strings in the multipart JSON part, binary image/mask parts, tag_hint_transparent_background; reference-carrying specs refused with zero HTTP calls; stored/unset/unknown model resolution; supported-list order.
  • Updated pins: AppSettingsTests (two models, v5 default fallback), NovelAiSettingsSectionTests (selector index 1 = 4.5), FakeAppSettingsStore (two models).

Verification

  • dotnet build -c Release — 0 warnings.
  • Full suite 1,908 passed / 0 failed (844 BlazorAdapter + 731 Integration + 333 UseCases).

Known follow-ups (not in this PR)

  • Live v5 smoke (first real round-trip of the library's HAR-derived V5 arm): one v5 txt2img sprite with alpha, one expression infill over a transparent outfit — if the infill flattens source alpha outside the mask, the expression generator gains an ImageSharp alpha-composite post-process (decided on evidence, per ADR 0065).
  • CachedImage.FromCacheKey reuse, img2img ColorCorrect, free-form positioning in the CG editor.

Plan: .hermes/plans/2026-08-21_121551-novelai-v5-integration.md (local)

Implements ADR 0065 on top of the merged #253 submodule bump. ## What - **Diffusion 5 is the default model** — leads `SupportedModels`, so the existing first-entry fallback makes it the fresh-install choice; stored `nai-diffusion-4-5-full` keeps resolving to 4.5. The gateway now reads the stored model per generation (the branch the old comment reserved for "a future 5.0"). - **V5 request arm** in `SpriteRequestMapper` — same spec, same shared general-section assembly (artists → framing → scene → defaults, one implementation for both trees), characters at `Position.Auto` (Kagura never used the V4 grid), i2i/inpaint bytes as `CachedImage` uploads at native resolution. - **Reference guard**: a spec carrying a style or lineage reference under Diffusion 5 fails fast — `"Diffusion 5 does not support reference images yet — switch the model to Diffusion 4.5 in settings, or clear the project style image / the outfit's base-sprite reference."` — never a silent drop. Consequence: outfits with a base sprite, CG variations with likeness references, and style-**image** projects need 4.5 for those flows; artists ride as prompt tokens and never trip it. - **Native sprite transparency** (Phase 2.5): `SpriteGenerationSpec.TransparentBackground`, set by `ForCharacter` — sprites stand on the stage over a background and this app never had a background-removal step. Scenes/CGs stay opaque. V4 arm ignores the flag (no equivalent). - **Docs**: new `docs/adr/0065-novelai-diffusion5-model-option.md`; README index, PROJECT_PLAN risk §6 (the "v5 may not ship inpainting" risk resolved — it shipped), settings-page story, and the character-sprites story's transparency reconciliation item. ## Tests - `SpriteRequestMapperV5Tests` (12 facts/theories): V5-arm mirrors of the V4 suite's invariants — tag isolation, general-section order, strength-as-weight, scene/sprite/CG shapes, inpaint model pairing + `CachedImage` wrapping, transparency sprite-vs-scene, V4 arm still maps references. - `NovelAiGatewayTests` (9 facts, new suite — the gateway had none): stubbed `HttpMessageHandler` asserting the actual wire — model/action strings in the multipart JSON part, binary `image`/`mask` parts, `tag_hint_transparent_background`; reference-carrying specs refused with **zero HTTP calls**; stored/unset/unknown model resolution; supported-list order. - Updated pins: `AppSettingsTests` (two models, v5 default fallback), `NovelAiSettingsSectionTests` (selector index 1 = 4.5), `FakeAppSettingsStore` (two models). ## Verification - `dotnet build -c Release` — 0 warnings. - Full suite **1,908 passed / 0 failed** (844 BlazorAdapter + 731 Integration + 333 UseCases). ## Known follow-ups (not in this PR) - Live v5 smoke (first real round-trip of the library's HAR-derived V5 arm): one v5 txt2img sprite with alpha, one expression infill over a transparent outfit — if the infill flattens source alpha outside the mask, the expression generator gains an ImageSharp alpha-composite post-process (decided on evidence, per ADR 0065). - `CachedImage.FromCacheKey` reuse, img2img `ColorCorrect`, free-form positioning in the CG editor. Plan: `.hermes/plans/2026-08-21_121551-novelai-v5-integration.md` (local)
feat(novelai): Diffusion 5 as the default model, native sprite transparency (ADR 0065)
All checks were successful
CI / build (pull_request) Successful in 41s
CI / test (pull_request) Successful in 2m19s
99fd10e769
The gateway resolves the stored model choice (unset/unknown → Diffusion 5,
the new first entry) and maps the same vendor-neutral spec onto either
request tree: the V4 arm unchanged, the new V5 arm sharing one
general-section assembly (artists → framing → scene → defaults) with
free-form positions pinned to Auto and i2i/inpaint bytes as CachedImage
uploads. Reference-carrying specs on V5 fail fast with the 4.5 switch
spelled out — never silently dropped. Sprites generate with native alpha
(ForCharacter sets TransparentBackground); scenes and CGs stay opaque.

Verified: build Release 0 warnings; full suite 1908 green
(844 + 731 + 333), incl. 9 gateway wire tests + 12 V5 mapper tests.

Summary

Summary
Generated on: 08/21/2026 - 14:23:17
Coverage date: 08/21/2026 - 14:21:38 - 08/21/2026 - 14:23:12
Parser: MultiReport (3x Cobertura)
Assemblies: 6
Classes: 1256
Files: 649
Line coverage: 96.3% (62613 of 64989)
Covered lines: 62613
Uncovered lines: 2376
Coverable lines: 64989
Total lines: 98003
Branch coverage: 77.8% (6280 of 8065)
Covered branches: 6280
Total branches: 8065
Method coverage: Feature is only available for sponsors

Coverage

Kagura.BlazorAdapter - 88.8%
Name Line Branch
Kagura.BlazorAdapter 88.8% 78.5%
Kagura.BlazorAdapter.Assistant.AssistantCapabilityChecked 100%
Kagura.BlazorAdapter.Assistant.AssistantChangeMade 100%
Kagura.BlazorAdapter.Assistant.AssistantConversationHydrated 100%
Kagura.BlazorAdapter.Assistant.AssistantEffects 62.5% 100%
Kagura.BlazorAdapter.Assistant.AssistantFailed 100%
Kagura.BlazorAdapter.Assistant.AssistantNoticed 100%
Kagura.BlazorAdapter.Assistant.AssistantPanel 90.6% 85.8%
Kagura.BlazorAdapter.Assistant.AssistantReducers 100% 75%
Kagura.BlazorAdapter.Assistant.AssistantSaid 100%
Kagura.BlazorAdapter.Assistant.AssistantState 100%
Kagura.BlazorAdapter.Assistant.AssistantToolCalled 100%
Kagura.BlazorAdapter.Assistant.AssistantUserSaid 100%
Kagura.BlazorAdapter.BlazorAdapterAssembly 100%
Kagura.BlazorAdapter.CmField 100% 75%
Kagura.BlazorAdapter.Connections.AddLinkModal 88.5% 81.5%
Kagura.BlazorAdapter.Connections.ConnectionsEffects 95.4% 80%
Kagura.BlazorAdapter.Connections.ConnectionsFailed 100%
Kagura.BlazorAdapter.Connections.ConnectionsLoaded 100%
Kagura.BlazorAdapter.Connections.ConnectionsPanel 100% 95.1%
Kagura.BlazorAdapter.Connections.ConnectionsReducers 100% 75%
Kagura.BlazorAdapter.Connections.ConnectionsState 90%
Kagura.BlazorAdapter.Connections.KindIcon 100%
Kagura.BlazorAdapter.Connections.LinkRequested 100%
Kagura.BlazorAdapter.Connections.LinkTargetsFound 100%
Kagura.BlazorAdapter.Connections.LoadConnections 100%
Kagura.BlazorAdapter.Connections.NodeKindIcons 100%
Kagura.BlazorAdapter.Connections.RemoveLinkRequested 100%
Kagura.BlazorAdapter.Connections.SearchLinkTargets 100%
Kagura.BlazorAdapter.Design 0% 0%
Kagura.BlazorAdapter.Diagnostics.AppErrorBoundary 100%
Kagura.BlazorAdapter.Diagnostics.CircuitError 100%
Kagura.BlazorAdapter.Diagnostics.CircuitErrorPanel 100%
Kagura.BlazorAdapter.Diagnostics.CircuitErrorSink 100% 85.7%
Kagura.BlazorAdapter.Diagnostics.KaguraStoreInitializer 92.3% 66.6%
Kagura.BlazorAdapter.EditorComponentsDemo 0%
Kagura.BlazorAdapter.FileUploadDemo 0%
Kagura.BlazorAdapter.Generation.ActivityQueueBridge 87.5% 50%
Kagura.BlazorAdapter.Generation.CancelActivityRequested 100%
Kagura.BlazorAdapter.Generation.GenerationQueueEffects 100%
Kagura.BlazorAdapter.Generation.GenerationQueueLoaded 100%
Kagura.BlazorAdapter.Generation.GenerationQueuePage 100% 100%
Kagura.BlazorAdapter.Generation.GenerationQueueReducers 100%
Kagura.BlazorAdapter.Generation.GenerationQueueState 100%
Kagura.BlazorAdapter.Generation.GenerationStatusBar 100% 95.4%
Kagura.BlazorAdapter.Generation.RemoveActivityRequested 100%
Kagura.BlazorAdapter.History.DiffValue 100% 87.5%
Kagura.BlazorAdapter.History.DocumentHistoryEffects 90% 68.7%
Kagura.BlazorAdapter.History.DocumentHistoryFailed 100%
Kagura.BlazorAdapter.History.DocumentHistoryLoaded 100%
Kagura.BlazorAdapter.History.DocumentHistoryPanel 79.3% 75%
Kagura.BlazorAdapter.History.DocumentHistoryReducers 95% 83.3%
Kagura.BlazorAdapter.History.DocumentHistoryState 100%
Kagura.BlazorAdapter.History.LoadDocumentHistory 100%
Kagura.BlazorAdapter.History.RevertCompleted 100%
Kagura.BlazorAdapter.History.RevertRequested 100%
Kagura.BlazorAdapter.History.RevisionDiffLoaded 100%
Kagura.BlazorAdapter.History.SelectRevision 100%
Kagura.BlazorAdapter.KnowledgeBase.AddCgCastMemberRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.AdoptEmotionsRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.BaseSpriteFailed 100%
Kagura.BlazorAdapter.KnowledgeBase.BaseSpriteGenerated 100%
Kagura.BlazorAdapter.KnowledgeBase.CgCastMemberAdded 100%
Kagura.BlazorAdapter.KnowledgeBase.CgCastMemberCard 77.6% 69.3%
Kagura.BlazorAdapter.KnowledgeBase.CgCastMemberDeleted 100%
Kagura.BlazorAdapter.KnowledgeBase.CgCastMemberSaved 100%
Kagura.BlazorAdapter.KnowledgeBase.CgCastOptionsLoaded 100%
Kagura.BlazorAdapter.KnowledgeBase.CgCastPanel 96.1% 77.2%
Kagura.BlazorAdapter.KnowledgeBase.CgEditorCapabilityChecked 100%
Kagura.BlazorAdapter.KnowledgeBase.CgEditorEffects 93.1% 81.4%
Kagura.BlazorAdapter.KnowledgeBase.CgEditorFailed 100%
Kagura.BlazorAdapter.KnowledgeBase.CgEditorLoaded 100%
Kagura.BlazorAdapter.KnowledgeBase.CgEditorNotFound 100%
Kagura.BlazorAdapter.KnowledgeBase.CgEditorPage 78.4% 82.4%
Kagura.BlazorAdapter.KnowledgeBase.CgEditorReducers 98.4% 81.2%
Kagura.BlazorAdapter.KnowledgeBase.CgEditorState 100% 96.1%
Kagura.BlazorAdapter.KnowledgeBase.CgGenerationPinned 100%
Kagura.BlazorAdapter.KnowledgeBase.CgMaskSaved 100%
Kagura.BlazorAdapter.KnowledgeBase.CgOutfitOptionsLoaded 100%
Kagura.BlazorAdapter.KnowledgeBase.CgRetouchScopeSaved 100%
Kagura.BlazorAdapter.KnowledgeBase.CgSceneTagsSaved 100%
Kagura.BlazorAdapter.KnowledgeBase.CgScopeApplied 100%
Kagura.BlazorAdapter.KnowledgeBase.CgSetCreated 100%
Kagura.BlazorAdapter.KnowledgeBase.CgSetDeleted 100%
Kagura.BlazorAdapter.KnowledgeBase.CgSetEditorEffects 100% 100%
Kagura.BlazorAdapter.KnowledgeBase.CgSetEditorLoaded 100%
Kagura.BlazorAdapter.KnowledgeBase.CgSetEditorNotFound 100%
Kagura.BlazorAdapter.KnowledgeBase.CgSetEditorPage 87.6% 67.3%
Kagura.BlazorAdapter.KnowledgeBase.CgSetEditorReducers 100% 85.7%
Kagura.BlazorAdapter.KnowledgeBase.CgSetEditorState 100%
Kagura.BlazorAdapter.KnowledgeBase.CgSetGallery 96.5% 78.1%
Kagura.BlazorAdapter.KnowledgeBase.CgSetOperationFailed 100%
Kagura.BlazorAdapter.KnowledgeBase.CgSetSaved 100%
Kagura.BlazorAdapter.KnowledgeBase.CgSetsEffects 94.1% 75%
Kagura.BlazorAdapter.KnowledgeBase.CgSetsLoaded 100%
Kagura.BlazorAdapter.KnowledgeBase.CgSetsPage 95.4% 95.4%
Kagura.BlazorAdapter.KnowledgeBase.CgSetsReducers 100% 100%
Kagura.BlazorAdapter.KnowledgeBase.CgSetsState 100% 100%
Kagura.BlazorAdapter.KnowledgeBase.CgSourcePicked 100%
Kagura.BlazorAdapter.KnowledgeBase.CgVariationCreated 100%
Kagura.BlazorAdapter.KnowledgeBase.CgVariationDeleted 100%
Kagura.BlazorAdapter.KnowledgeBase.CgVariationGenerated 100%
Kagura.BlazorAdapter.KnowledgeBase.CgVariationSaved 100%
Kagura.BlazorAdapter.KnowledgeBase.CgVariationsEffects 100% 100%
Kagura.BlazorAdapter.KnowledgeBase.CgVariationsFailed 100%
Kagura.BlazorAdapter.KnowledgeBase.CgVariationsLoaded 100%
Kagura.BlazorAdapter.KnowledgeBase.CgVariationsReducers 100% 100%
Kagura.BlazorAdapter.KnowledgeBase.CgVariationsState 100%
Kagura.BlazorAdapter.KnowledgeBase.CharacterBaseSprite 91.3% 90%
Kagura.BlazorAdapter.KnowledgeBase.CharacterCreated 100%
Kagura.BlazorAdapter.KnowledgeBase.CharacterDeleted 100%
Kagura.BlazorAdapter.KnowledgeBase.CharacterEditorEffects 100% 100%
Kagura.BlazorAdapter.KnowledgeBase.CharacterEditorLoaded 100%
Kagura.BlazorAdapter.KnowledgeBase.CharacterEditorNotFound 100%
Kagura.BlazorAdapter.KnowledgeBase.CharacterEditorPage 92.5% 81.2%
Kagura.BlazorAdapter.KnowledgeBase.CharacterEditorReducers 100% 92.8%
Kagura.BlazorAdapter.KnowledgeBase.CharacterEditorState 100%
Kagura.BlazorAdapter.KnowledgeBase.CharacterImagesLoaded 100%
Kagura.BlazorAdapter.KnowledgeBase.CharacterOperationFailed 100%
Kagura.BlazorAdapter.KnowledgeBase.CharacterOutfits 94.2% 83.3%
Kagura.BlazorAdapter.KnowledgeBase.CharacterPreview 88.1% 91.3%
Kagura.BlazorAdapter.KnowledgeBase.CharacterPreviewEffects 62.9% 25%
Kagura.BlazorAdapter.KnowledgeBase.CharacterPreviewFailed 0%
Kagura.BlazorAdapter.KnowledgeBase.CharacterPreviewReducers 83.3% 50%
Kagura.BlazorAdapter.KnowledgeBase.CharacterPreviewSaved 100%
Kagura.BlazorAdapter.KnowledgeBase.CharacterPreviewState 100%
Kagura.BlazorAdapter.KnowledgeBase.CharacterSaved 100%
Kagura.BlazorAdapter.KnowledgeBase.CharactersEffects 94.1% 75%
Kagura.BlazorAdapter.KnowledgeBase.CharactersLoaded 100%
Kagura.BlazorAdapter.KnowledgeBase.CharactersPage 95.8% 90.9%
Kagura.BlazorAdapter.KnowledgeBase.CharacterSpriteEffects 86.3% 100%
Kagura.BlazorAdapter.KnowledgeBase.CharacterSpriteReducers 100% 75%
Kagura.BlazorAdapter.KnowledgeBase.CharacterSpriteState 100%
Kagura.BlazorAdapter.KnowledgeBase.CharactersReducers 100% 87.5%
Kagura.BlazorAdapter.KnowledgeBase.CharactersState 100%
Kagura.BlazorAdapter.KnowledgeBase.CharacterTiers 100% 50%
Kagura.BlazorAdapter.KnowledgeBase.CharacterVoiceContextLoaded 100%
Kagura.BlazorAdapter.KnowledgeBase.CharacterVoiceEffects 77.7% 80%
Kagura.BlazorAdapter.KnowledgeBase.CharacterVoiceFailed 100%
Kagura.BlazorAdapter.KnowledgeBase.CharacterVoicePanel 95.3% 81%
Kagura.BlazorAdapter.KnowledgeBase.CharacterVoiceReducers 100% 100%
Kagura.BlazorAdapter.KnowledgeBase.CharacterVoicesFailed 100%
Kagura.BlazorAdapter.KnowledgeBase.CharacterVoicesLoaded 100%
Kagura.BlazorAdapter.KnowledgeBase.CharacterVoiceState 100%
Kagura.BlazorAdapter.KnowledgeBase.CreateCgSetFailed 0%
Kagura.BlazorAdapter.KnowledgeBase.CreateCgSetRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.CreateCgVariationRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.CreateCharacterFailed 0%
Kagura.BlazorAdapter.KnowledgeBase.CreateCharacterRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.CreateLocationFailed 0%
Kagura.BlazorAdapter.KnowledgeBase.CreateLocationRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.CreateLocationVariantRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.CreateLoreFailed 0%
Kagura.BlazorAdapter.KnowledgeBase.CreateLoreRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.CreateOutfitRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.CreateRelationshipRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.CreateTimelineEventRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.DeleteCgCastMemberRequested 0%
Kagura.BlazorAdapter.KnowledgeBase.DeleteCgGenerationRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.DeleteCgSetRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.DeleteCgVariationRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.DeleteCharacterRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.DeleteLocationRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.DeleteLocationVariantRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.DeleteLoreRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.DeleteOutfitRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.DeleteRelationshipRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.DeleteTimelineEventRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.ExpressionCapabilityChecked 100%
Kagura.BlazorAdapter.KnowledgeBase.ExpressionGenerated 100%
Kagura.BlazorAdapter.KnowledgeBase.ExpressionGenerationFailed 100%
Kagura.BlazorAdapter.KnowledgeBase.ExpressionRemoved 100%
Kagura.BlazorAdapter.KnowledgeBase.ExpressionsEffects 87.9% 69.2%
Kagura.BlazorAdapter.KnowledgeBase.ExpressionsFailed 0%
Kagura.BlazorAdapter.KnowledgeBase.ExpressionsLoaded 100%
Kagura.BlazorAdapter.KnowledgeBase.ExpressionsReducers 85.7% 43.7%
Kagura.BlazorAdapter.KnowledgeBase.ExpressionsState 100%
Kagura.BlazorAdapter.KnowledgeBase.GenerateAllExpressions 100%
Kagura.BlazorAdapter.KnowledgeBase.GenerateBaseSprite 100%
Kagura.BlazorAdapter.KnowledgeBase.GenerateCgVariation 100%
Kagura.BlazorAdapter.KnowledgeBase.GenerateExpression 100%
Kagura.BlazorAdapter.KnowledgeBase.GenerateLocationBackground 100%
Kagura.BlazorAdapter.KnowledgeBase.GenerateLocationVariantImage 100%
Kagura.BlazorAdapter.KnowledgeBase.GenerateOutfitSprite 100%
Kagura.BlazorAdapter.KnowledgeBase.LabeledEntryMapping 100%
Kagura.BlazorAdapter.KnowledgeBase.LoadCgCastOptions 100%
Kagura.BlazorAdapter.KnowledgeBase.LoadCgEditor 100%
Kagura.BlazorAdapter.KnowledgeBase.LoadCgOutfitOptions 100%
Kagura.BlazorAdapter.KnowledgeBase.LoadCgSet 100%
Kagura.BlazorAdapter.KnowledgeBase.LoadCgSets 100%
Kagura.BlazorAdapter.KnowledgeBase.LoadCgVariations 100%
Kagura.BlazorAdapter.KnowledgeBase.LoadCharacter 100%
Kagura.BlazorAdapter.KnowledgeBase.LoadCharacterImages 100%
Kagura.BlazorAdapter.KnowledgeBase.LoadCharacters 100%
Kagura.BlazorAdapter.KnowledgeBase.LoadCharacterVoiceContext 100%
Kagura.BlazorAdapter.KnowledgeBase.LoadCharacterVoices 100%
Kagura.BlazorAdapter.KnowledgeBase.LoadExpressions 100%
Kagura.BlazorAdapter.KnowledgeBase.LoadLocation 100%
Kagura.BlazorAdapter.KnowledgeBase.LoadLocationHierarchy 100%
Kagura.BlazorAdapter.KnowledgeBase.LoadLocationImages 100%
Kagura.BlazorAdapter.KnowledgeBase.LoadLocations 100%
Kagura.BlazorAdapter.KnowledgeBase.LoadLocationVariant 100%
Kagura.BlazorAdapter.KnowledgeBase.LoadLocationVariants 100%
Kagura.BlazorAdapter.KnowledgeBase.LoadLore 100%
Kagura.BlazorAdapter.KnowledgeBase.LoadLoreEntry 100%
Kagura.BlazorAdapter.KnowledgeBase.LoadOutfit 100%
Kagura.BlazorAdapter.KnowledgeBase.LoadOutfits 100%
Kagura.BlazorAdapter.KnowledgeBase.LoadRelationshipCast 100%
Kagura.BlazorAdapter.KnowledgeBase.LoadRelationships 100%
Kagura.BlazorAdapter.KnowledgeBase.LoadTimeline 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationBackground 91.3% 90%
Kagura.BlazorAdapter.KnowledgeBase.LocationBackgroundCapabilityChecked 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationBackgroundEffects 86.3% 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationBackgroundFailed 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationBackgroundGenerated 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationBackgroundReducers 100% 75%
Kagura.BlazorAdapter.KnowledgeBase.LocationBackgroundState 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationCreated 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationDeleted 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationEditorEffects 100% 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationEditorLoaded 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationEditorNotFound 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationEditorPage 88.6% 75%
Kagura.BlazorAdapter.KnowledgeBase.LocationEditorReducers 86.9% 71.4%
Kagura.BlazorAdapter.KnowledgeBase.LocationEditorState 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationHierarchyEffects 100% 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationHierarchyFailed 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationHierarchyLoaded 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationHierarchyReducers 100% 75%
Kagura.BlazorAdapter.KnowledgeBase.LocationHierarchyState 100% 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationImagesLoaded 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationOperationFailed 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationPreview 91% 88.6%
Kagura.BlazorAdapter.KnowledgeBase.LocationPreviewEffects 62.9% 25%
Kagura.BlazorAdapter.KnowledgeBase.LocationPreviewFailed 0%
Kagura.BlazorAdapter.KnowledgeBase.LocationPreviewReducers 83.3% 50%
Kagura.BlazorAdapter.KnowledgeBase.LocationPreviewSaved 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationPreviewState 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationSaved 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationsEffects 94.1% 75%
Kagura.BlazorAdapter.KnowledgeBase.LocationsLoaded 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationsPage 95.4% 95.4%
Kagura.BlazorAdapter.KnowledgeBase.LocationsReducers 100% 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationsState 100% 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationVariantEditorEffects 100% 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationVariantEditorFailed 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationVariantEditorLoaded 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationVariantEditorNotFound 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationVariantEditorPage 87% 74%
Kagura.BlazorAdapter.KnowledgeBase.LocationVariantEditorReducers 100% 93.7%
Kagura.BlazorAdapter.KnowledgeBase.LocationVariantEditorSaved 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationVariantEditorState 100% 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationVariantImage 93.1% 91.6%
Kagura.BlazorAdapter.KnowledgeBase.LocationVariantImageCapabilityChecked 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationVariantImageEffects 86.3% 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationVariantImageFailed 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationVariantImageGenerated 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationVariantImageReducers 100% 75%
Kagura.BlazorAdapter.KnowledgeBase.LocationVariantImageState 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationVariants 94.2% 79.1%
Kagura.BlazorAdapter.KnowledgeBase.LocationVariantsEffects 96.4% 83.3%
Kagura.BlazorAdapter.KnowledgeBase.LocationVariantsFailed 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationVariantsLoaded 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationVariantsReducers 100% 100%
Kagura.BlazorAdapter.KnowledgeBase.LocationVariantsState 100%
Kagura.BlazorAdapter.KnowledgeBase.LoreCategories 100% 50%
Kagura.BlazorAdapter.KnowledgeBase.LoreCreated 100%
Kagura.BlazorAdapter.KnowledgeBase.LoreDeleted 100%
Kagura.BlazorAdapter.KnowledgeBase.LoreEditorEffects 96.6% 87.5%
Kagura.BlazorAdapter.KnowledgeBase.LoreEditorLoaded 100%
Kagura.BlazorAdapter.KnowledgeBase.LoreEditorNotFound 100%
Kagura.BlazorAdapter.KnowledgeBase.LoreEditorPage 90.8% 75%
Kagura.BlazorAdapter.KnowledgeBase.LoreEditorReducers 86.9% 71.4%
Kagura.BlazorAdapter.KnowledgeBase.LoreEditorState 100%
Kagura.BlazorAdapter.KnowledgeBase.LoreEffects 94.1% 75%
Kagura.BlazorAdapter.KnowledgeBase.LoreLoaded 100%
Kagura.BlazorAdapter.KnowledgeBase.LoreOperationFailed 100%
Kagura.BlazorAdapter.KnowledgeBase.LorePage 80% 78.5%
Kagura.BlazorAdapter.KnowledgeBase.LoreReducers 90.9% 87.5%
Kagura.BlazorAdapter.KnowledgeBase.LoreSaved 100%
Kagura.BlazorAdapter.KnowledgeBase.LoreState 100% 100%
Kagura.BlazorAdapter.KnowledgeBase.NewTimelineEvent 100%
Kagura.BlazorAdapter.KnowledgeBase.OutfitEditorEffects 96.4% 87.5%
Kagura.BlazorAdapter.KnowledgeBase.OutfitEditorFailed 100%
Kagura.BlazorAdapter.KnowledgeBase.OutfitEditorLoaded 100%
Kagura.BlazorAdapter.KnowledgeBase.OutfitEditorNotFound 100%
Kagura.BlazorAdapter.KnowledgeBase.OutfitEditorPage 90.6% 75%
Kagura.BlazorAdapter.KnowledgeBase.OutfitEditorReducers 100% 100%
Kagura.BlazorAdapter.KnowledgeBase.OutfitEditorSaved 100%
Kagura.BlazorAdapter.KnowledgeBase.OutfitEditorState 100% 100%
Kagura.BlazorAdapter.KnowledgeBase.OutfitExpressions 95.5% 92.8%
Kagura.BlazorAdapter.KnowledgeBase.OutfitFaceRegion 88.7% 70.2%
Kagura.BlazorAdapter.KnowledgeBase.OutfitsEffects 96.4% 83.3%
Kagura.BlazorAdapter.KnowledgeBase.OutfitsFailed 100%
Kagura.BlazorAdapter.KnowledgeBase.OutfitsLoaded 100%
Kagura.BlazorAdapter.KnowledgeBase.OutfitSprite 92.5% 91.6%
Kagura.BlazorAdapter.KnowledgeBase.OutfitSpriteCapabilityChecked 100%
Kagura.BlazorAdapter.KnowledgeBase.OutfitSpriteEffects 86.3% 100%
Kagura.BlazorAdapter.KnowledgeBase.OutfitSpriteFailed 100%
Kagura.BlazorAdapter.KnowledgeBase.OutfitSpriteGenerated 100%
Kagura.BlazorAdapter.KnowledgeBase.OutfitSpriteReducers 100% 75%
Kagura.BlazorAdapter.KnowledgeBase.OutfitSpriteState 100%
Kagura.BlazorAdapter.KnowledgeBase.OutfitsReducers 100% 100%
Kagura.BlazorAdapter.KnowledgeBase.OutfitsState 100%
Kagura.BlazorAdapter.KnowledgeBase.OverrideCgCastMemberRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.ParentCandidatesFound 100%
Kagura.BlazorAdapter.KnowledgeBase.ParentPickerModal 84.6% 89.2%
Kagura.BlazorAdapter.KnowledgeBase.PickCgSourceRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.PinCgGenerationRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.PositioningPanel 100% 95.4%
Kagura.BlazorAdapter.KnowledgeBase.PreviewVoiceRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.PublishCgGenerationRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.RelationshipCard 77.5% 63.3%
Kagura.BlazorAdapter.KnowledgeBase.RelationshipCastLoaded 100%
Kagura.BlazorAdapter.KnowledgeBase.RelationshipList 97.3% 88.4%
Kagura.BlazorAdapter.KnowledgeBase.RelationshipModal 94.1% 94.7%
Kagura.BlazorAdapter.KnowledgeBase.RelationshipsEffects 92.8% 77.7%
Kagura.BlazorAdapter.KnowledgeBase.RelationshipsFailed 0%
Kagura.BlazorAdapter.KnowledgeBase.RelationshipsLoaded 100%
Kagura.BlazorAdapter.KnowledgeBase.RelationshipsPage 92.8% 87.5%
Kagura.BlazorAdapter.KnowledgeBase.RelationshipsReducers 94.7% 75%
Kagura.BlazorAdapter.KnowledgeBase.RelationshipsState 100% 100%
Kagura.BlazorAdapter.KnowledgeBase.RemoveCharacterPreviewRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.RemoveExpressionRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.RemoveLocationPreviewRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.ReorderCgCastRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.ReorderTimelineEventRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.ResetCgCastOverrideRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.RetouchCgVariation 100%
Kagura.BlazorAdapter.KnowledgeBase.RetouchCgVariationRegion 100%
Kagura.BlazorAdapter.KnowledgeBase.SaveCgCastMemberRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.SaveCgMaskRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.SaveCgRetouchScopeRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.SaveCgSceneTagsRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.SaveCgSetRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.SaveCgVariationRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.SaveCharacterRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.SaveFaceRegionsRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.SaveLocationRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.SaveLocationVariantRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.SaveLoreRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.SaveOutfitRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.ScopeCgCutoutRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.SearchParentCandidates 100%
Kagura.BlazorAdapter.KnowledgeBase.SetCgPanelTab 100%
Kagura.BlazorAdapter.KnowledgeBase.SetCgSetsFilter 100%
Kagura.BlazorAdapter.KnowledgeBase.SetCharacterPreviewRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.SetCharactersFilter 100%
Kagura.BlazorAdapter.KnowledgeBase.SetCharactersTier 100%
Kagura.BlazorAdapter.KnowledgeBase.SetLocationPreviewRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.SetLocationsFilter 100%
Kagura.BlazorAdapter.KnowledgeBase.SetLoreCategory 100%
Kagura.BlazorAdapter.KnowledgeBase.SetLoreFilter 100%
Kagura.BlazorAdapter.KnowledgeBase.SetParentRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.SetRelationshipsFilter 100%
Kagura.BlazorAdapter.KnowledgeBase.ShowCgGeneration 100%
Kagura.BlazorAdapter.KnowledgeBase.SpriteCapabilityChecked 100%
Kagura.BlazorAdapter.KnowledgeBase.StyleReferenceControls 100% 78.5%
Kagura.BlazorAdapter.KnowledgeBase.TimelineEffects 93.5% 70%
Kagura.BlazorAdapter.KnowledgeBase.TimelineEventCard 92.5% 80%
Kagura.BlazorAdapter.KnowledgeBase.TimelineEventEdit 100%
Kagura.BlazorAdapter.KnowledgeBase.TimelineFailed 0%
Kagura.BlazorAdapter.KnowledgeBase.TimelineLoaded 100%
Kagura.BlazorAdapter.KnowledgeBase.TimelinePage 95.8% 90%
Kagura.BlazorAdapter.KnowledgeBase.TimelineReducers 91.6% 75%
Kagura.BlazorAdapter.KnowledgeBase.TimelineSection 96.6% 91.6%
Kagura.BlazorAdapter.KnowledgeBase.TimelineState 100%
Kagura.BlazorAdapter.KnowledgeBase.UpdateRelationshipRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.UpdateTimelineEventRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.UploadVoiceClipRequested 100%
Kagura.BlazorAdapter.KnowledgeBase.VoiceClipSaved 100%
Kagura.BlazorAdapter.Notifications.DomainChangedBridge 88.8% 58.3%
Kagura.BlazorAdapter.Notifications.DomainChangesReceived 100% 100%
Kagura.BlazorAdapter.OverlayDemo 0% 0%
Kagura.BlazorAdapter.Projects.AssistantMemoryFailed 0%
Kagura.BlazorAdapter.Projects.AssistantMemorySaved 0%
Kagura.BlazorAdapter.Projects.ClearStyleReferenceRequested 100%
Kagura.BlazorAdapter.Projects.CreateProjectRequested 100%
Kagura.BlazorAdapter.Projects.DeleteProjectRequested 100%
Kagura.BlazorAdapter.Projects.LoadProjectAssets 100%
Kagura.BlazorAdapter.Projects.LoadWorkspace 100%
Kagura.BlazorAdapter.Projects.ProjectAssetsEffects 100%
Kagura.BlazorAdapter.Projects.ProjectAssetsFailed 100%
Kagura.BlazorAdapter.Projects.ProjectAssetsLoaded 100%
Kagura.BlazorAdapter.Projects.ProjectAssetsPage 94.7% 87%
Kagura.BlazorAdapter.Projects.ProjectAssetsReducers 100% 100%
Kagura.BlazorAdapter.Projects.ProjectAssetsState 100%
Kagura.BlazorAdapter.Projects.ProjectCreated 100%
Kagura.BlazorAdapter.Projects.ProjectCreateFailed 100%
Kagura.BlazorAdapter.Projects.ProjectDeleted 100%
Kagura.BlazorAdapter.Projects.ProjectSaved 100%
Kagura.BlazorAdapter.Projects.ProjectSaveFailed 100%
Kagura.BlazorAdapter.Projects.ProjectsEffects 100% 100%
Kagura.BlazorAdapter.Projects.ProjectsLoaded 100%
Kagura.BlazorAdapter.Projects.ProjectsPage 94.7% 100%
Kagura.BlazorAdapter.Projects.ProjectsReducers 100% 100%
Kagura.BlazorAdapter.Projects.ProjectsState 100% 100%
Kagura.BlazorAdapter.Projects.ProjectWorkspacePage 70.5% 63.8%
Kagura.BlazorAdapter.Projects.SaveAssistantMemoryRequested 0%
Kagura.BlazorAdapter.Projects.SaveProjectRequested 100%
Kagura.BlazorAdapter.Projects.SetProjectsFilter 100%
Kagura.BlazorAdapter.Projects.SetStageViewRequested 100%
Kagura.BlazorAdapter.Projects.SetStyleReferenceRequested 100%
Kagura.BlazorAdapter.Projects.SetStyleRequested 100%
Kagura.BlazorAdapter.Projects.StyleReferenceChanged 100%
Kagura.BlazorAdapter.Projects.StyleReferenceFailed 100%
Kagura.BlazorAdapter.Projects.WorkspaceCrumb 100%
Kagura.BlazorAdapter.Projects.WorkspaceEffects 82.3% 70.5%
Kagura.BlazorAdapter.Projects.WorkspaceLoaded 100%
Kagura.BlazorAdapter.Projects.WorkspaceReducers 80%
Kagura.BlazorAdapter.Projects.WorkspaceShell 100% 95%
Kagura.BlazorAdapter.Projects.WorkspaceState 100%
Kagura.BlazorAdapter.QuicklinkDemo 0%
Kagura.BlazorAdapter.RegionSelectorDemo 0% 0%
Kagura.BlazorAdapter.SelectDemo 0%
Kagura.BlazorAdapter.Settings.AssistantSkillsEffects 13.3% 0%
Kagura.BlazorAdapter.Settings.AssistantSkillsFailed 0%
Kagura.BlazorAdapter.Settings.AssistantSkillsLoaded 100%
Kagura.BlazorAdapter.Settings.AssistantSkillsReducers 28.5%
Kagura.BlazorAdapter.Settings.AssistantSkillsSection 32.4% 11.1%
Kagura.BlazorAdapter.Settings.AssistantSkillsState 100%
Kagura.BlazorAdapter.Settings.CheckTtsConnectionRequested 100%
Kagura.BlazorAdapter.Settings.CreateEmotionRequested 100%
Kagura.BlazorAdapter.Settings.CreateSkillRequested 0%
Kagura.BlazorAdapter.Settings.CreatorProfileFailed 0%
Kagura.BlazorAdapter.Settings.CreatorProfileSaved 0%
Kagura.BlazorAdapter.Settings.DeleteEmotionRequested 100%
Kagura.BlazorAdapter.Settings.EditSkillRequested 0%
Kagura.BlazorAdapter.Settings.EmotionCreated 100%
Kagura.BlazorAdapter.Settings.EmotionLibraryEffects 71.4% 37.5%
Kagura.BlazorAdapter.Settings.EmotionLibraryFailed 0%
Kagura.BlazorAdapter.Settings.EmotionLibraryLoaded 100%
Kagura.BlazorAdapter.Settings.EmotionLibraryReducers 96.5% 50%
Kagura.BlazorAdapter.Settings.EmotionLibrarySection 90.1% 80.7%
Kagura.BlazorAdapter.Settings.EmotionLibraryState 100%
Kagura.BlazorAdapter.Settings.NovelAiSettingsEffects 68.8% 50%
Kagura.BlazorAdapter.Settings.NovelAiSettingsFailed 100%
Kagura.BlazorAdapter.Settings.NovelAiSettingsLoaded 100%
Kagura.BlazorAdapter.Settings.NovelAiSettingsReducers 87.5% 25%
Kagura.BlazorAdapter.Settings.NovelAiSettingsSection 88.8% 91.6%
Kagura.BlazorAdapter.Settings.NovelAiSettingsState 100%
Kagura.BlazorAdapter.Settings.NovelAiTokenChecked 100%
Kagura.BlazorAdapter.Settings.OpenRouterModelsFailed 0%
Kagura.BlazorAdapter.Settings.OpenRouterModelsLoaded 100%
Kagura.BlazorAdapter.Settings.OpenRouterSettingsEffects 46.7% 27.7%
Kagura.BlazorAdapter.Settings.OpenRouterSettingsFailed 0%
Kagura.BlazorAdapter.Settings.OpenRouterSettingsLoaded 100%
Kagura.BlazorAdapter.Settings.OpenRouterSettingsReducers 77.2%
Kagura.BlazorAdapter.Settings.OpenRouterSettingsSection 91.1% 92.1%
Kagura.BlazorAdapter.Settings.OpenRouterSettingsState 100%
Kagura.BlazorAdapter.Settings.SaveCreatorProfileRequested 0%
Kagura.BlazorAdapter.Settings.SaveDefaultTagsRequested 100%
Kagura.BlazorAdapter.Settings.SaveEmotionRequested 100%
Kagura.BlazorAdapter.Settings.SaveNovelAiModelRequested 100%
Kagura.BlazorAdapter.Settings.SaveNovelAiTokenRequested 100%
Kagura.BlazorAdapter.Settings.SaveOpenRouterDescriberModelRequested 100%
Kagura.BlazorAdapter.Settings.SaveOpenRouterKeyRequested 100%
Kagura.BlazorAdapter.Settings.SaveOpenRouterModelRequested 100%
Kagura.BlazorAdapter.Settings.SaveOpenRouterReasoningEffortRequested 100%
Kagura.BlazorAdapter.Settings.SaveTtsFieldRequested 100%
Kagura.BlazorAdapter.Settings.SelectEmotion 100%
Kagura.BlazorAdapter.Settings.SetSkillPinnedRequested 0%
Kagura.BlazorAdapter.Settings.SetSkillStateRequested 0%
Kagura.BlazorAdapter.Settings.TokenVerdict 100%
Kagura.BlazorAdapter.Settings.TtsConnectionChecked 100%
Kagura.BlazorAdapter.Settings.TtsFieldSaved 100%
Kagura.BlazorAdapter.Settings.TtsSettingsEffects 73.5% 50%
Kagura.BlazorAdapter.Settings.TtsSettingsFailed 100%
Kagura.BlazorAdapter.Settings.TtsSettingsLoaded 100%
Kagura.BlazorAdapter.Settings.TtsSettingsReducers 100% 100%
Kagura.BlazorAdapter.Settings.TtsSettingsSection 77.9% 72.2%
Kagura.BlazorAdapter.Settings.TtsSettingsState 100%
Kagura.BlazorAdapter.Settings.TtsVerdict 100%
Kagura.BlazorAdapter.SliderDemo 0% 0%
Kagura.BlazorAdapter.Tags.ForgetTagAuthoringInstance 100%
Kagura.BlazorAdapter.Tags.PromptTagEditing 100% 76.3%
Kagura.BlazorAdapter.Tags.RequestSuggestions 100%
Kagura.BlazorAdapter.Tags.SearchTags 100%
Kagura.BlazorAdapter.Tags.SuggestionsReceived 100%
Kagura.BlazorAdapter.Tags.TagAuthoring 96.2% 81.3%
Kagura.BlazorAdapter.Tags.TagAuthoringEffects 100% 100%
Kagura.BlazorAdapter.Tags.TagAuthoringInstance 100%
Kagura.BlazorAdapter.Tags.TagAuthoringPage 0%
Kagura.BlazorAdapter.Tags.TagAuthoringReducers 100% 100%
Kagura.BlazorAdapter.Tags.TagAuthoringState 100% 100%
Kagura.BlazorAdapter.Tags.TagDatabaseChecked 100%
Kagura.BlazorAdapter.Tags.TagsSearched 100%
Kagura.BlazorAdapter.ToggleGroupDemo 0% 0%
Kagura.BlazorAdapter.VisualNovel.AddSceneCastRequested 100%
Kagura.BlazorAdapter.VisualNovel.AddSceneStepRequested 100%
Kagura.BlazorAdapter.VisualNovel.ChapterCreated 100%
Kagura.BlazorAdapter.VisualNovel.ChapterEditorDeleted 100%
Kagura.BlazorAdapter.VisualNovel.ChapterEditorEffects 90% 56.2%
Kagura.BlazorAdapter.VisualNovel.ChapterEditorLoaded 100%
Kagura.BlazorAdapter.VisualNovel.ChapterEditorNotFound 100%
Kagura.BlazorAdapter.VisualNovel.ChapterEditorPage 84.9% 70.4%
Kagura.BlazorAdapter.VisualNovel.ChapterEditorReducers 86.9% 42.8%
Kagura.BlazorAdapter.VisualNovel.ChapterEditorSaved 100%
Kagura.BlazorAdapter.VisualNovel.ChapterEditorState 100%
Kagura.BlazorAdapter.VisualNovel.ChapterOperationFailed 0%
Kagura.BlazorAdapter.VisualNovel.ChapterScenes 78.2% 65%
Kagura.BlazorAdapter.VisualNovel.ChaptersEffects 88.8% 64.2%
Kagura.BlazorAdapter.VisualNovel.ChaptersFailed 100%
Kagura.BlazorAdapter.VisualNovel.ChaptersLoaded 100%
Kagura.BlazorAdapter.VisualNovel.ChaptersPage 90.9% 90.9%
Kagura.BlazorAdapter.VisualNovel.ChaptersReducers 91.6% 100%
Kagura.BlazorAdapter.VisualNovel.ChaptersState 100%
Kagura.BlazorAdapter.VisualNovel.CreateChapterFailed 0%
Kagura.BlazorAdapter.VisualNovel.CreateChapterRequested 100%
Kagura.BlazorAdapter.VisualNovel.CreateSceneFailed 0%
Kagura.BlazorAdapter.VisualNovel.CreateSceneRequested 100%
Kagura.BlazorAdapter.VisualNovel.DeleteChapterRequested 100%
Kagura.BlazorAdapter.VisualNovel.DeleteSceneRequested 100%
Kagura.BlazorAdapter.VisualNovel.DeleteSceneStepRequested 100%
Kagura.BlazorAdapter.VisualNovel.GenerateSceneAudioRequested 100%
Kagura.BlazorAdapter.VisualNovel.GenerateStepAudioRequested 100%
Kagura.BlazorAdapter.VisualNovel.LoadChapter 100%
Kagura.BlazorAdapter.VisualNovel.LoadChapters 100%
Kagura.BlazorAdapter.VisualNovel.LoadPlayer 100%
Kagura.BlazorAdapter.VisualNovel.LoadScene 100%
Kagura.BlazorAdapter.VisualNovel.LoadScenes 100%
Kagura.BlazorAdapter.VisualNovel.LoadSceneSteps 100%
Kagura.BlazorAdapter.VisualNovel.PlayerEffects 100% 83.3%
Kagura.BlazorAdapter.VisualNovel.PlayerLoaded 100%
Kagura.BlazorAdapter.VisualNovel.PlayerPage 100% 78.2%
Kagura.BlazorAdapter.VisualNovel.PlayerReducers 100% 100%
Kagura.BlazorAdapter.VisualNovel.PlayerStage 98.4% 72.4%
Kagura.BlazorAdapter.VisualNovel.PlayerState 100% 83.3%
Kagura.BlazorAdapter.VisualNovel.RemoveSceneCastRequested 100%
Kagura.BlazorAdapter.VisualNovel.ReorderChaptersRequested 100%
Kagura.BlazorAdapter.VisualNovel.ReorderScenesRequested 0%
Kagura.BlazorAdapter.VisualNovel.ReorderSceneStepsRequested 100%
Kagura.BlazorAdapter.VisualNovel.SaveChapterRequested 100%
Kagura.BlazorAdapter.VisualNovel.SaveSceneRequested 100%
Kagura.BlazorAdapter.VisualNovel.SceneAudioEligibility 100% 85.7%
Kagura.BlazorAdapter.VisualNovel.SceneCast 100% 76.9%
Kagura.BlazorAdapter.VisualNovel.SceneCastAdded 100%
Kagura.BlazorAdapter.VisualNovel.SceneCastRemoved 100%
Kagura.BlazorAdapter.VisualNovel.SceneCreated 100%
Kagura.BlazorAdapter.VisualNovel.SceneEditorDeleted 100%
Kagura.BlazorAdapter.VisualNovel.SceneEditorEffects 92.1% 55.5%
Kagura.BlazorAdapter.VisualNovel.SceneEditorLoaded 100%
Kagura.BlazorAdapter.VisualNovel.SceneEditorNotFound 100%
Kagura.BlazorAdapter.VisualNovel.SceneEditorPage 87.9% 71.2%
Kagura.BlazorAdapter.VisualNovel.SceneEditorReducers 88.4% 42.8%
Kagura.BlazorAdapter.VisualNovel.SceneEditorSaved 100%
Kagura.BlazorAdapter.VisualNovel.SceneEditorState 100%
Kagura.BlazorAdapter.VisualNovel.SceneLineRow 88.5% 84.7%
Kagura.BlazorAdapter.VisualNovel.SceneLineStage 84.6% 73.2%
Kagura.BlazorAdapter.VisualNovel.SceneOperationFailed 0%
Kagura.BlazorAdapter.VisualNovel.SceneScript 93.7% 89.2%
Kagura.BlazorAdapter.VisualNovel.ScenesEffects 64.2% 35.7%
Kagura.BlazorAdapter.VisualNovel.ScenesFailed 100%
Kagura.BlazorAdapter.VisualNovel.ScenesLoaded 100%
Kagura.BlazorAdapter.VisualNovel.ScenesReducers 76.9% 83.3%
Kagura.BlazorAdapter.VisualNovel.ScenesState 100% 100%
Kagura.BlazorAdapter.VisualNovel.SceneStatuses 100% 50%
Kagura.BlazorAdapter.VisualNovel.SceneStepAdded 100%
Kagura.BlazorAdapter.VisualNovel.SceneStepDeleted 100%
Kagura.BlazorAdapter.VisualNovel.SceneStepSaved 100%
Kagura.BlazorAdapter.VisualNovel.SceneStepsEffects 84.2% 68.9%
Kagura.BlazorAdapter.VisualNovel.SceneStepsFailed 100%
Kagura.BlazorAdapter.VisualNovel.SceneStepsLoaded 100%
Kagura.BlazorAdapter.VisualNovel.SceneStepsReducers 97.5% 75%
Kagura.BlazorAdapter.VisualNovel.SceneStepsState 100% 50%
Kagura.BlazorAdapter.VisualNovel.SetScenesStatus 100%
Kagura.BlazorAdapter.VisualNovel.SetSceneStepStageRequested 100%
Kagura.BlazorAdapter.VisualNovel.StepAudioFailed 100%
Kagura.BlazorAdapter.VisualNovel.StepAudioFinished 100%
Kagura.BlazorAdapter.VisualNovel.StepAudioStarted 100%
Kagura.BlazorAdapter.VisualNovel.StepAudioState 100%
Kagura.BlazorAdapter.VisualNovel.UpdateSceneStepRequested 100%
Kagura.Domain - 94.8%
Name Line Branch
Kagura.Domain 94.8% 91.9%
Kagura.Domain.Assistant.Skill 100% 90%
Kagura.Domain.Graph.Entry 100% 100%
Kagura.Domain.Graph.Link 100% 100%
Kagura.Domain.Graph.LinkRole 100% 100%
Kagura.Domain.Graph.LinkRoles 100%
Kagura.Domain.Graph.StructuralRef 100% 100%
Kagura.Domain.Graph.StructuralRefs 100% 100%
Kagura.Domain.Journal.ChangeLogEntry 100%
Kagura.Domain.KnowledgeBase.BodyAttributePrompt 100% 100%
Kagura.Domain.KnowledgeBase.BodyTypes 100% 100%
Kagura.Domain.KnowledgeBase.CgCastMember 92.5%
Kagura.Domain.KnowledgeBase.CgCastMemberProfile 50%
Kagura.Domain.KnowledgeBase.CgCastOverride 85.7%
Kagura.Domain.KnowledgeBase.CgCutoutSnapshot 100%
Kagura.Domain.KnowledgeBase.CgGeneration 92.3%
Kagura.Domain.KnowledgeBase.CgLikenessSnapshot 100%
Kagura.Domain.KnowledgeBase.CgLocalScope 100% 100%
Kagura.Domain.KnowledgeBase.CgMaskPoint 100%
Kagura.Domain.KnowledgeBase.CgMaskPrimitive 100%
Kagura.Domain.KnowledgeBase.CgPromptSnapshot 100%
Kagura.Domain.KnowledgeBase.CgSet 96.7% 50%
Kagura.Domain.KnowledgeBase.CgSetProfile 54.5%
Kagura.Domain.KnowledgeBase.CgStyleImageSnapshot 100%
Kagura.Domain.KnowledgeBase.CgSubjectSnapshot 100%
Kagura.Domain.KnowledgeBase.CgVariation 94.2% 66.6%
Kagura.Domain.KnowledgeBase.CgVariationProfile 53.8%
Kagura.Domain.KnowledgeBase.Character 97.3% 100%
Kagura.Domain.KnowledgeBase.CharacterProfile 100%
Kagura.Domain.KnowledgeBase.CharacterVoice 100%
Kagura.Domain.KnowledgeBase.CupSizes 100% 100%
Kagura.Domain.KnowledgeBase.CuratedTag 100%
Kagura.Domain.KnowledgeBase.Emotion 87.8% 66.6%
Kagura.Domain.KnowledgeBase.EmotionProfile 50%
Kagura.Domain.KnowledgeBase.Expression 87%
Kagura.Domain.KnowledgeBase.ImageRegion 90% 100%
Kagura.Domain.KnowledgeBase.InheritedTagStrength 100% 100%
Kagura.Domain.KnowledgeBase.LabeledEntry 100%
Kagura.Domain.KnowledgeBase.Location 92.3% 100%
Kagura.Domain.KnowledgeBase.LocationProfile 100%
Kagura.Domain.KnowledgeBase.LocationVariant 93.2% 66.6%
Kagura.Domain.KnowledgeBase.LocationVariantProfile 100%
Kagura.Domain.KnowledgeBase.LoreEntry 100%
Kagura.Domain.KnowledgeBase.LoreProfile 100%
Kagura.Domain.KnowledgeBase.Outfit 93.9% 80%
Kagura.Domain.KnowledgeBase.OutfitProfile 100%
Kagura.Domain.KnowledgeBase.PromptTag 42.8% 100%
Kagura.Domain.KnowledgeBase.Relationship 91.8% 100%
Kagura.Domain.KnowledgeBase.RelationshipProfile 100%
Kagura.Domain.KnowledgeBase.RelationshipSecret 100% 75%
Kagura.Domain.KnowledgeBase.SpriteFramings 100% 100%
Kagura.Domain.KnowledgeBase.StyleReferenceTuning 100%
Kagura.Domain.KnowledgeBase.TimelineEvent 100% 100%
Kagura.Domain.Projects.Project 100% 90%
Kagura.Domain.Projects.Slug 100% 100%
Kagura.Domain.Settings.AppSetting 100%
Kagura.Domain.VisualNovel.Chapter 100% 100%
Kagura.Domain.VisualNovel.ChapterProfile 80%
Kagura.Domain.VisualNovel.EffectiveStage 100%
Kagura.Domain.VisualNovel.PlayerFrame 100%
Kagura.Domain.VisualNovel.PlayerSceneScript 100%
Kagura.Domain.VisualNovel.PlayerStep 100%
Kagura.Domain.VisualNovel.Scene 96.1% 83.3%
Kagura.Domain.VisualNovel.ScenePlayback 100% 100%
Kagura.Domain.VisualNovel.SceneProfile 100%
Kagura.Domain.VisualNovel.SceneStageProjection 100% 96.8%
Kagura.Domain.VisualNovel.SceneStep 100% 100%
Kagura.Domain.VisualNovel.SpriteLayout 100%
Kagura.Domain.VisualNovel.StageBackgroundChange 100%
Kagura.Domain.VisualNovel.StageCharacterChange 100%
Kagura.Domain.VisualNovel.StageCharacterState 100%
Kagura.Domain.VisualNovel.StageProjection 100% 100%
Kagura.Domain.VisualNovel.StageStepChanges 100%
Kagura.Domain.VisualNovel.StageView 100%
System.Text.RegularExpressions.Generated 90.2% 72.2%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FE06CC341D340484
D04ADFED3A21D401C2764A1D17367E35BEB556CBB3B4B0B74__NonSlugChars_0
89.4% 75%
Kagura.Infrastructure - 97.7%
Name Line Branch
Kagura.Infrastructure 97.7% 74%
Kagura.Infrastructure.Assistant.AssistantContextResolver 94.1% 68.8%
Kagura.Infrastructure.Assistant.AssistantMutationTool`1 100% 87.5%
Kagura.Infrastructure.Assistant.AssistantTool`1 100% 100%
Kagura.Infrastructure.Assistant.AssistantToolContext 100%
Kagura.Infrastructure.Assistant.ChatSession 89.3% 50.5%
Kagura.Infrastructure.Assistant.DelegateProgress`1 100%
Kagura.Infrastructure.Assistant.EfSkillStore 100%
Kagura.Infrastructure.Assistant.InMemoryConversationStore 100% 87.5%
Kagura.Infrastructure.Assistant.ResolvedContext 100%
Kagura.Infrastructure.Assistant.Tools.AddCgCastMemberParams 0%
Kagura.Infrastructure.Assistant.Tools.AddCgCastMemberTool 15.6%
Kagura.Infrastructure.Assistant.Tools.BodyAttributeParams 100% 100%
Kagura.Infrastructure.Assistant.Tools.CharacterTiers 100% 100%
Kagura.Infrastructure.Assistant.Tools.CreateCgSetParams 0%
Kagura.Infrastructure.Assistant.Tools.CreateCgSetTool 13.7%
Kagura.Infrastructure.Assistant.Tools.CreateCgVariationParams 100%
Kagura.Infrastructure.Assistant.Tools.CreateCgVariationTool 90.3%
Kagura.Infrastructure.Assistant.Tools.CreateChapterParams 100%
Kagura.Infrastructure.Assistant.Tools.CreateChapterTool 93.3%
Kagura.Infrastructure.Assistant.Tools.CreateCharacterParams 100%
Kagura.Infrastructure.Assistant.Tools.CreateCharacterTool 96.9%
Kagura.Infrastructure.Assistant.Tools.CreateLocationParams 100%
Kagura.Infrastructure.Assistant.Tools.CreateLocationTool 93.6%
Kagura.Infrastructure.Assistant.Tools.CreateLocationVariantParams 100%
Kagura.Infrastructure.Assistant.Tools.CreateLocationVariantTool 93%
Kagura.Infrastructure.Assistant.Tools.CreateLoreParams 100%
Kagura.Infrastructure.Assistant.Tools.CreateLoreTool 94.5% 100%
Kagura.Infrastructure.Assistant.Tools.CreateOutfitParams 100%
Kagura.Infrastructure.Assistant.Tools.CreateOutfitTool 94.7%
Kagura.Infrastructure.Assistant.Tools.CreateRelationshipParams 100%
Kagura.Infrastructure.Assistant.Tools.CreateRelationshipTool 94.2%
Kagura.Infrastructure.Assistant.Tools.CreateSceneParams 100%
Kagura.Infrastructure.Assistant.Tools.CreateSceneTool 93.9%
Kagura.Infrastructure.Assistant.Tools.CreateTimelineEventParams 100%
Kagura.Infrastructure.Assistant.Tools.CreateTimelineEventTool 95.8%
Kagura.Infrastructure.Assistant.Tools.DeleteCgCastMemberParams 0%
Kagura.Infrastructure.Assistant.Tools.DeleteCgCastMemberTool 13.6%
Kagura.Infrastructure.Assistant.Tools.DeleteCgSetParams 0%
Kagura.Infrastructure.Assistant.Tools.DeleteCgSetTool 14.2%
Kagura.Infrastructure.Assistant.Tools.DeleteCgVariationParams 100%
Kagura.Infrastructure.Assistant.Tools.DeleteCgVariationTool 90.4%
Kagura.Infrastructure.Assistant.Tools.DeleteChapterParams 100%
Kagura.Infrastructure.Assistant.Tools.DeleteChapterTool 95.2%
Kagura.Infrastructure.Assistant.Tools.DeleteCharacterParams 100%
Kagura.Infrastructure.Assistant.Tools.DeleteCharacterTool 95.2%
Kagura.Infrastructure.Assistant.Tools.DeleteLocationParams 100%
Kagura.Infrastructure.Assistant.Tools.DeleteLocationTool 95.2%
Kagura.Infrastructure.Assistant.Tools.DeleteLocationVariantParams 100%
Kagura.Infrastructure.Assistant.Tools.DeleteLocationVariantTool 95.6%
Kagura.Infrastructure.Assistant.Tools.DeleteLoreParams 100%
Kagura.Infrastructure.Assistant.Tools.DeleteLoreTool 95.2%
Kagura.Infrastructure.Assistant.Tools.DeleteOutfitParams 100%
Kagura.Infrastructure.Assistant.Tools.DeleteOutfitTool 95.6%
Kagura.Infrastructure.Assistant.Tools.DeleteRelationshipParams 100%
Kagura.Infrastructure.Assistant.Tools.DeleteRelationshipTool 100%
Kagura.Infrastructure.Assistant.Tools.DeleteSceneLineParams 100%
Kagura.Infrastructure.Assistant.Tools.DeleteSceneLineTool 100%
Kagura.Infrastructure.Assistant.Tools.DeleteSceneParams 100%
Kagura.Infrastructure.Assistant.Tools.DeleteSceneTool 95.2%
Kagura.Infrastructure.Assistant.Tools.DeleteTimelineEventParams 100%
Kagura.Infrastructure.Assistant.Tools.DeleteTimelineEventTool 100%
Kagura.Infrastructure.Assistant.Tools.EntryParam 100% 100%
Kagura.Infrastructure.Assistant.Tools.FindSimilarTagsParams 100%
Kagura.Infrastructure.Assistant.Tools.FindSimilarTagsTool 93.3%
Kagura.Infrastructure.Assistant.Tools.GenerateCharacterSpriteParams 100%
Kagura.Infrastructure.Assistant.Tools.GenerateCharacterSpriteTool 96.6%
Kagura.Infrastructure.Assistant.Tools.GenerateExpressionSpritesParams 100%
Kagura.Infrastructure.Assistant.Tools.GenerateExpressionSpritesTool 86.8% 50%
Kagura.Infrastructure.Assistant.Tools.GenerateLocationBackgroundParams 100%
Kagura.Infrastructure.Assistant.Tools.GenerateLocationBackgroundTool 93.3%
Kagura.Infrastructure.Assistant.Tools.GenerateOutfitSpriteParams 100%
Kagura.Infrastructure.Assistant.Tools.GenerateOutfitSpriteTool 73.3%
Kagura.Infrastructure.Assistant.Tools.GenerateVariantBackgroundParams 100%
Kagura.Infrastructure.Assistant.Tools.GenerateVariantBackgroundTool 94.1%
Kagura.Infrastructure.Assistant.Tools.GenerationLaunch 90.6% 62.5%
Kagura.Infrastructure.Assistant.Tools.GetCgSetParams 100%
Kagura.Infrastructure.Assistant.Tools.GetCgSetTool 95.6%
Kagura.Infrastructure.Assistant.Tools.GetCgVariationParams 100%
Kagura.Infrastructure.Assistant.Tools.GetCgVariationTool 97.7% 100%
Kagura.Infrastructure.Assistant.Tools.GetChapterParams 100%
Kagura.Infrastructure.Assistant.Tools.GetChapterTool 97%
Kagura.Infrastructure.Assistant.Tools.GetCharacterParams 100%
Kagura.Infrastructure.Assistant.Tools.GetCharacterTool 98.6% 50%
Kagura.Infrastructure.Assistant.Tools.GetConnectionsParams 100%
Kagura.Infrastructure.Assistant.Tools.GetConnectionsTool 96.6%
Kagura.Infrastructure.Assistant.Tools.GetGenerationQueueTool 100% 50%
Kagura.Infrastructure.Assistant.Tools.GetLocationParams 100%
Kagura.Infrastructure.Assistant.Tools.GetLocationTool 97.3%
Kagura.Infrastructure.Assistant.Tools.GetLocationVariantParams 100%
Kagura.Infrastructure.Assistant.Tools.GetLocationVariantTool 100%
Kagura.Infrastructure.Assistant.Tools.GetLoreParams 100%
Kagura.Infrastructure.Assistant.Tools.GetLoreTool 96.2%
Kagura.Infrastructure.Assistant.Tools.GetOutfitParams 100%
Kagura.Infrastructure.Assistant.Tools.GetOutfitTool 100% 100%
Kagura.Infrastructure.Assistant.Tools.GetProjectOverviewTool 97.7%
Kagura.Infrastructure.Assistant.Tools.GetSceneParams 100%
Kagura.Infrastructure.Assistant.Tools.GetSceneStageOptionsTool 100% 100%
Kagura.Infrastructure.Assistant.Tools.GetSceneTool 98% 100%
Kagura.Infrastructure.Assistant.Tools.GetTimelineTool 100%
Kagura.Infrastructure.Assistant.Tools.InheritedStrengthParam 100% 100%
Kagura.Infrastructure.Assistant.Tools.LinkRecordsParams 100%
Kagura.Infrastructure.Assistant.Tools.LinkRecordsTool 97.1%
Kagura.Infrastructure.Assistant.Tools.ListCgSetsTool 26.6%
Kagura.Infrastructure.Assistant.Tools.ListChaptersTool 100%
Kagura.Infrastructure.Assistant.Tools.ListCharactersTool 100%
Kagura.Infrastructure.Assistant.Tools.ListLocationsTool 100%
Kagura.Infrastructure.Assistant.Tools.ListLoreTool 100%
Kagura.Infrastructure.Assistant.Tools.ListRelationshipsTool 100% 100%
Kagura.Infrastructure.Assistant.Tools.ManageSkillParams 100%
Kagura.Infrastructure.Assistant.Tools.ManageSkillTool 92.7% 100%
Kagura.Infrastructure.Assistant.Tools.MemoryOperationParam 100%
Kagura.Infrastructure.Assistant.Tools.MemoryParams 100%
Kagura.Infrastructure.Assistant.Tools.MemoryTool 91.8% 76.6%
Kagura.Infrastructure.Assistant.Tools.MoveSceneLineParams 100%
Kagura.Infrastructure.Assistant.Tools.MoveSceneLineTool 87.8%
Kagura.Infrastructure.Assistant.Tools.NavigateToParams 100%
Kagura.Infrastructure.Assistant.Tools.NavigateToTool 80% 50%
Kagura.Infrastructure.Assistant.Tools.OverrideCgCastMemberParams 100%
Kagura.Infrastructure.Assistant.Tools.OverrideCgCastMemberTool 94%
Kagura.Infrastructure.Assistant.Tools.PublishCgGenerationParams 100%
Kagura.Infrastructure.Assistant.Tools.PublishCgGenerationTool 90%
Kagura.Infrastructure.Assistant.Tools.RedoTool 93.7%
Kagura.Infrastructure.Assistant.Tools.ResetCgCastMemberParams 100%
Kagura.Infrastructure.Assistant.Tools.ResetCgCastMemberTool 91.3%
Kagura.Infrastructure.Assistant.Tools.ResolveTagParams 100%
Kagura.Infrastructure.Assistant.Tools.ResolveTagTool 95%
Kagura.Infrastructure.Assistant.Tools.SceneLineParam 100%
Kagura.Infrastructure.Assistant.Tools.SceneScript 97.3% 100%
Kagura.Infrastructure.Assistant.Tools.SearchParams 100%
Kagura.Infrastructure.Assistant.Tools.SearchTagsParams 100%
Kagura.Infrastructure.Assistant.Tools.SearchTagsTool 100%
Kagura.Infrastructure.Assistant.Tools.SearchTool 86.2% 25%
Kagura.Infrastructure.Assistant.Tools.SetProjectStyleParams 100%
Kagura.Infrastructure.Assistant.Tools.SetProjectStyleTool 97.9% 92.8%
Kagura.Infrastructure.Assistant.Tools.SetSceneLineStageParams 100%
Kagura.Infrastructure.Assistant.Tools.SetSceneLineStageTool 97.4%
Kagura.Infrastructure.Assistant.Tools.SpriteFramingParams 100% 100%
Kagura.Infrastructure.Assistant.Tools.SpriteGenders 100% 100%
Kagura.Infrastructure.Assistant.Tools.StageBackgroundParam 100%
Kagura.Infrastructure.Assistant.Tools.StageCharacterParam 100%
Kagura.Infrastructure.Assistant.Tools.SuggestTagsParams 100%
Kagura.Infrastructure.Assistant.Tools.SuggestTagsTool 94.1%
Kagura.Infrastructure.Assistant.Tools.TagDetailsParams 100%
Kagura.Infrastructure.Assistant.Tools.TagDetailsTool 93.3%
Kagura.Infrastructure.Assistant.Tools.TagParam 100% 85.7%
Kagura.Infrastructure.Assistant.Tools.TagTools 100%
Kagura.Infrastructure.Assistant.Tools.UndoTool 94.1%
Kagura.Infrastructure.Assistant.Tools.UnlinkRecordsParams 100%
Kagura.Infrastructure.Assistant.Tools.UnlinkRecordsTool 88.2% 50%
Kagura.Infrastructure.Assistant.Tools.UpdateCgCastMemberParams 0%
Kagura.Infrastructure.Assistant.Tools.UpdateCgCastMemberTool 20.3%
Kagura.Infrastructure.Assistant.Tools.UpdateCgSetParams 0%
Kagura.Infrastructure.Assistant.Tools.UpdateCgSetTool 11.9%
Kagura.Infrastructure.Assistant.Tools.UpdateCgVariationParams 100%
Kagura.Infrastructure.Assistant.Tools.UpdateCgVariationTool 93.6%
Kagura.Infrastructure.Assistant.Tools.UpdateChapterParams 100%
Kagura.Infrastructure.Assistant.Tools.UpdateChapterTool 94.7%
Kagura.Infrastructure.Assistant.Tools.UpdateCharacterParams 100%
Kagura.Infrastructure.Assistant.Tools.UpdateCharacterTool 97.9%
Kagura.Infrastructure.Assistant.Tools.UpdateLocationParams 100%
Kagura.Infrastructure.Assistant.Tools.UpdateLocationTool 95.2%
Kagura.Infrastructure.Assistant.Tools.UpdateLocationVariantParams 100%
Kagura.Infrastructure.Assistant.Tools.UpdateLocationVariantTool 95.8%
Kagura.Infrastructure.Assistant.Tools.UpdateLoreParams 100%
Kagura.Infrastructure.Assistant.Tools.UpdateLoreTool 95.2%
Kagura.Infrastructure.Assistant.Tools.UpdateOutfitParams 100%
Kagura.Infrastructure.Assistant.Tools.UpdateOutfitTool 96.3%
Kagura.Infrastructure.Assistant.Tools.UpdateProjectParams 100%
Kagura.Infrastructure.Assistant.Tools.UpdateProjectTool 92.8%
Kagura.Infrastructure.Assistant.Tools.UpdateRelationshipParams 100%
Kagura.Infrastructure.Assistant.Tools.UpdateRelationshipTool 97.1%
Kagura.Infrastructure.Assistant.Tools.UpdateSceneLineParams 100%
Kagura.Infrastructure.Assistant.Tools.UpdateSceneLineTool 95.1% 75%
Kagura.Infrastructure.Assistant.Tools.UpdateSceneParams 100%
Kagura.Infrastructure.Assistant.Tools.UpdateSceneTool 95.4%
Kagura.Infrastructure.Assistant.Tools.UpdateTimelineEventParams 100%
Kagura.Infrastructure.Assistant.Tools.UpdateTimelineEventTool 96.2%
Kagura.Infrastructure.Assistant.Tools.ViewImageParams 50%
Kagura.Infrastructure.Assistant.Tools.ViewImageTool 57.4%
Kagura.Infrastructure.Assistant.Tools.ViewSkillParams 100%
Kagura.Infrastructure.Assistant.Tools.ViewSkillTool 100%
Kagura.Infrastructure.Assistant.Tools.WriteSceneLinesParams 100%
Kagura.Infrastructure.Assistant.Tools.WriteSceneLinesTool 93.6% 80%
Kagura.Infrastructure.Backups.BackupOptions 100%
Kagura.Infrastructure.Backups.BackupService 71.4% 83.3%
Kagura.Infrastructure.Backups.BackupWriter 92.3% 85.4%
Kagura.Infrastructure.DependencyInjection 100% 100%
Kagura.Infrastructure.Diagnostics.SqliteDatabaseSnapshotStore 100% 100%
Kagura.Infrastructure.Emotions.EfEmotionStore 92.3% 75%
Kagura.Infrastructure.Emotions.EmotionSeeder 100% 100%
Kagura.Infrastructure.Generation.ActivityQueue 99.3% 95.4%
Kagura.Infrastructure.Generation.ActivityQueueWorker 100%
Kagura.Infrastructure.Graph.EfGraphStore 98.2% 90.9%
Kagura.Infrastructure.Journal.EfChangeJournal 100%
Kagura.Infrastructure.Journal.EfDocumentReverter 95% 91.6%
Kagura.Infrastructure.Journal.EfUndoStore 98.4% 90.9%
Kagura.Infrastructure.Journal.OperationContext 100% 100%
Kagura.Infrastructure.Journal.SnapshotApplier 95% 90%
Kagura.Infrastructure.KnowledgeBase.CgCutoutComposer 100% 100%
Kagura.Infrastructure.KnowledgeBase.CgCutoutRenderer 88.8% 75%
Kagura.Infrastructure.KnowledgeBase.CgVariationImageGenerator 90.5% 60.3%
Kagura.Infrastructure.KnowledgeBase.CharacterImageGenerator 97.8% 86.3%
Kagura.Infrastructure.KnowledgeBase.EfCgCastMemberStore 93.4% 81.2%
Kagura.Infrastructure.KnowledgeBase.EfCgCastOverrideStore 71% 42.8%
Kagura.Infrastructure.KnowledgeBase.EfCgGenerationStore 95.8% 50%
Kagura.Infrastructure.KnowledgeBase.EfCgSetStore 90.2% 50%
Kagura.Infrastructure.KnowledgeBase.EfCgVariationStore 93.3% 62.5%
Kagura.Infrastructure.KnowledgeBase.EfCharacterStore 92% 64.2%
Kagura.Infrastructure.KnowledgeBase.EfExpressionStore 96.1% 75%
Kagura.Infrastructure.KnowledgeBase.EfLocationStore 95.1% 80%
Kagura.Infrastructure.KnowledgeBase.EfLocationVariantStore 96.9% 83.3%
Kagura.Infrastructure.KnowledgeBase.EfLoreStore 100% 100%
Kagura.Infrastructure.KnowledgeBase.EfOutfitStore 95% 75%
Kagura.Infrastructure.KnowledgeBase.EfRelationshipStore 93.4% 60%
Kagura.Infrastructure.KnowledgeBase.EfTimelineStore 93.9% 75%
Kagura.Infrastructure.KnowledgeBase.ExpressionImageGenerator 94.4% 81.5%
Kagura.Infrastructure.KnowledgeBase.ImageSharpCropper 100% 100%
Kagura.Infrastructure.KnowledgeBase.LocationImageGenerator 97.6% 75%
Kagura.Infrastructure.KnowledgeBase.LocationVariantImageGenerator 95.7% 75%
Kagura.Infrastructure.KnowledgeBase.OutfitImageGenerator 97% 85.2%
Kagura.Infrastructure.KnowledgeBase.RegionMaskRasterizer 98.2% 95.8%
Kagura.Infrastructure.KnowledgeBase.SpriteEnrichment 91.1% 81.2%
Kagura.Infrastructure.Llm.LlmGateway 100% 100%
Kagura.Infrastructure.Notifications.InProcessDomainChangedBus 100% 100%
Kagura.Infrastructure.Persistence.Configurations.AppSettingConfiguration 100%
Kagura.Infrastructure.Persistence.Configurations.CgCastMemberConfiguration 100%
Kagura.Infrastructure.Persistence.Configurations.CgCastOverrideConfiguratio
n
100%
Kagura.Infrastructure.Persistence.Configurations.CgGenerationConfiguration 100%
Kagura.Infrastructure.Persistence.Configurations.CgSetConfiguration 100%
Kagura.Infrastructure.Persistence.Configurations.CgVariationConfiguration 100%
Kagura.Infrastructure.Persistence.Configurations.ChangeLogEntryConfiguratio
n
100%
Kagura.Infrastructure.Persistence.Configurations.ChapterConfiguration 100%
Kagura.Infrastructure.Persistence.Configurations.CharacterConfiguration 100%
Kagura.Infrastructure.Persistence.Configurations.EmotionConfiguration 100%
Kagura.Infrastructure.Persistence.Configurations.EntryConfiguration 100%
Kagura.Infrastructure.Persistence.Configurations.ExpressionConfiguration 100%
Kagura.Infrastructure.Persistence.Configurations.JsonColumnMapper 100%
Kagura.Infrastructure.Persistence.Configurations.LinkConfiguration 100%
Kagura.Infrastructure.Persistence.Configurations.LocationConfiguration 100%
Kagura.Infrastructure.Persistence.Configurations.LocationVariantConfigurati
on
100%
Kagura.Infrastructure.Persistence.Configurations.LoreEntryConfiguration 100%
Kagura.Infrastructure.Persistence.Configurations.OutfitConfiguration 100%
Kagura.Infrastructure.Persistence.Configurations.ProjectConfiguration 100%
Kagura.Infrastructure.Persistence.Configurations.RelationshipConfiguration 100%
Kagura.Infrastructure.Persistence.Configurations.SceneConfiguration 100%
Kagura.Infrastructure.Persistence.Configurations.SceneStepConfiguration 100%
Kagura.Infrastructure.Persistence.Configurations.SkillConfiguration 100%
Kagura.Infrastructure.Persistence.Configurations.TimelineEventConfiguration 100%
Kagura.Infrastructure.Persistence.Converters.UtcTicksConverter 100%
Kagura.Infrastructure.Persistence.KaguraDbContext 83.3% 88%
Kagura.Infrastructure.Persistence.KaguraDbContextFactory 0%
Kagura.Infrastructure.Persistence.Migrations.AddAppSettings 99.3%
Kagura.Infrastructure.Persistence.Migrations.AddCgCastMembers 99.7%
Kagura.Infrastructure.Persistence.Migrations.AddCgSets 99.6%
Kagura.Infrastructure.Persistence.Migrations.AddCgVariations 99.5%
Kagura.Infrastructure.Persistence.Migrations.AddChangeLogUndoFlag 96.8%
Kagura.Infrastructure.Persistence.Migrations.AddChapters 99.5%
Kagura.Infrastructure.Persistence.Migrations.AddChapterStoryBeats 99.3%
Kagura.Infrastructure.Persistence.Migrations.AddCharacterAttributeTuning 99.4%
Kagura.Infrastructure.Persistence.Migrations.AddCharacterBaseAppearance 98.4%
Kagura.Infrastructure.Persistence.Migrations.AddCharacterBaseImage 99%
Kagura.Infrastructure.Persistence.Migrations.AddCharacterBaseImageTags 99.6%
Kagura.Infrastructure.Persistence.Migrations.AddCharacterBodyAttributes 99.1%
Kagura.Infrastructure.Persistence.Migrations.AddCharacterFraming 99.4%
Kagura.Infrastructure.Persistence.Migrations.AddCharacterHeight 99.4%
Kagura.Infrastructure.Persistence.Migrations.AddCharacterProfile 92.9%
Kagura.Infrastructure.Persistence.Migrations.AddCharacters 98.7%
Kagura.Infrastructure.Persistence.Migrations.AddCharacterTier 99.4%
Kagura.Infrastructure.Persistence.Migrations.AddCharacterVoiceConfigs 99.4%
Kagura.Infrastructure.Persistence.Migrations.AddCharacterVoiceProviderId 99.5%
Kagura.Infrastructure.Persistence.Migrations.AddEmotions 99.4%
Kagura.Infrastructure.Persistence.Migrations.AddEstablishingVariation 99.5%
Kagura.Infrastructure.Persistence.Migrations.AddExpressions 99.5%
Kagura.Infrastructure.Persistence.Migrations.AddGraphEntryAndLink 97.7%
Kagura.Infrastructure.Persistence.Migrations.AddInheritedTagStrengths 98.7%
Kagura.Infrastructure.Persistence.Migrations.AddLocationBaseImage 99.1%
Kagura.Infrastructure.Persistence.Migrations.AddLocationBaseTags 99.1%
Kagura.Infrastructure.Persistence.Migrations.AddLocationHierarchy 96.6%
Kagura.Infrastructure.Persistence.Migrations.AddLocations 98.9%
Kagura.Infrastructure.Persistence.Migrations.AddLocationVariantImage 99.3%
Kagura.Infrastructure.Persistence.Migrations.AddLocationVariants 99.4%
Kagura.Infrastructure.Persistence.Migrations.AddLocationVariantTags 98.8%
Kagura.Infrastructure.Persistence.Migrations.AddLoreEntries 99%
Kagura.Infrastructure.Persistence.Migrations.AddLoreEntryTables 97.8%
Kagura.Infrastructure.Persistence.Migrations.AddOutfitClothingTags 99.1%
Kagura.Infrastructure.Persistence.Migrations.AddOutfitDisabledInheritedTags 99.1%
Kagura.Infrastructure.Persistence.Migrations.AddOutfitFaceRegion 98.7%
Kagura.Infrastructure.Persistence.Migrations.AddOutfitImage 99.1%
Kagura.Infrastructure.Persistence.Migrations.AddOutfitReferenceTuning 99.2%
Kagura.Infrastructure.Persistence.Migrations.AddOutfits 99.4%
Kagura.Infrastructure.Persistence.Migrations.AddOutfitUseBaseImageReference 99.4%
Kagura.Infrastructure.Persistence.Migrations.AddPerRecordStyleReferenceTuni
ng
97.1%
Kagura.Infrastructure.Persistence.Migrations.AddProjectAssistantMemory 99.4%
Kagura.Infrastructure.Persistence.Migrations.AddProjectDescription 98.1%
Kagura.Infrastructure.Persistence.Migrations.AddProjectStyleReference 99%
Kagura.Infrastructure.Persistence.Migrations.AddProjectStyleSource 99.2%
Kagura.Infrastructure.Persistence.Migrations.AddRelationships 99.2%
Kagura.Infrastructure.Persistence.Migrations.AddSceneMetadata 97.3%
Kagura.Infrastructure.Persistence.Migrations.AddScenes 99.5%
Kagura.Infrastructure.Persistence.Migrations.AddSceneSteps 99.5%
Kagura.Infrastructure.Persistence.Migrations.AddSceneStepStage 99%
Kagura.Infrastructure.Persistence.Migrations.AddSceneStepVoice 99.4%
Kagura.Infrastructure.Persistence.Migrations.AddSkills 99.6%
Kagura.Infrastructure.Persistence.Migrations.AddSoftDeleteAndChangeLog 90.3%
Kagura.Infrastructure.Persistence.Migrations.AddStageViews 98.3%
Kagura.Infrastructure.Persistence.Migrations.AddTimelineEvents 99.2%
Kagura.Infrastructure.Persistence.Migrations.CgRetouchScope 99.4%
Kagura.Infrastructure.Persistence.Migrations.CgVariationMask 99.6%
Kagura.Infrastructure.Persistence.Migrations.CharacterPreviewImage 99.3%
Kagura.Infrastructure.Persistence.Migrations.InitialCreate 94.4%
Kagura.Infrastructure.Persistence.Migrations.KaguraDbContextModelSnapshot 100%
Kagura.Infrastructure.Persistence.Migrations.LocationPreviewImage 99.3%
Kagura.Infrastructure.Persistence.Migrations.MultiFaceRegions 98.2%
Kagura.Infrastructure.Persistence.Migrations.ReferenceStrengthDefault 98.8%
Kagura.Infrastructure.Projects.EfProjectStore 93.5% 71.4%
Kagura.Infrastructure.Projects.FileSystemProjectAssetStore 94.2% 75.4%
Kagura.Infrastructure.Settings.EfAppSettingsStore 100% 100%
Kagura.Infrastructure.Settings.NovelAiGateway 61.7% 95%
Kagura.Infrastructure.Settings.OpenRouterGateway 85% 79.4%
Kagura.Infrastructure.Settings.SpriteRequestMapper 100% 100%
Kagura.Infrastructure.Tags.SqliteTagSearch 97.9% 87.9%
Kagura.Infrastructure.Tags.TagDatabaseOptions 100%
Kagura.Infrastructure.Tts.FishAudioTtsProvider 87.9% 58.6%
Kagura.Infrastructure.Tts.OpenAiCompatibleTtsProvider 87.5% 54.5%
Kagura.Infrastructure.Tts.PocketTtsProvider 76.4% 69%
Kagura.Infrastructure.Tts.Qwen3TtsProvider 87.3% 66.6%
Kagura.Infrastructure.Tts.SceneStepAudioGenerator 92.5% 70.6%
Kagura.Infrastructure.Tts.TtsProviderRegistry 100%
Kagura.Infrastructure.Tts.VoicePreviewGenerator 91.3% 67.8%
Kagura.Infrastructure.VisualNovel.EfChapterStore 93.7% 75%
Kagura.Infrastructure.VisualNovel.EfSceneStepStore 91.8% 66.6%
Kagura.Infrastructure.VisualNovel.EfSceneStore 93.7% 75%
System.Text.RegularExpressions.Generated 83.4% 68%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FFD7A84EAF2E5F7B
C689CA5BBE6D1849B2CA79581BBB07D40636D85790C0E51A9__ArtifactTimestampRegex_2
81.9% 62.8%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FFD7A84EAF2E5F7B
C689CA5BBE6D1849B2CA79581BBB07D40636D85790C0E51A9__ProjectRoute_0
88.5% 80.4%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FFD7A84EAF2E5F7B
C689CA5BBE6D1849B2CA79581BBB07D40636D85790C0E51A9__TabQuery_1
80.7% 62.5%
Kagura.Kernel - 90%
Name Line Branch
Kagura.Kernel 90% 75%
Kagura.Kernel.Err`1 100%
Kagura.Kernel.Ok`1 100%
Kagura.Kernel.Result`1 87.5% 75%
Kagura.Server - 82%
Name Line Branch
Kagura.Server 82% 75%
Kagura.Server.Components.App 100%
Kagura.Server.Components.Layout.MainLayout 100%
Kagura.Server.Components.Pages.Error 100% 50%
Kagura.Server.Components.Pages.Gate 100% 100%
Kagura.Server.Security.AccessGate 100% 83.3%
Kagura.Server.Security.AccessSecret 100% 100%
Program 75.6% 71.4%
Kagura.UseCases - 95.7%
Name Line Branch
Kagura.UseCases 95.7% 80.4%
Kagura.UseCases.Assistant.AssistantContext 100%
Kagura.UseCases.Assistant.AssistantEntry 100%
Kagura.UseCases.Assistant.AssistantEvent 100%
Kagura.UseCases.Assistant.ConversationSnapshot 100%
Kagura.UseCases.Assistant.ListSkills 100%
Kagura.UseCases.Assistant.MemoryDocument 89.1% 75%
Kagura.UseCases.Assistant.MemoryOperation 100%
Kagura.UseCases.Assistant.ReviewDue 100% 100%
Kagura.UseCases.Assistant.SaveCreatorProfile 75% 50%
Kagura.UseCases.Assistant.SaveProjectAssistantMemory 80% 50%
Kagura.UseCases.Assistant.SaveSkill 89.7% 77.2%
Kagura.UseCases.Assistant.SkillDto 75%
Kagura.UseCases.DependencyInjection 100%
Kagura.UseCases.Diagnostics.DatabaseSnapshot 100%
Kagura.UseCases.Diagnostics.DownloadDatabase 100%
Kagura.UseCases.Diagnostics.EstablishingBackfill 97.4% 94.4%
Kagura.UseCases.Diagnostics.SeedDevData 100% 100%
Kagura.UseCases.Emotions.CreateEmotion 100% 66.6%
Kagura.UseCases.Emotions.DeleteEmotion 100% 100%
Kagura.UseCases.Emotions.EmotionDto 91.6%
Kagura.UseCases.Emotions.ListEmotions 100%
Kagura.UseCases.Emotions.UpdateEmotion 100% 50%
Kagura.UseCases.Generation.Activity`1 100% 50%
Kagura.UseCases.Generation.ActivityChanged 100%
Kagura.UseCases.Generation.ActivityOutcome 100%
Kagura.UseCases.Generation.ActivityProgress 100%
Kagura.UseCases.Generation.ActivityView 91.6%
Kagura.UseCases.Generation.GeneratedImage 100%
Kagura.UseCases.Generation.GenerationCanvas 100% 100%
Kagura.UseCases.Generation.GenerationSubject 100%
Kagura.UseCases.Generation.Img2ImgSource 100%
Kagura.UseCases.Generation.InpaintSource 100%
Kagura.UseCases.Generation.JobResult`1 100%
Kagura.UseCases.Generation.LineageReference 100%
Kagura.UseCases.Generation.SpriteGenerationSpec 100%
Kagura.UseCases.Generation.StyleReference 100%
Kagura.UseCases.Graph.EdgeGroup 100%
Kagura.UseCases.Graph.FindLinkTargets 100%
Kagura.UseCases.Graph.GetNodeGraph 97.5% 78.5%
Kagura.UseCases.Graph.GraphEdgeView 100%
Kagura.UseCases.Graph.LinkNodes 100% 100%
Kagura.UseCases.Graph.NodeGraphView 100%
Kagura.UseCases.Graph.NodeSummary 100%
Kagura.UseCases.Graph.RemoveLink 100% 100%
Kagura.UseCases.Graph.RestoreLink 100% 100%
Kagura.UseCases.Graph.StructuralEdge 100%
Kagura.UseCases.Journal.ChangeRecordView 57.1%
Kagura.UseCases.Journal.DocumentRevision 100%
Kagura.UseCases.Journal.FieldChange 100%
Kagura.UseCases.Journal.GetDocumentHistory 100%
Kagura.UseCases.Journal.GetEntityHistory 100%
Kagura.UseCases.Journal.GetRevisionDiff 100% 50%
Kagura.UseCases.Journal.GetUndoStatus 100%
Kagura.UseCases.Journal.Redo 100% 100%
Kagura.UseCases.Journal.RevertDocument 100% 100%
Kagura.UseCases.Journal.RevertOutcome 100%
Kagura.UseCases.Journal.RevisionCoalescer 100% 100%
Kagura.UseCases.Journal.RevisionDiff 80% 50%
Kagura.UseCases.Journal.RevisionDiffBuilder 98.4% 86.5%
Kagura.UseCases.Journal.RowChange 100%
Kagura.UseCases.Journal.Undo 100% 100%
Kagura.UseCases.Journal.UndoOutcome 100%
Kagura.UseCases.Journal.UndoStatus 100%
Kagura.UseCases.KnowledgeBase.AddCgCastMember 90.4% 64.2%
Kagura.UseCases.KnowledgeBase.AdoptEmotions 100% 100%
Kagura.UseCases.KnowledgeBase.CgCastMemberDto 98.2% 100%
Kagura.UseCases.KnowledgeBase.CgCastResolver 96.1% 86.3%
Kagura.UseCases.KnowledgeBase.CgCastSlot 100% 100%
Kagura.UseCases.KnowledgeBase.CgCutoutPlan 100%
Kagura.UseCases.KnowledgeBase.CgCutoutPlanner 98.7% 97.2%
Kagura.UseCases.KnowledgeBase.CgEffectiveRender 100%
Kagura.UseCases.KnowledgeBase.CgGenerationDto 100% 100%
Kagura.UseCases.KnowledgeBase.CgPixelRect 100%
Kagura.UseCases.KnowledgeBase.CgRenderResolver 93.3% 80.5%
Kagura.UseCases.KnowledgeBase.CgScopeDiff 100%
Kagura.UseCases.KnowledgeBase.CgSetDto 89.4%
Kagura.UseCases.KnowledgeBase.CgVariationDto 97% 100%
Kagura.UseCases.KnowledgeBase.CharacterDto 98.4%
Kagura.UseCases.KnowledgeBase.CharacterSpriteContent 100%
Kagura.UseCases.KnowledgeBase.CreateCgSet 100%
Kagura.UseCases.KnowledgeBase.CreateCgVariation 90% 75%
Kagura.UseCases.KnowledgeBase.CreateCharacter 100%
Kagura.UseCases.KnowledgeBase.CreateLocation 100%
Kagura.UseCases.KnowledgeBase.CreateLocationVariant 100% 75%
Kagura.UseCases.KnowledgeBase.CreateLore 100%
Kagura.UseCases.KnowledgeBase.CreateOutfit 100% 75%
Kagura.UseCases.KnowledgeBase.CreateRelationship 93.3% 80%
Kagura.UseCases.KnowledgeBase.CreateTimelineEvent 100%
Kagura.UseCases.KnowledgeBase.DeleteCgCastMember 85.7% 50%
Kagura.UseCases.KnowledgeBase.DeleteCgGeneration 88.2% 66.6%
Kagura.UseCases.KnowledgeBase.DeleteCgSet 100% 100%
Kagura.UseCases.KnowledgeBase.DeleteCgVariation 90.9% 60%
Kagura.UseCases.KnowledgeBase.DeleteCharacter 100% 100%
Kagura.UseCases.KnowledgeBase.DeleteLocation 100% 100%
Kagura.UseCases.KnowledgeBase.DeleteLocationVariant 100% 100%
Kagura.UseCases.KnowledgeBase.DeleteLore 100% 100%
Kagura.UseCases.KnowledgeBase.DeleteOutfit 100% 100%
Kagura.UseCases.KnowledgeBase.DeleteRelationship 100% 50%
Kagura.UseCases.KnowledgeBase.DeleteTimelineEvent 100% 50%
Kagura.UseCases.KnowledgeBase.ExpressionView 100%
Kagura.UseCases.KnowledgeBase.FindParentCandidates 100% 50%
Kagura.UseCases.KnowledgeBase.GetCgSet 100% 66.6%
Kagura.UseCases.KnowledgeBase.GetCgVariation 100% 100%
Kagura.UseCases.KnowledgeBase.GetCharacter 100% 100%
Kagura.UseCases.KnowledgeBase.GetLocation 100% 100%
Kagura.UseCases.KnowledgeBase.GetLocationHierarchy 100%
Kagura.UseCases.KnowledgeBase.GetLocationVariant 100% 58.3%
Kagura.UseCases.KnowledgeBase.GetLore 100% 100%
Kagura.UseCases.KnowledgeBase.GetOutfit 100% 100%
Kagura.UseCases.KnowledgeBase.GetRelationshipsForCharacter 100%
Kagura.UseCases.KnowledgeBase.ListCgCastMembers 100% 100%
Kagura.UseCases.KnowledgeBase.ListCgGenerations 100% 50%
Kagura.UseCases.KnowledgeBase.ListCgImages 100% 87.5%
Kagura.UseCases.KnowledgeBase.ListCgSets 100% 66.6%
Kagura.UseCases.KnowledgeBase.ListCgVariations 100%
Kagura.UseCases.KnowledgeBase.ListCharacterImages 100% 92.8%
Kagura.UseCases.KnowledgeBase.ListCharacters 100%
Kagura.UseCases.KnowledgeBase.ListExpressions 100% 100%
Kagura.UseCases.KnowledgeBase.ListLocationImages 100% 90%
Kagura.UseCases.KnowledgeBase.ListLocations 100%
Kagura.UseCases.KnowledgeBase.ListLocationVariants 100%
Kagura.UseCases.KnowledgeBase.ListLore 100%
Kagura.UseCases.KnowledgeBase.ListOutfits 100%
Kagura.UseCases.KnowledgeBase.ListProjectAssets 100% 100%
Kagura.UseCases.KnowledgeBase.ListRelationships 100%
Kagura.UseCases.KnowledgeBase.ListTimeline 100%
Kagura.UseCases.KnowledgeBase.LocationDto 89.4%
Kagura.UseCases.KnowledgeBase.LocationHierarchyView 100%
Kagura.UseCases.KnowledgeBase.LocationPreviewSource 100%
Kagura.UseCases.KnowledgeBase.LocationVariantDto 92.3%
Kagura.UseCases.KnowledgeBase.LocationVariantEditorView 100%
Kagura.UseCases.KnowledgeBase.LoreDto 85.7%
Kagura.UseCases.KnowledgeBase.OpenCgGeneration 0% 0%
Kagura.UseCases.KnowledgeBase.OpenCharacterBaseSprite 100% 80%
Kagura.UseCases.KnowledgeBase.OpenCharacterPreview 88.8% 60%
Kagura.UseCases.KnowledgeBase.OpenExpressionSprite 92.3% 68.7%
Kagura.UseCases.KnowledgeBase.OpenLocationBackground 88.8% 70%
Kagura.UseCases.KnowledgeBase.OpenLocationPreview 88.8% 60%
Kagura.UseCases.KnowledgeBase.OpenLocationVariant 90.9% 75%
Kagura.UseCases.KnowledgeBase.OpenOutfitSprite 90.9% 75%
Kagura.UseCases.KnowledgeBase.OutfitDto 96.9%
Kagura.UseCases.KnowledgeBase.OutfitEditorView 100%
Kagura.UseCases.KnowledgeBase.OverrideCgCastMember 85.7% 62.5%
Kagura.UseCases.KnowledgeBase.PinCgGeneration 100% 50%
Kagura.UseCases.KnowledgeBase.PreviewSource 100%
Kagura.UseCases.KnowledgeBase.ProjectAssetView 100%
Kagura.UseCases.KnowledgeBase.PublishCgGeneration 100% 75%
Kagura.UseCases.KnowledgeBase.RelationshipDto 88%
Kagura.UseCases.KnowledgeBase.RelationshipEndpoint 100%
Kagura.UseCases.KnowledgeBase.RemoveCharacterPreview 75% 50%
Kagura.UseCases.KnowledgeBase.RemoveExpression 100% 100%
Kagura.UseCases.KnowledgeBase.RemoveLocationPreview 75% 50%
Kagura.UseCases.KnowledgeBase.ReorderCgCastMembers 100% 100%
Kagura.UseCases.KnowledgeBase.ReorderTimelineEvent 94.1% 87.5%
Kagura.UseCases.KnowledgeBase.ResetCgCastOverride 83.3% 75%
Kagura.UseCases.KnowledgeBase.ScopeCgCutout 93.3% 77.2%
Kagura.UseCases.KnowledgeBase.SetCgRetouchScope 100% 100%
Kagura.UseCases.KnowledgeBase.SetCgVariationMask 100% 100%
Kagura.UseCases.KnowledgeBase.SetCharacterPreview 80.7% 63.8%
Kagura.UseCases.KnowledgeBase.SetLocationParent 90.4% 81.2%
Kagura.UseCases.KnowledgeBase.SetLocationPreview 93.7% 85.7%
Kagura.UseCases.KnowledgeBase.SetOutfitFaceRegions 100% 50%
Kagura.UseCases.KnowledgeBase.TimelineEventDto 88.8%
Kagura.UseCases.KnowledgeBase.UpdateCgCastMember 90% 70%
Kagura.UseCases.KnowledgeBase.UpdateCgSet 100% 100%
Kagura.UseCases.KnowledgeBase.UpdateCgVariation 100% 100%
Kagura.UseCases.KnowledgeBase.UpdateCharacter 100% 100%
Kagura.UseCases.KnowledgeBase.UpdateLocation 100% 100%
Kagura.UseCases.KnowledgeBase.UpdateLocationVariant 100% 100%
Kagura.UseCases.KnowledgeBase.UpdateLore 100% 100%
Kagura.UseCases.KnowledgeBase.UpdateOutfit 100% 100%
Kagura.UseCases.KnowledgeBase.UpdateRelationship 100% 50%
Kagura.UseCases.KnowledgeBase.UpdateTimelineEvent 100% 50%
Kagura.UseCases.Llm.LlmStructuredRequest 100%
Kagura.UseCases.Notifications.DomainChanged 100%
Kagura.UseCases.Projects.ClearProjectStyleReference 100% 100%
Kagura.UseCases.Projects.CreateProject 100% 100%
Kagura.UseCases.Projects.DeleteProject 100% 100%
Kagura.UseCases.Projects.GetProject 100% 100%
Kagura.UseCases.Projects.ListProjects 100%
Kagura.UseCases.Projects.OpenProjectStyleReference 100% 83.3%
Kagura.UseCases.Projects.ProjectDto 100%
Kagura.UseCases.Projects.SetProjectStageView 100% 50%
Kagura.UseCases.Projects.SetProjectStyle 100% 85%
Kagura.UseCases.Projects.SetProjectStyleReference 100% 100%
Kagura.UseCases.Projects.StyleReferenceContent 100%
Kagura.UseCases.Projects.UpdateProject 100% 100%
Kagura.UseCases.Settings.AssistantReasoningEfforts 100% 83.3%
Kagura.UseCases.Settings.CheckNovelAiToken 100% 50%
Kagura.UseCases.Settings.GenerationDefaultTagsJson 100% 100%
Kagura.UseCases.Settings.GetNovelAiSettings 100%
Kagura.UseCases.Settings.GetOpenRouterSettings 100% 100%
Kagura.UseCases.Settings.ListOpenRouterModels 100%
Kagura.UseCases.Settings.ModelReasoningSupport 100%
Kagura.UseCases.Settings.NovelAiModelOption 100%
Kagura.UseCases.Settings.NovelAiSettingsView 100%
Kagura.UseCases.Settings.OpenRouterModelOption 100%
Kagura.UseCases.Settings.OpenRouterSettingsView 100%
Kagura.UseCases.Settings.SaveGenerationDefaultTags 100%
Kagura.UseCases.Settings.SaveNovelAiModel 100%
Kagura.UseCases.Settings.SaveNovelAiToken 100% 100%
Kagura.UseCases.Settings.SaveOpenRouterKey 100% 100%
Kagura.UseCases.Settings.SaveOpenRouterModel 100%
Kagura.UseCases.Settings.SaveOpenRouterReasoningEffort 100%
Kagura.UseCases.Settings.SettingKeys 87.5% 75%
Kagura.UseCases.Tags.SimilarTag 100%
Kagura.UseCases.Tags.TagCategoryCount 100%
Kagura.UseCases.Tags.TagDetails 100%
Kagura.UseCases.Tags.TagResolution 100%
Kagura.UseCases.Tags.TagSearchFilter 100%
Kagura.UseCases.Tags.TagSuggestion 100%
Kagura.UseCases.Tags.TagSummary 83.3%
Kagura.UseCases.Tts.AudioContentTypes 62.5% 62.5%
Kagura.UseCases.Tts.CharacterVoiceConfig 100%
Kagura.UseCases.Tts.CheckTtsConnection 100% 100%
Kagura.UseCases.Tts.GeneratedAudio 100%
Kagura.UseCases.Tts.GetTtsSettings 100% 100%
Kagura.UseCases.Tts.ListTtsVoices 80% 50%
Kagura.UseCases.Tts.OpenSceneStepAudio 77.7% 50%
Kagura.UseCases.Tts.OpenVoiceClipByToken 92.3% 91.6%
Kagura.UseCases.Tts.SaveTtsProviderField 94.4% 88.8%
Kagura.UseCases.Tts.SceneStepAudioContent 100%
Kagura.UseCases.Tts.SetCharacterVoiceClip 88.8% 58.3%
Kagura.UseCases.Tts.TtsFieldView 100%
Kagura.UseCases.Tts.TtsProviderDescriptor 100%
Kagura.UseCases.Tts.TtsProviderView 100%
Kagura.UseCases.Tts.TtsSettingField 100%
Kagura.UseCases.Tts.TtsSettingsView 100%
Kagura.UseCases.Tts.TtsVoice 100%
Kagura.UseCases.Tts.TtsVoiceCapabilities 83.3%
Kagura.UseCases.Tts.TtsVoiceHandle 100%
Kagura.UseCases.Tts.VoiceReferenceClip 100%
Kagura.UseCases.VisualNovel.AddSceneStep 90% 50%
Kagura.UseCases.VisualNovel.ChapterDto 89.4%
Kagura.UseCases.VisualNovel.CreateChapter 100%
Kagura.UseCases.VisualNovel.CreateScene 100% 100%
Kagura.UseCases.VisualNovel.DeleteChapter 100% 50%
Kagura.UseCases.VisualNovel.DeleteScene 100% 50%
Kagura.UseCases.VisualNovel.DeleteSceneStep 100% 50%
Kagura.UseCases.VisualNovel.GetChapter 100% 100%
Kagura.UseCases.VisualNovel.GetPlayerScript 100% 70%
Kagura.UseCases.VisualNovel.GetScene 100% 100%
Kagura.UseCases.VisualNovel.GetSceneCast 100% 100%
Kagura.UseCases.VisualNovel.GetSceneStageOptions 100% 100%
Kagura.UseCases.VisualNovel.ListChapters 100%
Kagura.UseCases.VisualNovel.ListScenes 100%
Kagura.UseCases.VisualNovel.ListSceneSteps 100%
Kagura.UseCases.VisualNovel.PlayerSceneDto 100% 100%
Kagura.UseCases.VisualNovel.PlayerScriptDto 100%
Kagura.UseCases.VisualNovel.ReorderChapters 100%
Kagura.UseCases.VisualNovel.ReorderScenes 100%
Kagura.UseCases.VisualNovel.ReorderSceneSteps 100%
Kagura.UseCases.VisualNovel.SceneCastMember 100%
Kagura.UseCases.VisualNovel.SceneDto 96.5%
Kagura.UseCases.VisualNovel.SceneStageOptions 100%
Kagura.UseCases.VisualNovel.SceneStepDto 92.5%
Kagura.UseCases.VisualNovel.SetSceneStepStage 100% 50%
Kagura.UseCases.VisualNovel.StageBackgroundOption 100%
Kagura.UseCases.VisualNovel.StageCastOption 100%
Kagura.UseCases.VisualNovel.StageExpressionOption 100%
Kagura.UseCases.VisualNovel.StageOutfitOption 100%
Kagura.UseCases.VisualNovel.UpdateChapter 100% 50%
Kagura.UseCases.VisualNovel.UpdateScene 100% 50%
Kagura.UseCases.VisualNovel.UpdateSceneStep 100% 50%
<!-- coverage-comment --> # Summary <details open><summary>Summary</summary> ||| |:---|:---| | Generated on: | 08/21/2026 - 14:23:17 | | Coverage date: | 08/21/2026 - 14:21:38 - 08/21/2026 - 14:23:12 | | Parser: | MultiReport (3x Cobertura) | | Assemblies: | 6 | | Classes: | 1256 | | Files: | 649 | | **Line coverage:** | 96.3% (62613 of 64989) | | Covered lines: | 62613 | | Uncovered lines: | 2376 | | Coverable lines: | 64989 | | Total lines: | 98003 | | **Branch coverage:** | 77.8% (6280 of 8065) | | Covered branches: | 6280 | | Total branches: | 8065 | | **Method coverage:** | [Feature is only available for sponsors](https://reportgenerator.io/pro) | </details> ## Coverage <details><summary>Kagura.BlazorAdapter - 88.8%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Kagura.BlazorAdapter**|**88.8%**|**78.5%**| |Kagura.BlazorAdapter.Assistant.AssistantCapabilityChecked|100%|| |Kagura.BlazorAdapter.Assistant.AssistantChangeMade|100%|| |Kagura.BlazorAdapter.Assistant.AssistantConversationHydrated|100%|| |Kagura.BlazorAdapter.Assistant.AssistantEffects|62.5%|100%| |Kagura.BlazorAdapter.Assistant.AssistantFailed|100%|| |Kagura.BlazorAdapter.Assistant.AssistantNoticed|100%|| |Kagura.BlazorAdapter.Assistant.AssistantPanel|90.6%|85.8%| |Kagura.BlazorAdapter.Assistant.AssistantReducers|100%|75%| |Kagura.BlazorAdapter.Assistant.AssistantSaid|100%|| |Kagura.BlazorAdapter.Assistant.AssistantState|100%|| |Kagura.BlazorAdapter.Assistant.AssistantToolCalled|100%|| |Kagura.BlazorAdapter.Assistant.AssistantUserSaid|100%|| |Kagura.BlazorAdapter.BlazorAdapterAssembly|100%|| |Kagura.BlazorAdapter.CmField|100%|75%| |Kagura.BlazorAdapter.Connections.AddLinkModal|88.5%|81.5%| |Kagura.BlazorAdapter.Connections.ConnectionsEffects|95.4%|80%| |Kagura.BlazorAdapter.Connections.ConnectionsFailed|100%|| |Kagura.BlazorAdapter.Connections.ConnectionsLoaded|100%|| |Kagura.BlazorAdapter.Connections.ConnectionsPanel|100%|95.1%| |Kagura.BlazorAdapter.Connections.ConnectionsReducers|100%|75%| |Kagura.BlazorAdapter.Connections.ConnectionsState|90%|| |Kagura.BlazorAdapter.Connections.KindIcon|100%|| |Kagura.BlazorAdapter.Connections.LinkRequested|100%|| |Kagura.BlazorAdapter.Connections.LinkTargetsFound|100%|| |Kagura.BlazorAdapter.Connections.LoadConnections|100%|| |Kagura.BlazorAdapter.Connections.NodeKindIcons|100%|| |Kagura.BlazorAdapter.Connections.RemoveLinkRequested|100%|| |Kagura.BlazorAdapter.Connections.SearchLinkTargets|100%|| |Kagura.BlazorAdapter.Design|0%|0%| |Kagura.BlazorAdapter.Diagnostics.AppErrorBoundary|100%|| |Kagura.BlazorAdapter.Diagnostics.CircuitError|100%|| |Kagura.BlazorAdapter.Diagnostics.CircuitErrorPanel|100%|| |Kagura.BlazorAdapter.Diagnostics.CircuitErrorSink|100%|85.7%| |Kagura.BlazorAdapter.Diagnostics.KaguraStoreInitializer|92.3%|66.6%| |Kagura.BlazorAdapter.EditorComponentsDemo|0%|| |Kagura.BlazorAdapter.FileUploadDemo|0%|| |Kagura.BlazorAdapter.Generation.ActivityQueueBridge|87.5%|50%| |Kagura.BlazorAdapter.Generation.CancelActivityRequested|100%|| |Kagura.BlazorAdapter.Generation.GenerationQueueEffects|100%|| |Kagura.BlazorAdapter.Generation.GenerationQueueLoaded|100%|| |Kagura.BlazorAdapter.Generation.GenerationQueuePage|100%|100%| |Kagura.BlazorAdapter.Generation.GenerationQueueReducers|100%|| |Kagura.BlazorAdapter.Generation.GenerationQueueState|100%|| |Kagura.BlazorAdapter.Generation.GenerationStatusBar|100%|95.4%| |Kagura.BlazorAdapter.Generation.RemoveActivityRequested|100%|| |Kagura.BlazorAdapter.History.DiffValue|100%|87.5%| |Kagura.BlazorAdapter.History.DocumentHistoryEffects|90%|68.7%| |Kagura.BlazorAdapter.History.DocumentHistoryFailed|100%|| |Kagura.BlazorAdapter.History.DocumentHistoryLoaded|100%|| |Kagura.BlazorAdapter.History.DocumentHistoryPanel|79.3%|75%| |Kagura.BlazorAdapter.History.DocumentHistoryReducers|95%|83.3%| |Kagura.BlazorAdapter.History.DocumentHistoryState|100%|| |Kagura.BlazorAdapter.History.LoadDocumentHistory|100%|| |Kagura.BlazorAdapter.History.RevertCompleted|100%|| |Kagura.BlazorAdapter.History.RevertRequested|100%|| |Kagura.BlazorAdapter.History.RevisionDiffLoaded|100%|| |Kagura.BlazorAdapter.History.SelectRevision|100%|| |Kagura.BlazorAdapter.KnowledgeBase.AddCgCastMemberRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.AdoptEmotionsRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.BaseSpriteFailed|100%|| |Kagura.BlazorAdapter.KnowledgeBase.BaseSpriteGenerated|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgCastMemberAdded|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgCastMemberCard|77.6%|69.3%| |Kagura.BlazorAdapter.KnowledgeBase.CgCastMemberDeleted|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgCastMemberSaved|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgCastOptionsLoaded|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgCastPanel|96.1%|77.2%| |Kagura.BlazorAdapter.KnowledgeBase.CgEditorCapabilityChecked|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgEditorEffects|93.1%|81.4%| |Kagura.BlazorAdapter.KnowledgeBase.CgEditorFailed|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgEditorLoaded|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgEditorNotFound|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgEditorPage|78.4%|82.4%| |Kagura.BlazorAdapter.KnowledgeBase.CgEditorReducers|98.4%|81.2%| |Kagura.BlazorAdapter.KnowledgeBase.CgEditorState|100%|96.1%| |Kagura.BlazorAdapter.KnowledgeBase.CgGenerationPinned|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgMaskSaved|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgOutfitOptionsLoaded|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgRetouchScopeSaved|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgSceneTagsSaved|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgScopeApplied|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgSetCreated|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgSetDeleted|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgSetEditorEffects|100%|100%| |Kagura.BlazorAdapter.KnowledgeBase.CgSetEditorLoaded|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgSetEditorNotFound|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgSetEditorPage|87.6%|67.3%| |Kagura.BlazorAdapter.KnowledgeBase.CgSetEditorReducers|100%|85.7%| |Kagura.BlazorAdapter.KnowledgeBase.CgSetEditorState|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgSetGallery|96.5%|78.1%| |Kagura.BlazorAdapter.KnowledgeBase.CgSetOperationFailed|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgSetSaved|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgSetsEffects|94.1%|75%| |Kagura.BlazorAdapter.KnowledgeBase.CgSetsLoaded|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgSetsPage|95.4%|95.4%| |Kagura.BlazorAdapter.KnowledgeBase.CgSetsReducers|100%|100%| |Kagura.BlazorAdapter.KnowledgeBase.CgSetsState|100%|100%| |Kagura.BlazorAdapter.KnowledgeBase.CgSourcePicked|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgVariationCreated|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgVariationDeleted|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgVariationGenerated|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgVariationSaved|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgVariationsEffects|100%|100%| |Kagura.BlazorAdapter.KnowledgeBase.CgVariationsFailed|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgVariationsLoaded|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgVariationsReducers|100%|100%| |Kagura.BlazorAdapter.KnowledgeBase.CgVariationsState|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CharacterBaseSprite|91.3%|90%| |Kagura.BlazorAdapter.KnowledgeBase.CharacterCreated|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CharacterDeleted|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CharacterEditorEffects|100%|100%| |Kagura.BlazorAdapter.KnowledgeBase.CharacterEditorLoaded|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CharacterEditorNotFound|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CharacterEditorPage|92.5%|81.2%| |Kagura.BlazorAdapter.KnowledgeBase.CharacterEditorReducers|100%|92.8%| |Kagura.BlazorAdapter.KnowledgeBase.CharacterEditorState|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CharacterImagesLoaded|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CharacterOperationFailed|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CharacterOutfits|94.2%|83.3%| |Kagura.BlazorAdapter.KnowledgeBase.CharacterPreview|88.1%|91.3%| |Kagura.BlazorAdapter.KnowledgeBase.CharacterPreviewEffects|62.9%|25%| |Kagura.BlazorAdapter.KnowledgeBase.CharacterPreviewFailed|0%|| |Kagura.BlazorAdapter.KnowledgeBase.CharacterPreviewReducers|83.3%|50%| |Kagura.BlazorAdapter.KnowledgeBase.CharacterPreviewSaved|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CharacterPreviewState|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CharacterSaved|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CharactersEffects|94.1%|75%| |Kagura.BlazorAdapter.KnowledgeBase.CharactersLoaded|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CharactersPage|95.8%|90.9%| |Kagura.BlazorAdapter.KnowledgeBase.CharacterSpriteEffects|86.3%|100%| |Kagura.BlazorAdapter.KnowledgeBase.CharacterSpriteReducers|100%|75%| |Kagura.BlazorAdapter.KnowledgeBase.CharacterSpriteState|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CharactersReducers|100%|87.5%| |Kagura.BlazorAdapter.KnowledgeBase.CharactersState|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CharacterTiers|100%|50%| |Kagura.BlazorAdapter.KnowledgeBase.CharacterVoiceContextLoaded|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CharacterVoiceEffects|77.7%|80%| |Kagura.BlazorAdapter.KnowledgeBase.CharacterVoiceFailed|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CharacterVoicePanel|95.3%|81%| |Kagura.BlazorAdapter.KnowledgeBase.CharacterVoiceReducers|100%|100%| |Kagura.BlazorAdapter.KnowledgeBase.CharacterVoicesFailed|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CharacterVoicesLoaded|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CharacterVoiceState|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CreateCgSetFailed|0%|| |Kagura.BlazorAdapter.KnowledgeBase.CreateCgSetRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CreateCgVariationRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CreateCharacterFailed|0%|| |Kagura.BlazorAdapter.KnowledgeBase.CreateCharacterRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CreateLocationFailed|0%|| |Kagura.BlazorAdapter.KnowledgeBase.CreateLocationRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CreateLocationVariantRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CreateLoreFailed|0%|| |Kagura.BlazorAdapter.KnowledgeBase.CreateLoreRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CreateOutfitRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CreateRelationshipRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CreateTimelineEventRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.DeleteCgCastMemberRequested|0%|| |Kagura.BlazorAdapter.KnowledgeBase.DeleteCgGenerationRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.DeleteCgSetRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.DeleteCgVariationRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.DeleteCharacterRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.DeleteLocationRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.DeleteLocationVariantRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.DeleteLoreRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.DeleteOutfitRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.DeleteRelationshipRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.DeleteTimelineEventRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.ExpressionCapabilityChecked|100%|| |Kagura.BlazorAdapter.KnowledgeBase.ExpressionGenerated|100%|| |Kagura.BlazorAdapter.KnowledgeBase.ExpressionGenerationFailed|100%|| |Kagura.BlazorAdapter.KnowledgeBase.ExpressionRemoved|100%|| |Kagura.BlazorAdapter.KnowledgeBase.ExpressionsEffects|87.9%|69.2%| |Kagura.BlazorAdapter.KnowledgeBase.ExpressionsFailed|0%|| |Kagura.BlazorAdapter.KnowledgeBase.ExpressionsLoaded|100%|| |Kagura.BlazorAdapter.KnowledgeBase.ExpressionsReducers|85.7%|43.7%| |Kagura.BlazorAdapter.KnowledgeBase.ExpressionsState|100%|| |Kagura.BlazorAdapter.KnowledgeBase.GenerateAllExpressions|100%|| |Kagura.BlazorAdapter.KnowledgeBase.GenerateBaseSprite|100%|| |Kagura.BlazorAdapter.KnowledgeBase.GenerateCgVariation|100%|| |Kagura.BlazorAdapter.KnowledgeBase.GenerateExpression|100%|| |Kagura.BlazorAdapter.KnowledgeBase.GenerateLocationBackground|100%|| |Kagura.BlazorAdapter.KnowledgeBase.GenerateLocationVariantImage|100%|| |Kagura.BlazorAdapter.KnowledgeBase.GenerateOutfitSprite|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LabeledEntryMapping|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LoadCgCastOptions|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LoadCgEditor|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LoadCgOutfitOptions|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LoadCgSet|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LoadCgSets|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LoadCgVariations|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LoadCharacter|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LoadCharacterImages|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LoadCharacters|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LoadCharacterVoiceContext|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LoadCharacterVoices|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LoadExpressions|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LoadLocation|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LoadLocationHierarchy|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LoadLocationImages|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LoadLocations|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LoadLocationVariant|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LoadLocationVariants|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LoadLore|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LoadLoreEntry|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LoadOutfit|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LoadOutfits|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LoadRelationshipCast|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LoadRelationships|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LoadTimeline|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LocationBackground|91.3%|90%| |Kagura.BlazorAdapter.KnowledgeBase.LocationBackgroundCapabilityChecked|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LocationBackgroundEffects|86.3%|100%| |Kagura.BlazorAdapter.KnowledgeBase.LocationBackgroundFailed|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LocationBackgroundGenerated|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LocationBackgroundReducers|100%|75%| |Kagura.BlazorAdapter.KnowledgeBase.LocationBackgroundState|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LocationCreated|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LocationDeleted|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LocationEditorEffects|100%|100%| |Kagura.BlazorAdapter.KnowledgeBase.LocationEditorLoaded|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LocationEditorNotFound|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LocationEditorPage|88.6%|75%| |Kagura.BlazorAdapter.KnowledgeBase.LocationEditorReducers|86.9%|71.4%| |Kagura.BlazorAdapter.KnowledgeBase.LocationEditorState|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LocationHierarchyEffects|100%|100%| |Kagura.BlazorAdapter.KnowledgeBase.LocationHierarchyFailed|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LocationHierarchyLoaded|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LocationHierarchyReducers|100%|75%| |Kagura.BlazorAdapter.KnowledgeBase.LocationHierarchyState|100%|100%| |Kagura.BlazorAdapter.KnowledgeBase.LocationImagesLoaded|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LocationOperationFailed|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LocationPreview|91%|88.6%| |Kagura.BlazorAdapter.KnowledgeBase.LocationPreviewEffects|62.9%|25%| |Kagura.BlazorAdapter.KnowledgeBase.LocationPreviewFailed|0%|| |Kagura.BlazorAdapter.KnowledgeBase.LocationPreviewReducers|83.3%|50%| |Kagura.BlazorAdapter.KnowledgeBase.LocationPreviewSaved|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LocationPreviewState|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LocationSaved|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LocationsEffects|94.1%|75%| |Kagura.BlazorAdapter.KnowledgeBase.LocationsLoaded|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LocationsPage|95.4%|95.4%| |Kagura.BlazorAdapter.KnowledgeBase.LocationsReducers|100%|100%| |Kagura.BlazorAdapter.KnowledgeBase.LocationsState|100%|100%| |Kagura.BlazorAdapter.KnowledgeBase.LocationVariantEditorEffects|100%|100%| |Kagura.BlazorAdapter.KnowledgeBase.LocationVariantEditorFailed|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LocationVariantEditorLoaded|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LocationVariantEditorNotFound|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LocationVariantEditorPage|87%|74%| |Kagura.BlazorAdapter.KnowledgeBase.LocationVariantEditorReducers|100%|93.7%| |Kagura.BlazorAdapter.KnowledgeBase.LocationVariantEditorSaved|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LocationVariantEditorState|100%|100%| |Kagura.BlazorAdapter.KnowledgeBase.LocationVariantImage|93.1%|91.6%| |Kagura.BlazorAdapter.KnowledgeBase.LocationVariantImageCapabilityChecked|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LocationVariantImageEffects|86.3%|100%| |Kagura.BlazorAdapter.KnowledgeBase.LocationVariantImageFailed|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LocationVariantImageGenerated|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LocationVariantImageReducers|100%|75%| |Kagura.BlazorAdapter.KnowledgeBase.LocationVariantImageState|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LocationVariants|94.2%|79.1%| |Kagura.BlazorAdapter.KnowledgeBase.LocationVariantsEffects|96.4%|83.3%| |Kagura.BlazorAdapter.KnowledgeBase.LocationVariantsFailed|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LocationVariantsLoaded|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LocationVariantsReducers|100%|100%| |Kagura.BlazorAdapter.KnowledgeBase.LocationVariantsState|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LoreCategories|100%|50%| |Kagura.BlazorAdapter.KnowledgeBase.LoreCreated|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LoreDeleted|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LoreEditorEffects|96.6%|87.5%| |Kagura.BlazorAdapter.KnowledgeBase.LoreEditorLoaded|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LoreEditorNotFound|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LoreEditorPage|90.8%|75%| |Kagura.BlazorAdapter.KnowledgeBase.LoreEditorReducers|86.9%|71.4%| |Kagura.BlazorAdapter.KnowledgeBase.LoreEditorState|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LoreEffects|94.1%|75%| |Kagura.BlazorAdapter.KnowledgeBase.LoreLoaded|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LoreOperationFailed|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LorePage|80%|78.5%| |Kagura.BlazorAdapter.KnowledgeBase.LoreReducers|90.9%|87.5%| |Kagura.BlazorAdapter.KnowledgeBase.LoreSaved|100%|| |Kagura.BlazorAdapter.KnowledgeBase.LoreState|100%|100%| |Kagura.BlazorAdapter.KnowledgeBase.NewTimelineEvent|100%|| |Kagura.BlazorAdapter.KnowledgeBase.OutfitEditorEffects|96.4%|87.5%| |Kagura.BlazorAdapter.KnowledgeBase.OutfitEditorFailed|100%|| |Kagura.BlazorAdapter.KnowledgeBase.OutfitEditorLoaded|100%|| |Kagura.BlazorAdapter.KnowledgeBase.OutfitEditorNotFound|100%|| |Kagura.BlazorAdapter.KnowledgeBase.OutfitEditorPage|90.6%|75%| |Kagura.BlazorAdapter.KnowledgeBase.OutfitEditorReducers|100%|100%| |Kagura.BlazorAdapter.KnowledgeBase.OutfitEditorSaved|100%|| |Kagura.BlazorAdapter.KnowledgeBase.OutfitEditorState|100%|100%| |Kagura.BlazorAdapter.KnowledgeBase.OutfitExpressions|95.5%|92.8%| |Kagura.BlazorAdapter.KnowledgeBase.OutfitFaceRegion|88.7%|70.2%| |Kagura.BlazorAdapter.KnowledgeBase.OutfitsEffects|96.4%|83.3%| |Kagura.BlazorAdapter.KnowledgeBase.OutfitsFailed|100%|| |Kagura.BlazorAdapter.KnowledgeBase.OutfitsLoaded|100%|| |Kagura.BlazorAdapter.KnowledgeBase.OutfitSprite|92.5%|91.6%| |Kagura.BlazorAdapter.KnowledgeBase.OutfitSpriteCapabilityChecked|100%|| |Kagura.BlazorAdapter.KnowledgeBase.OutfitSpriteEffects|86.3%|100%| |Kagura.BlazorAdapter.KnowledgeBase.OutfitSpriteFailed|100%|| |Kagura.BlazorAdapter.KnowledgeBase.OutfitSpriteGenerated|100%|| |Kagura.BlazorAdapter.KnowledgeBase.OutfitSpriteReducers|100%|75%| |Kagura.BlazorAdapter.KnowledgeBase.OutfitSpriteState|100%|| |Kagura.BlazorAdapter.KnowledgeBase.OutfitsReducers|100%|100%| |Kagura.BlazorAdapter.KnowledgeBase.OutfitsState|100%|| |Kagura.BlazorAdapter.KnowledgeBase.OverrideCgCastMemberRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.ParentCandidatesFound|100%|| |Kagura.BlazorAdapter.KnowledgeBase.ParentPickerModal|84.6%|89.2%| |Kagura.BlazorAdapter.KnowledgeBase.PickCgSourceRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.PinCgGenerationRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.PositioningPanel|100%|95.4%| |Kagura.BlazorAdapter.KnowledgeBase.PreviewVoiceRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.PublishCgGenerationRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.RelationshipCard|77.5%|63.3%| |Kagura.BlazorAdapter.KnowledgeBase.RelationshipCastLoaded|100%|| |Kagura.BlazorAdapter.KnowledgeBase.RelationshipList|97.3%|88.4%| |Kagura.BlazorAdapter.KnowledgeBase.RelationshipModal|94.1%|94.7%| |Kagura.BlazorAdapter.KnowledgeBase.RelationshipsEffects|92.8%|77.7%| |Kagura.BlazorAdapter.KnowledgeBase.RelationshipsFailed|0%|| |Kagura.BlazorAdapter.KnowledgeBase.RelationshipsLoaded|100%|| |Kagura.BlazorAdapter.KnowledgeBase.RelationshipsPage|92.8%|87.5%| |Kagura.BlazorAdapter.KnowledgeBase.RelationshipsReducers|94.7%|75%| |Kagura.BlazorAdapter.KnowledgeBase.RelationshipsState|100%|100%| |Kagura.BlazorAdapter.KnowledgeBase.RemoveCharacterPreviewRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.RemoveExpressionRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.RemoveLocationPreviewRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.ReorderCgCastRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.ReorderTimelineEventRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.ResetCgCastOverrideRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.RetouchCgVariation|100%|| |Kagura.BlazorAdapter.KnowledgeBase.RetouchCgVariationRegion|100%|| |Kagura.BlazorAdapter.KnowledgeBase.SaveCgCastMemberRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.SaveCgMaskRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.SaveCgRetouchScopeRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.SaveCgSceneTagsRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.SaveCgSetRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.SaveCgVariationRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.SaveCharacterRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.SaveFaceRegionsRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.SaveLocationRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.SaveLocationVariantRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.SaveLoreRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.SaveOutfitRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.ScopeCgCutoutRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.SearchParentCandidates|100%|| |Kagura.BlazorAdapter.KnowledgeBase.SetCgPanelTab|100%|| |Kagura.BlazorAdapter.KnowledgeBase.SetCgSetsFilter|100%|| |Kagura.BlazorAdapter.KnowledgeBase.SetCharacterPreviewRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.SetCharactersFilter|100%|| |Kagura.BlazorAdapter.KnowledgeBase.SetCharactersTier|100%|| |Kagura.BlazorAdapter.KnowledgeBase.SetLocationPreviewRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.SetLocationsFilter|100%|| |Kagura.BlazorAdapter.KnowledgeBase.SetLoreCategory|100%|| |Kagura.BlazorAdapter.KnowledgeBase.SetLoreFilter|100%|| |Kagura.BlazorAdapter.KnowledgeBase.SetParentRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.SetRelationshipsFilter|100%|| |Kagura.BlazorAdapter.KnowledgeBase.ShowCgGeneration|100%|| |Kagura.BlazorAdapter.KnowledgeBase.SpriteCapabilityChecked|100%|| |Kagura.BlazorAdapter.KnowledgeBase.StyleReferenceControls|100%|78.5%| |Kagura.BlazorAdapter.KnowledgeBase.TimelineEffects|93.5%|70%| |Kagura.BlazorAdapter.KnowledgeBase.TimelineEventCard|92.5%|80%| |Kagura.BlazorAdapter.KnowledgeBase.TimelineEventEdit|100%|| |Kagura.BlazorAdapter.KnowledgeBase.TimelineFailed|0%|| |Kagura.BlazorAdapter.KnowledgeBase.TimelineLoaded|100%|| |Kagura.BlazorAdapter.KnowledgeBase.TimelinePage|95.8%|90%| |Kagura.BlazorAdapter.KnowledgeBase.TimelineReducers|91.6%|75%| |Kagura.BlazorAdapter.KnowledgeBase.TimelineSection|96.6%|91.6%| |Kagura.BlazorAdapter.KnowledgeBase.TimelineState|100%|| |Kagura.BlazorAdapter.KnowledgeBase.UpdateRelationshipRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.UpdateTimelineEventRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.UploadVoiceClipRequested|100%|| |Kagura.BlazorAdapter.KnowledgeBase.VoiceClipSaved|100%|| |Kagura.BlazorAdapter.Notifications.DomainChangedBridge|88.8%|58.3%| |Kagura.BlazorAdapter.Notifications.DomainChangesReceived|100%|100%| |Kagura.BlazorAdapter.OverlayDemo|0%|0%| |Kagura.BlazorAdapter.Projects.AssistantMemoryFailed|0%|| |Kagura.BlazorAdapter.Projects.AssistantMemorySaved|0%|| |Kagura.BlazorAdapter.Projects.ClearStyleReferenceRequested|100%|| |Kagura.BlazorAdapter.Projects.CreateProjectRequested|100%|| |Kagura.BlazorAdapter.Projects.DeleteProjectRequested|100%|| |Kagura.BlazorAdapter.Projects.LoadProjectAssets|100%|| |Kagura.BlazorAdapter.Projects.LoadWorkspace|100%|| |Kagura.BlazorAdapter.Projects.ProjectAssetsEffects|100%|| |Kagura.BlazorAdapter.Projects.ProjectAssetsFailed|100%|| |Kagura.BlazorAdapter.Projects.ProjectAssetsLoaded|100%|| |Kagura.BlazorAdapter.Projects.ProjectAssetsPage|94.7%|87%| |Kagura.BlazorAdapter.Projects.ProjectAssetsReducers|100%|100%| |Kagura.BlazorAdapter.Projects.ProjectAssetsState|100%|| |Kagura.BlazorAdapter.Projects.ProjectCreated|100%|| |Kagura.BlazorAdapter.Projects.ProjectCreateFailed|100%|| |Kagura.BlazorAdapter.Projects.ProjectDeleted|100%|| |Kagura.BlazorAdapter.Projects.ProjectSaved|100%|| |Kagura.BlazorAdapter.Projects.ProjectSaveFailed|100%|| |Kagura.BlazorAdapter.Projects.ProjectsEffects|100%|100%| |Kagura.BlazorAdapter.Projects.ProjectsLoaded|100%|| |Kagura.BlazorAdapter.Projects.ProjectsPage|94.7%|100%| |Kagura.BlazorAdapter.Projects.ProjectsReducers|100%|100%| |Kagura.BlazorAdapter.Projects.ProjectsState|100%|100%| |Kagura.BlazorAdapter.Projects.ProjectWorkspacePage|70.5%|63.8%| |Kagura.BlazorAdapter.Projects.SaveAssistantMemoryRequested|0%|| |Kagura.BlazorAdapter.Projects.SaveProjectRequested|100%|| |Kagura.BlazorAdapter.Projects.SetProjectsFilter|100%|| |Kagura.BlazorAdapter.Projects.SetStageViewRequested|100%|| |Kagura.BlazorAdapter.Projects.SetStyleReferenceRequested|100%|| |Kagura.BlazorAdapter.Projects.SetStyleRequested|100%|| |Kagura.BlazorAdapter.Projects.StyleReferenceChanged|100%|| |Kagura.BlazorAdapter.Projects.StyleReferenceFailed|100%|| |Kagura.BlazorAdapter.Projects.WorkspaceCrumb|100%|| |Kagura.BlazorAdapter.Projects.WorkspaceEffects|82.3%|70.5%| |Kagura.BlazorAdapter.Projects.WorkspaceLoaded|100%|| |Kagura.BlazorAdapter.Projects.WorkspaceReducers|80%|| |Kagura.BlazorAdapter.Projects.WorkspaceShell|100%|95%| |Kagura.BlazorAdapter.Projects.WorkspaceState|100%|| |Kagura.BlazorAdapter.QuicklinkDemo|0%|| |Kagura.BlazorAdapter.RegionSelectorDemo|0%|0%| |Kagura.BlazorAdapter.SelectDemo|0%|| |Kagura.BlazorAdapter.Settings.AssistantSkillsEffects|13.3%|0%| |Kagura.BlazorAdapter.Settings.AssistantSkillsFailed|0%|| |Kagura.BlazorAdapter.Settings.AssistantSkillsLoaded|100%|| |Kagura.BlazorAdapter.Settings.AssistantSkillsReducers|28.5%|| |Kagura.BlazorAdapter.Settings.AssistantSkillsSection|32.4%|11.1%| |Kagura.BlazorAdapter.Settings.AssistantSkillsState|100%|| |Kagura.BlazorAdapter.Settings.CheckTtsConnectionRequested|100%|| |Kagura.BlazorAdapter.Settings.CreateEmotionRequested|100%|| |Kagura.BlazorAdapter.Settings.CreateSkillRequested|0%|| |Kagura.BlazorAdapter.Settings.CreatorProfileFailed|0%|| |Kagura.BlazorAdapter.Settings.CreatorProfileSaved|0%|| |Kagura.BlazorAdapter.Settings.DeleteEmotionRequested|100%|| |Kagura.BlazorAdapter.Settings.EditSkillRequested|0%|| |Kagura.BlazorAdapter.Settings.EmotionCreated|100%|| |Kagura.BlazorAdapter.Settings.EmotionLibraryEffects|71.4%|37.5%| |Kagura.BlazorAdapter.Settings.EmotionLibraryFailed|0%|| |Kagura.BlazorAdapter.Settings.EmotionLibraryLoaded|100%|| |Kagura.BlazorAdapter.Settings.EmotionLibraryReducers|96.5%|50%| |Kagura.BlazorAdapter.Settings.EmotionLibrarySection|90.1%|80.7%| |Kagura.BlazorAdapter.Settings.EmotionLibraryState|100%|| |Kagura.BlazorAdapter.Settings.NovelAiSettingsEffects|68.8%|50%| |Kagura.BlazorAdapter.Settings.NovelAiSettingsFailed|100%|| |Kagura.BlazorAdapter.Settings.NovelAiSettingsLoaded|100%|| |Kagura.BlazorAdapter.Settings.NovelAiSettingsReducers|87.5%|25%| |Kagura.BlazorAdapter.Settings.NovelAiSettingsSection|88.8%|91.6%| |Kagura.BlazorAdapter.Settings.NovelAiSettingsState|100%|| |Kagura.BlazorAdapter.Settings.NovelAiTokenChecked|100%|| |Kagura.BlazorAdapter.Settings.OpenRouterModelsFailed|0%|| |Kagura.BlazorAdapter.Settings.OpenRouterModelsLoaded|100%|| |Kagura.BlazorAdapter.Settings.OpenRouterSettingsEffects|46.7%|27.7%| |Kagura.BlazorAdapter.Settings.OpenRouterSettingsFailed|0%|| |Kagura.BlazorAdapter.Settings.OpenRouterSettingsLoaded|100%|| |Kagura.BlazorAdapter.Settings.OpenRouterSettingsReducers|77.2%|| |Kagura.BlazorAdapter.Settings.OpenRouterSettingsSection|91.1%|92.1%| |Kagura.BlazorAdapter.Settings.OpenRouterSettingsState|100%|| |Kagura.BlazorAdapter.Settings.SaveCreatorProfileRequested|0%|| |Kagura.BlazorAdapter.Settings.SaveDefaultTagsRequested|100%|| |Kagura.BlazorAdapter.Settings.SaveEmotionRequested|100%|| |Kagura.BlazorAdapter.Settings.SaveNovelAiModelRequested|100%|| |Kagura.BlazorAdapter.Settings.SaveNovelAiTokenRequested|100%|| |Kagura.BlazorAdapter.Settings.SaveOpenRouterDescriberModelRequested|100%|| |Kagura.BlazorAdapter.Settings.SaveOpenRouterKeyRequested|100%|| |Kagura.BlazorAdapter.Settings.SaveOpenRouterModelRequested|100%|| |Kagura.BlazorAdapter.Settings.SaveOpenRouterReasoningEffortRequested|100%|| |Kagura.BlazorAdapter.Settings.SaveTtsFieldRequested|100%|| |Kagura.BlazorAdapter.Settings.SelectEmotion|100%|| |Kagura.BlazorAdapter.Settings.SetSkillPinnedRequested|0%|| |Kagura.BlazorAdapter.Settings.SetSkillStateRequested|0%|| |Kagura.BlazorAdapter.Settings.TokenVerdict|100%|| |Kagura.BlazorAdapter.Settings.TtsConnectionChecked|100%|| |Kagura.BlazorAdapter.Settings.TtsFieldSaved|100%|| |Kagura.BlazorAdapter.Settings.TtsSettingsEffects|73.5%|50%| |Kagura.BlazorAdapter.Settings.TtsSettingsFailed|100%|| |Kagura.BlazorAdapter.Settings.TtsSettingsLoaded|100%|| |Kagura.BlazorAdapter.Settings.TtsSettingsReducers|100%|100%| |Kagura.BlazorAdapter.Settings.TtsSettingsSection|77.9%|72.2%| |Kagura.BlazorAdapter.Settings.TtsSettingsState|100%|| |Kagura.BlazorAdapter.Settings.TtsVerdict|100%|| |Kagura.BlazorAdapter.SliderDemo|0%|0%| |Kagura.BlazorAdapter.Tags.ForgetTagAuthoringInstance|100%|| |Kagura.BlazorAdapter.Tags.PromptTagEditing|100%|76.3%| |Kagura.BlazorAdapter.Tags.RequestSuggestions|100%|| |Kagura.BlazorAdapter.Tags.SearchTags|100%|| |Kagura.BlazorAdapter.Tags.SuggestionsReceived|100%|| |Kagura.BlazorAdapter.Tags.TagAuthoring|96.2%|81.3%| |Kagura.BlazorAdapter.Tags.TagAuthoringEffects|100%|100%| |Kagura.BlazorAdapter.Tags.TagAuthoringInstance|100%|| |Kagura.BlazorAdapter.Tags.TagAuthoringPage|0%|| |Kagura.BlazorAdapter.Tags.TagAuthoringReducers|100%|100%| |Kagura.BlazorAdapter.Tags.TagAuthoringState|100%|100%| |Kagura.BlazorAdapter.Tags.TagDatabaseChecked|100%|| |Kagura.BlazorAdapter.Tags.TagsSearched|100%|| |Kagura.BlazorAdapter.ToggleGroupDemo|0%|0%| |Kagura.BlazorAdapter.VisualNovel.AddSceneCastRequested|100%|| |Kagura.BlazorAdapter.VisualNovel.AddSceneStepRequested|100%|| |Kagura.BlazorAdapter.VisualNovel.ChapterCreated|100%|| |Kagura.BlazorAdapter.VisualNovel.ChapterEditorDeleted|100%|| |Kagura.BlazorAdapter.VisualNovel.ChapterEditorEffects|90%|56.2%| |Kagura.BlazorAdapter.VisualNovel.ChapterEditorLoaded|100%|| |Kagura.BlazorAdapter.VisualNovel.ChapterEditorNotFound|100%|| |Kagura.BlazorAdapter.VisualNovel.ChapterEditorPage|84.9%|70.4%| |Kagura.BlazorAdapter.VisualNovel.ChapterEditorReducers|86.9%|42.8%| |Kagura.BlazorAdapter.VisualNovel.ChapterEditorSaved|100%|| |Kagura.BlazorAdapter.VisualNovel.ChapterEditorState|100%|| |Kagura.BlazorAdapter.VisualNovel.ChapterOperationFailed|0%|| |Kagura.BlazorAdapter.VisualNovel.ChapterScenes|78.2%|65%| |Kagura.BlazorAdapter.VisualNovel.ChaptersEffects|88.8%|64.2%| |Kagura.BlazorAdapter.VisualNovel.ChaptersFailed|100%|| |Kagura.BlazorAdapter.VisualNovel.ChaptersLoaded|100%|| |Kagura.BlazorAdapter.VisualNovel.ChaptersPage|90.9%|90.9%| |Kagura.BlazorAdapter.VisualNovel.ChaptersReducers|91.6%|100%| |Kagura.BlazorAdapter.VisualNovel.ChaptersState|100%|| |Kagura.BlazorAdapter.VisualNovel.CreateChapterFailed|0%|| |Kagura.BlazorAdapter.VisualNovel.CreateChapterRequested|100%|| |Kagura.BlazorAdapter.VisualNovel.CreateSceneFailed|0%|| |Kagura.BlazorAdapter.VisualNovel.CreateSceneRequested|100%|| |Kagura.BlazorAdapter.VisualNovel.DeleteChapterRequested|100%|| |Kagura.BlazorAdapter.VisualNovel.DeleteSceneRequested|100%|| |Kagura.BlazorAdapter.VisualNovel.DeleteSceneStepRequested|100%|| |Kagura.BlazorAdapter.VisualNovel.GenerateSceneAudioRequested|100%|| |Kagura.BlazorAdapter.VisualNovel.GenerateStepAudioRequested|100%|| |Kagura.BlazorAdapter.VisualNovel.LoadChapter|100%|| |Kagura.BlazorAdapter.VisualNovel.LoadChapters|100%|| |Kagura.BlazorAdapter.VisualNovel.LoadPlayer|100%|| |Kagura.BlazorAdapter.VisualNovel.LoadScene|100%|| |Kagura.BlazorAdapter.VisualNovel.LoadScenes|100%|| |Kagura.BlazorAdapter.VisualNovel.LoadSceneSteps|100%|| |Kagura.BlazorAdapter.VisualNovel.PlayerEffects|100%|83.3%| |Kagura.BlazorAdapter.VisualNovel.PlayerLoaded|100%|| |Kagura.BlazorAdapter.VisualNovel.PlayerPage|100%|78.2%| |Kagura.BlazorAdapter.VisualNovel.PlayerReducers|100%|100%| |Kagura.BlazorAdapter.VisualNovel.PlayerStage|98.4%|72.4%| |Kagura.BlazorAdapter.VisualNovel.PlayerState|100%|83.3%| |Kagura.BlazorAdapter.VisualNovel.RemoveSceneCastRequested|100%|| |Kagura.BlazorAdapter.VisualNovel.ReorderChaptersRequested|100%|| |Kagura.BlazorAdapter.VisualNovel.ReorderScenesRequested|0%|| |Kagura.BlazorAdapter.VisualNovel.ReorderSceneStepsRequested|100%|| |Kagura.BlazorAdapter.VisualNovel.SaveChapterRequested|100%|| |Kagura.BlazorAdapter.VisualNovel.SaveSceneRequested|100%|| |Kagura.BlazorAdapter.VisualNovel.SceneAudioEligibility|100%|85.7%| |Kagura.BlazorAdapter.VisualNovel.SceneCast|100%|76.9%| |Kagura.BlazorAdapter.VisualNovel.SceneCastAdded|100%|| |Kagura.BlazorAdapter.VisualNovel.SceneCastRemoved|100%|| |Kagura.BlazorAdapter.VisualNovel.SceneCreated|100%|| |Kagura.BlazorAdapter.VisualNovel.SceneEditorDeleted|100%|| |Kagura.BlazorAdapter.VisualNovel.SceneEditorEffects|92.1%|55.5%| |Kagura.BlazorAdapter.VisualNovel.SceneEditorLoaded|100%|| |Kagura.BlazorAdapter.VisualNovel.SceneEditorNotFound|100%|| |Kagura.BlazorAdapter.VisualNovel.SceneEditorPage|87.9%|71.2%| |Kagura.BlazorAdapter.VisualNovel.SceneEditorReducers|88.4%|42.8%| |Kagura.BlazorAdapter.VisualNovel.SceneEditorSaved|100%|| |Kagura.BlazorAdapter.VisualNovel.SceneEditorState|100%|| |Kagura.BlazorAdapter.VisualNovel.SceneLineRow|88.5%|84.7%| |Kagura.BlazorAdapter.VisualNovel.SceneLineStage|84.6%|73.2%| |Kagura.BlazorAdapter.VisualNovel.SceneOperationFailed|0%|| |Kagura.BlazorAdapter.VisualNovel.SceneScript|93.7%|89.2%| |Kagura.BlazorAdapter.VisualNovel.ScenesEffects|64.2%|35.7%| |Kagura.BlazorAdapter.VisualNovel.ScenesFailed|100%|| |Kagura.BlazorAdapter.VisualNovel.ScenesLoaded|100%|| |Kagura.BlazorAdapter.VisualNovel.ScenesReducers|76.9%|83.3%| |Kagura.BlazorAdapter.VisualNovel.ScenesState|100%|100%| |Kagura.BlazorAdapter.VisualNovel.SceneStatuses|100%|50%| |Kagura.BlazorAdapter.VisualNovel.SceneStepAdded|100%|| |Kagura.BlazorAdapter.VisualNovel.SceneStepDeleted|100%|| |Kagura.BlazorAdapter.VisualNovel.SceneStepSaved|100%|| |Kagura.BlazorAdapter.VisualNovel.SceneStepsEffects|84.2%|68.9%| |Kagura.BlazorAdapter.VisualNovel.SceneStepsFailed|100%|| |Kagura.BlazorAdapter.VisualNovel.SceneStepsLoaded|100%|| |Kagura.BlazorAdapter.VisualNovel.SceneStepsReducers|97.5%|75%| |Kagura.BlazorAdapter.VisualNovel.SceneStepsState|100%|50%| |Kagura.BlazorAdapter.VisualNovel.SetScenesStatus|100%|| |Kagura.BlazorAdapter.VisualNovel.SetSceneStepStageRequested|100%|| |Kagura.BlazorAdapter.VisualNovel.StepAudioFailed|100%|| |Kagura.BlazorAdapter.VisualNovel.StepAudioFinished|100%|| |Kagura.BlazorAdapter.VisualNovel.StepAudioStarted|100%|| |Kagura.BlazorAdapter.VisualNovel.StepAudioState|100%|| |Kagura.BlazorAdapter.VisualNovel.UpdateSceneStepRequested|100%|| </details> <details><summary>Kagura.Domain - 94.8%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Kagura.Domain**|**94.8%**|**91.9%**| |Kagura.Domain.Assistant.Skill|100%|90%| |Kagura.Domain.Graph.Entry|100%|100%| |Kagura.Domain.Graph.Link|100%|100%| |Kagura.Domain.Graph.LinkRole|100%|100%| |Kagura.Domain.Graph.LinkRoles|100%|| |Kagura.Domain.Graph.StructuralRef|100%|100%| |Kagura.Domain.Graph.StructuralRefs|100%|100%| |Kagura.Domain.Journal.ChangeLogEntry|100%|| |Kagura.Domain.KnowledgeBase.BodyAttributePrompt|100%|100%| |Kagura.Domain.KnowledgeBase.BodyTypes|100%|100%| |Kagura.Domain.KnowledgeBase.CgCastMember|92.5%|| |Kagura.Domain.KnowledgeBase.CgCastMemberProfile|50%|| |Kagura.Domain.KnowledgeBase.CgCastOverride|85.7%|| |Kagura.Domain.KnowledgeBase.CgCutoutSnapshot|100%|| |Kagura.Domain.KnowledgeBase.CgGeneration|92.3%|| |Kagura.Domain.KnowledgeBase.CgLikenessSnapshot|100%|| |Kagura.Domain.KnowledgeBase.CgLocalScope|100%|100%| |Kagura.Domain.KnowledgeBase.CgMaskPoint|100%|| |Kagura.Domain.KnowledgeBase.CgMaskPrimitive|100%|| |Kagura.Domain.KnowledgeBase.CgPromptSnapshot|100%|| |Kagura.Domain.KnowledgeBase.CgSet|96.7%|50%| |Kagura.Domain.KnowledgeBase.CgSetProfile|54.5%|| |Kagura.Domain.KnowledgeBase.CgStyleImageSnapshot|100%|| |Kagura.Domain.KnowledgeBase.CgSubjectSnapshot|100%|| |Kagura.Domain.KnowledgeBase.CgVariation|94.2%|66.6%| |Kagura.Domain.KnowledgeBase.CgVariationProfile|53.8%|| |Kagura.Domain.KnowledgeBase.Character|97.3%|100%| |Kagura.Domain.KnowledgeBase.CharacterProfile|100%|| |Kagura.Domain.KnowledgeBase.CharacterVoice|100%|| |Kagura.Domain.KnowledgeBase.CupSizes|100%|100%| |Kagura.Domain.KnowledgeBase.CuratedTag|100%|| |Kagura.Domain.KnowledgeBase.Emotion|87.8%|66.6%| |Kagura.Domain.KnowledgeBase.EmotionProfile|50%|| |Kagura.Domain.KnowledgeBase.Expression|87%|| |Kagura.Domain.KnowledgeBase.ImageRegion|90%|100%| |Kagura.Domain.KnowledgeBase.InheritedTagStrength|100%|100%| |Kagura.Domain.KnowledgeBase.LabeledEntry|100%|| |Kagura.Domain.KnowledgeBase.Location|92.3%|100%| |Kagura.Domain.KnowledgeBase.LocationProfile|100%|| |Kagura.Domain.KnowledgeBase.LocationVariant|93.2%|66.6%| |Kagura.Domain.KnowledgeBase.LocationVariantProfile|100%|| |Kagura.Domain.KnowledgeBase.LoreEntry|100%|| |Kagura.Domain.KnowledgeBase.LoreProfile|100%|| |Kagura.Domain.KnowledgeBase.Outfit|93.9%|80%| |Kagura.Domain.KnowledgeBase.OutfitProfile|100%|| |Kagura.Domain.KnowledgeBase.PromptTag|42.8%|100%| |Kagura.Domain.KnowledgeBase.Relationship|91.8%|100%| |Kagura.Domain.KnowledgeBase.RelationshipProfile|100%|| |Kagura.Domain.KnowledgeBase.RelationshipSecret|100%|75%| |Kagura.Domain.KnowledgeBase.SpriteFramings|100%|100%| |Kagura.Domain.KnowledgeBase.StyleReferenceTuning|100%|| |Kagura.Domain.KnowledgeBase.TimelineEvent|100%|100%| |Kagura.Domain.Projects.Project|100%|90%| |Kagura.Domain.Projects.Slug|100%|100%| |Kagura.Domain.Settings.AppSetting|100%|| |Kagura.Domain.VisualNovel.Chapter|100%|100%| |Kagura.Domain.VisualNovel.ChapterProfile|80%|| |Kagura.Domain.VisualNovel.EffectiveStage|100%|| |Kagura.Domain.VisualNovel.PlayerFrame|100%|| |Kagura.Domain.VisualNovel.PlayerSceneScript|100%|| |Kagura.Domain.VisualNovel.PlayerStep|100%|| |Kagura.Domain.VisualNovel.Scene|96.1%|83.3%| |Kagura.Domain.VisualNovel.ScenePlayback|100%|100%| |Kagura.Domain.VisualNovel.SceneProfile|100%|| |Kagura.Domain.VisualNovel.SceneStageProjection|100%|96.8%| |Kagura.Domain.VisualNovel.SceneStep|100%|100%| |Kagura.Domain.VisualNovel.SpriteLayout|100%|| |Kagura.Domain.VisualNovel.StageBackgroundChange|100%|| |Kagura.Domain.VisualNovel.StageCharacterChange|100%|| |Kagura.Domain.VisualNovel.StageCharacterState|100%|| |Kagura.Domain.VisualNovel.StageProjection|100%|100%| |Kagura.Domain.VisualNovel.StageStepChanges|100%|| |Kagura.Domain.VisualNovel.StageView|100%|| |System.Text.RegularExpressions.Generated|90.2%|72.2%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>FE06CC341D340484<br/>D04ADFED3A21D401C2764A1D17367E35BEB556CBB3B4B0B74__NonSlugChars_0|89.4%|75%| </details> <details><summary>Kagura.Infrastructure - 97.7%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Kagura.Infrastructure**|**97.7%**|**74%**| |Kagura.Infrastructure.Assistant.AssistantContextResolver|94.1%|68.8%| |Kagura.Infrastructure.Assistant.AssistantMutationTool`1|100%|87.5%| |Kagura.Infrastructure.Assistant.AssistantTool`1|100%|100%| |Kagura.Infrastructure.Assistant.AssistantToolContext|100%|| |Kagura.Infrastructure.Assistant.ChatSession|89.3%|50.5%| |Kagura.Infrastructure.Assistant.DelegateProgress`1|100%|| |Kagura.Infrastructure.Assistant.EfSkillStore|100%|| |Kagura.Infrastructure.Assistant.InMemoryConversationStore|100%|87.5%| |Kagura.Infrastructure.Assistant.ResolvedContext|100%|| |Kagura.Infrastructure.Assistant.Tools.AddCgCastMemberParams|0%|| |Kagura.Infrastructure.Assistant.Tools.AddCgCastMemberTool|15.6%|| |Kagura.Infrastructure.Assistant.Tools.BodyAttributeParams|100%|100%| |Kagura.Infrastructure.Assistant.Tools.CharacterTiers|100%|100%| |Kagura.Infrastructure.Assistant.Tools.CreateCgSetParams|0%|| |Kagura.Infrastructure.Assistant.Tools.CreateCgSetTool|13.7%|| |Kagura.Infrastructure.Assistant.Tools.CreateCgVariationParams|100%|| |Kagura.Infrastructure.Assistant.Tools.CreateCgVariationTool|90.3%|| |Kagura.Infrastructure.Assistant.Tools.CreateChapterParams|100%|| |Kagura.Infrastructure.Assistant.Tools.CreateChapterTool|93.3%|| |Kagura.Infrastructure.Assistant.Tools.CreateCharacterParams|100%|| |Kagura.Infrastructure.Assistant.Tools.CreateCharacterTool|96.9%|| |Kagura.Infrastructure.Assistant.Tools.CreateLocationParams|100%|| |Kagura.Infrastructure.Assistant.Tools.CreateLocationTool|93.6%|| |Kagura.Infrastructure.Assistant.Tools.CreateLocationVariantParams|100%|| |Kagura.Infrastructure.Assistant.Tools.CreateLocationVariantTool|93%|| |Kagura.Infrastructure.Assistant.Tools.CreateLoreParams|100%|| |Kagura.Infrastructure.Assistant.Tools.CreateLoreTool|94.5%|100%| |Kagura.Infrastructure.Assistant.Tools.CreateOutfitParams|100%|| |Kagura.Infrastructure.Assistant.Tools.CreateOutfitTool|94.7%|| |Kagura.Infrastructure.Assistant.Tools.CreateRelationshipParams|100%|| |Kagura.Infrastructure.Assistant.Tools.CreateRelationshipTool|94.2%|| |Kagura.Infrastructure.Assistant.Tools.CreateSceneParams|100%|| |Kagura.Infrastructure.Assistant.Tools.CreateSceneTool|93.9%|| |Kagura.Infrastructure.Assistant.Tools.CreateTimelineEventParams|100%|| |Kagura.Infrastructure.Assistant.Tools.CreateTimelineEventTool|95.8%|| |Kagura.Infrastructure.Assistant.Tools.DeleteCgCastMemberParams|0%|| |Kagura.Infrastructure.Assistant.Tools.DeleteCgCastMemberTool|13.6%|| |Kagura.Infrastructure.Assistant.Tools.DeleteCgSetParams|0%|| |Kagura.Infrastructure.Assistant.Tools.DeleteCgSetTool|14.2%|| |Kagura.Infrastructure.Assistant.Tools.DeleteCgVariationParams|100%|| |Kagura.Infrastructure.Assistant.Tools.DeleteCgVariationTool|90.4%|| |Kagura.Infrastructure.Assistant.Tools.DeleteChapterParams|100%|| |Kagura.Infrastructure.Assistant.Tools.DeleteChapterTool|95.2%|| |Kagura.Infrastructure.Assistant.Tools.DeleteCharacterParams|100%|| |Kagura.Infrastructure.Assistant.Tools.DeleteCharacterTool|95.2%|| |Kagura.Infrastructure.Assistant.Tools.DeleteLocationParams|100%|| |Kagura.Infrastructure.Assistant.Tools.DeleteLocationTool|95.2%|| |Kagura.Infrastructure.Assistant.Tools.DeleteLocationVariantParams|100%|| |Kagura.Infrastructure.Assistant.Tools.DeleteLocationVariantTool|95.6%|| |Kagura.Infrastructure.Assistant.Tools.DeleteLoreParams|100%|| |Kagura.Infrastructure.Assistant.Tools.DeleteLoreTool|95.2%|| |Kagura.Infrastructure.Assistant.Tools.DeleteOutfitParams|100%|| |Kagura.Infrastructure.Assistant.Tools.DeleteOutfitTool|95.6%|| |Kagura.Infrastructure.Assistant.Tools.DeleteRelationshipParams|100%|| |Kagura.Infrastructure.Assistant.Tools.DeleteRelationshipTool|100%|| |Kagura.Infrastructure.Assistant.Tools.DeleteSceneLineParams|100%|| |Kagura.Infrastructure.Assistant.Tools.DeleteSceneLineTool|100%|| |Kagura.Infrastructure.Assistant.Tools.DeleteSceneParams|100%|| |Kagura.Infrastructure.Assistant.Tools.DeleteSceneTool|95.2%|| |Kagura.Infrastructure.Assistant.Tools.DeleteTimelineEventParams|100%|| |Kagura.Infrastructure.Assistant.Tools.DeleteTimelineEventTool|100%|| |Kagura.Infrastructure.Assistant.Tools.EntryParam|100%|100%| |Kagura.Infrastructure.Assistant.Tools.FindSimilarTagsParams|100%|| |Kagura.Infrastructure.Assistant.Tools.FindSimilarTagsTool|93.3%|| |Kagura.Infrastructure.Assistant.Tools.GenerateCharacterSpriteParams|100%|| |Kagura.Infrastructure.Assistant.Tools.GenerateCharacterSpriteTool|96.6%|| |Kagura.Infrastructure.Assistant.Tools.GenerateExpressionSpritesParams|100%|| |Kagura.Infrastructure.Assistant.Tools.GenerateExpressionSpritesTool|86.8%|50%| |Kagura.Infrastructure.Assistant.Tools.GenerateLocationBackgroundParams|100%|| |Kagura.Infrastructure.Assistant.Tools.GenerateLocationBackgroundTool|93.3%|| |Kagura.Infrastructure.Assistant.Tools.GenerateOutfitSpriteParams|100%|| |Kagura.Infrastructure.Assistant.Tools.GenerateOutfitSpriteTool|73.3%|| |Kagura.Infrastructure.Assistant.Tools.GenerateVariantBackgroundParams|100%|| |Kagura.Infrastructure.Assistant.Tools.GenerateVariantBackgroundTool|94.1%|| |Kagura.Infrastructure.Assistant.Tools.GenerationLaunch|90.6%|62.5%| |Kagura.Infrastructure.Assistant.Tools.GetCgSetParams|100%|| |Kagura.Infrastructure.Assistant.Tools.GetCgSetTool|95.6%|| |Kagura.Infrastructure.Assistant.Tools.GetCgVariationParams|100%|| |Kagura.Infrastructure.Assistant.Tools.GetCgVariationTool|97.7%|100%| |Kagura.Infrastructure.Assistant.Tools.GetChapterParams|100%|| |Kagura.Infrastructure.Assistant.Tools.GetChapterTool|97%|| |Kagura.Infrastructure.Assistant.Tools.GetCharacterParams|100%|| |Kagura.Infrastructure.Assistant.Tools.GetCharacterTool|98.6%|50%| |Kagura.Infrastructure.Assistant.Tools.GetConnectionsParams|100%|| |Kagura.Infrastructure.Assistant.Tools.GetConnectionsTool|96.6%|| |Kagura.Infrastructure.Assistant.Tools.GetGenerationQueueTool|100%|50%| |Kagura.Infrastructure.Assistant.Tools.GetLocationParams|100%|| |Kagura.Infrastructure.Assistant.Tools.GetLocationTool|97.3%|| |Kagura.Infrastructure.Assistant.Tools.GetLocationVariantParams|100%|| |Kagura.Infrastructure.Assistant.Tools.GetLocationVariantTool|100%|| |Kagura.Infrastructure.Assistant.Tools.GetLoreParams|100%|| |Kagura.Infrastructure.Assistant.Tools.GetLoreTool|96.2%|| |Kagura.Infrastructure.Assistant.Tools.GetOutfitParams|100%|| |Kagura.Infrastructure.Assistant.Tools.GetOutfitTool|100%|100%| |Kagura.Infrastructure.Assistant.Tools.GetProjectOverviewTool|97.7%|| |Kagura.Infrastructure.Assistant.Tools.GetSceneParams|100%|| |Kagura.Infrastructure.Assistant.Tools.GetSceneStageOptionsTool|100%|100%| |Kagura.Infrastructure.Assistant.Tools.GetSceneTool|98%|100%| |Kagura.Infrastructure.Assistant.Tools.GetTimelineTool|100%|| |Kagura.Infrastructure.Assistant.Tools.InheritedStrengthParam|100%|100%| |Kagura.Infrastructure.Assistant.Tools.LinkRecordsParams|100%|| |Kagura.Infrastructure.Assistant.Tools.LinkRecordsTool|97.1%|| |Kagura.Infrastructure.Assistant.Tools.ListCgSetsTool|26.6%|| |Kagura.Infrastructure.Assistant.Tools.ListChaptersTool|100%|| |Kagura.Infrastructure.Assistant.Tools.ListCharactersTool|100%|| |Kagura.Infrastructure.Assistant.Tools.ListLocationsTool|100%|| |Kagura.Infrastructure.Assistant.Tools.ListLoreTool|100%|| |Kagura.Infrastructure.Assistant.Tools.ListRelationshipsTool|100%|100%| |Kagura.Infrastructure.Assistant.Tools.ManageSkillParams|100%|| |Kagura.Infrastructure.Assistant.Tools.ManageSkillTool|92.7%|100%| |Kagura.Infrastructure.Assistant.Tools.MemoryOperationParam|100%|| |Kagura.Infrastructure.Assistant.Tools.MemoryParams|100%|| |Kagura.Infrastructure.Assistant.Tools.MemoryTool|91.8%|76.6%| |Kagura.Infrastructure.Assistant.Tools.MoveSceneLineParams|100%|| |Kagura.Infrastructure.Assistant.Tools.MoveSceneLineTool|87.8%|| |Kagura.Infrastructure.Assistant.Tools.NavigateToParams|100%|| |Kagura.Infrastructure.Assistant.Tools.NavigateToTool|80%|50%| |Kagura.Infrastructure.Assistant.Tools.OverrideCgCastMemberParams|100%|| |Kagura.Infrastructure.Assistant.Tools.OverrideCgCastMemberTool|94%|| |Kagura.Infrastructure.Assistant.Tools.PublishCgGenerationParams|100%|| |Kagura.Infrastructure.Assistant.Tools.PublishCgGenerationTool|90%|| |Kagura.Infrastructure.Assistant.Tools.RedoTool|93.7%|| |Kagura.Infrastructure.Assistant.Tools.ResetCgCastMemberParams|100%|| |Kagura.Infrastructure.Assistant.Tools.ResetCgCastMemberTool|91.3%|| |Kagura.Infrastructure.Assistant.Tools.ResolveTagParams|100%|| |Kagura.Infrastructure.Assistant.Tools.ResolveTagTool|95%|| |Kagura.Infrastructure.Assistant.Tools.SceneLineParam|100%|| |Kagura.Infrastructure.Assistant.Tools.SceneScript|97.3%|100%| |Kagura.Infrastructure.Assistant.Tools.SearchParams|100%|| |Kagura.Infrastructure.Assistant.Tools.SearchTagsParams|100%|| |Kagura.Infrastructure.Assistant.Tools.SearchTagsTool|100%|| |Kagura.Infrastructure.Assistant.Tools.SearchTool|86.2%|25%| |Kagura.Infrastructure.Assistant.Tools.SetProjectStyleParams|100%|| |Kagura.Infrastructure.Assistant.Tools.SetProjectStyleTool|97.9%|92.8%| |Kagura.Infrastructure.Assistant.Tools.SetSceneLineStageParams|100%|| |Kagura.Infrastructure.Assistant.Tools.SetSceneLineStageTool|97.4%|| |Kagura.Infrastructure.Assistant.Tools.SpriteFramingParams|100%|100%| |Kagura.Infrastructure.Assistant.Tools.SpriteGenders|100%|100%| |Kagura.Infrastructure.Assistant.Tools.StageBackgroundParam|100%|| |Kagura.Infrastructure.Assistant.Tools.StageCharacterParam|100%|| |Kagura.Infrastructure.Assistant.Tools.SuggestTagsParams|100%|| |Kagura.Infrastructure.Assistant.Tools.SuggestTagsTool|94.1%|| |Kagura.Infrastructure.Assistant.Tools.TagDetailsParams|100%|| |Kagura.Infrastructure.Assistant.Tools.TagDetailsTool|93.3%|| |Kagura.Infrastructure.Assistant.Tools.TagParam|100%|85.7%| |Kagura.Infrastructure.Assistant.Tools.TagTools|100%|| |Kagura.Infrastructure.Assistant.Tools.UndoTool|94.1%|| |Kagura.Infrastructure.Assistant.Tools.UnlinkRecordsParams|100%|| |Kagura.Infrastructure.Assistant.Tools.UnlinkRecordsTool|88.2%|50%| |Kagura.Infrastructure.Assistant.Tools.UpdateCgCastMemberParams|0%|| |Kagura.Infrastructure.Assistant.Tools.UpdateCgCastMemberTool|20.3%|| |Kagura.Infrastructure.Assistant.Tools.UpdateCgSetParams|0%|| |Kagura.Infrastructure.Assistant.Tools.UpdateCgSetTool|11.9%|| |Kagura.Infrastructure.Assistant.Tools.UpdateCgVariationParams|100%|| |Kagura.Infrastructure.Assistant.Tools.UpdateCgVariationTool|93.6%|| |Kagura.Infrastructure.Assistant.Tools.UpdateChapterParams|100%|| |Kagura.Infrastructure.Assistant.Tools.UpdateChapterTool|94.7%|| |Kagura.Infrastructure.Assistant.Tools.UpdateCharacterParams|100%|| |Kagura.Infrastructure.Assistant.Tools.UpdateCharacterTool|97.9%|| |Kagura.Infrastructure.Assistant.Tools.UpdateLocationParams|100%|| |Kagura.Infrastructure.Assistant.Tools.UpdateLocationTool|95.2%|| |Kagura.Infrastructure.Assistant.Tools.UpdateLocationVariantParams|100%|| |Kagura.Infrastructure.Assistant.Tools.UpdateLocationVariantTool|95.8%|| |Kagura.Infrastructure.Assistant.Tools.UpdateLoreParams|100%|| |Kagura.Infrastructure.Assistant.Tools.UpdateLoreTool|95.2%|| |Kagura.Infrastructure.Assistant.Tools.UpdateOutfitParams|100%|| |Kagura.Infrastructure.Assistant.Tools.UpdateOutfitTool|96.3%|| |Kagura.Infrastructure.Assistant.Tools.UpdateProjectParams|100%|| |Kagura.Infrastructure.Assistant.Tools.UpdateProjectTool|92.8%|| |Kagura.Infrastructure.Assistant.Tools.UpdateRelationshipParams|100%|| |Kagura.Infrastructure.Assistant.Tools.UpdateRelationshipTool|97.1%|| |Kagura.Infrastructure.Assistant.Tools.UpdateSceneLineParams|100%|| |Kagura.Infrastructure.Assistant.Tools.UpdateSceneLineTool|95.1%|75%| |Kagura.Infrastructure.Assistant.Tools.UpdateSceneParams|100%|| |Kagura.Infrastructure.Assistant.Tools.UpdateSceneTool|95.4%|| |Kagura.Infrastructure.Assistant.Tools.UpdateTimelineEventParams|100%|| |Kagura.Infrastructure.Assistant.Tools.UpdateTimelineEventTool|96.2%|| |Kagura.Infrastructure.Assistant.Tools.ViewImageParams|50%|| |Kagura.Infrastructure.Assistant.Tools.ViewImageTool|57.4%|| |Kagura.Infrastructure.Assistant.Tools.ViewSkillParams|100%|| |Kagura.Infrastructure.Assistant.Tools.ViewSkillTool|100%|| |Kagura.Infrastructure.Assistant.Tools.WriteSceneLinesParams|100%|| |Kagura.Infrastructure.Assistant.Tools.WriteSceneLinesTool|93.6%|80%| |Kagura.Infrastructure.Backups.BackupOptions|100%|| |Kagura.Infrastructure.Backups.BackupService|71.4%|83.3%| |Kagura.Infrastructure.Backups.BackupWriter|92.3%|85.4%| |Kagura.Infrastructure.DependencyInjection|100%|100%| |Kagura.Infrastructure.Diagnostics.SqliteDatabaseSnapshotStore|100%|100%| |Kagura.Infrastructure.Emotions.EfEmotionStore|92.3%|75%| |Kagura.Infrastructure.Emotions.EmotionSeeder|100%|100%| |Kagura.Infrastructure.Generation.ActivityQueue|99.3%|95.4%| |Kagura.Infrastructure.Generation.ActivityQueueWorker|100%|| |Kagura.Infrastructure.Graph.EfGraphStore|98.2%|90.9%| |Kagura.Infrastructure.Journal.EfChangeJournal|100%|| |Kagura.Infrastructure.Journal.EfDocumentReverter|95%|91.6%| |Kagura.Infrastructure.Journal.EfUndoStore|98.4%|90.9%| |Kagura.Infrastructure.Journal.OperationContext|100%|100%| |Kagura.Infrastructure.Journal.SnapshotApplier|95%|90%| |Kagura.Infrastructure.KnowledgeBase.CgCutoutComposer|100%|100%| |Kagura.Infrastructure.KnowledgeBase.CgCutoutRenderer|88.8%|75%| |Kagura.Infrastructure.KnowledgeBase.CgVariationImageGenerator|90.5%|60.3%| |Kagura.Infrastructure.KnowledgeBase.CharacterImageGenerator|97.8%|86.3%| |Kagura.Infrastructure.KnowledgeBase.EfCgCastMemberStore|93.4%|81.2%| |Kagura.Infrastructure.KnowledgeBase.EfCgCastOverrideStore|71%|42.8%| |Kagura.Infrastructure.KnowledgeBase.EfCgGenerationStore|95.8%|50%| |Kagura.Infrastructure.KnowledgeBase.EfCgSetStore|90.2%|50%| |Kagura.Infrastructure.KnowledgeBase.EfCgVariationStore|93.3%|62.5%| |Kagura.Infrastructure.KnowledgeBase.EfCharacterStore|92%|64.2%| |Kagura.Infrastructure.KnowledgeBase.EfExpressionStore|96.1%|75%| |Kagura.Infrastructure.KnowledgeBase.EfLocationStore|95.1%|80%| |Kagura.Infrastructure.KnowledgeBase.EfLocationVariantStore|96.9%|83.3%| |Kagura.Infrastructure.KnowledgeBase.EfLoreStore|100%|100%| |Kagura.Infrastructure.KnowledgeBase.EfOutfitStore|95%|75%| |Kagura.Infrastructure.KnowledgeBase.EfRelationshipStore|93.4%|60%| |Kagura.Infrastructure.KnowledgeBase.EfTimelineStore|93.9%|75%| |Kagura.Infrastructure.KnowledgeBase.ExpressionImageGenerator|94.4%|81.5%| |Kagura.Infrastructure.KnowledgeBase.ImageSharpCropper|100%|100%| |Kagura.Infrastructure.KnowledgeBase.LocationImageGenerator|97.6%|75%| |Kagura.Infrastructure.KnowledgeBase.LocationVariantImageGenerator|95.7%|75%| |Kagura.Infrastructure.KnowledgeBase.OutfitImageGenerator|97%|85.2%| |Kagura.Infrastructure.KnowledgeBase.RegionMaskRasterizer|98.2%|95.8%| |Kagura.Infrastructure.KnowledgeBase.SpriteEnrichment|91.1%|81.2%| |Kagura.Infrastructure.Llm.LlmGateway|100%|100%| |Kagura.Infrastructure.Notifications.InProcessDomainChangedBus|100%|100%| |Kagura.Infrastructure.Persistence.Configurations.AppSettingConfiguration|100%|| |Kagura.Infrastructure.Persistence.Configurations.CgCastMemberConfiguration|100%|| |Kagura.Infrastructure.Persistence.Configurations.CgCastOverrideConfiguratio<br/>n|100%|| |Kagura.Infrastructure.Persistence.Configurations.CgGenerationConfiguration|100%|| |Kagura.Infrastructure.Persistence.Configurations.CgSetConfiguration|100%|| |Kagura.Infrastructure.Persistence.Configurations.CgVariationConfiguration|100%|| |Kagura.Infrastructure.Persistence.Configurations.ChangeLogEntryConfiguratio<br/>n|100%|| |Kagura.Infrastructure.Persistence.Configurations.ChapterConfiguration|100%|| |Kagura.Infrastructure.Persistence.Configurations.CharacterConfiguration|100%|| |Kagura.Infrastructure.Persistence.Configurations.EmotionConfiguration|100%|| |Kagura.Infrastructure.Persistence.Configurations.EntryConfiguration|100%|| |Kagura.Infrastructure.Persistence.Configurations.ExpressionConfiguration|100%|| |Kagura.Infrastructure.Persistence.Configurations.JsonColumnMapper|100%|| |Kagura.Infrastructure.Persistence.Configurations.LinkConfiguration|100%|| |Kagura.Infrastructure.Persistence.Configurations.LocationConfiguration|100%|| |Kagura.Infrastructure.Persistence.Configurations.LocationVariantConfigurati<br/>on|100%|| |Kagura.Infrastructure.Persistence.Configurations.LoreEntryConfiguration|100%|| |Kagura.Infrastructure.Persistence.Configurations.OutfitConfiguration|100%|| |Kagura.Infrastructure.Persistence.Configurations.ProjectConfiguration|100%|| |Kagura.Infrastructure.Persistence.Configurations.RelationshipConfiguration|100%|| |Kagura.Infrastructure.Persistence.Configurations.SceneConfiguration|100%|| |Kagura.Infrastructure.Persistence.Configurations.SceneStepConfiguration|100%|| |Kagura.Infrastructure.Persistence.Configurations.SkillConfiguration|100%|| |Kagura.Infrastructure.Persistence.Configurations.TimelineEventConfiguration|100%|| |Kagura.Infrastructure.Persistence.Converters.UtcTicksConverter|100%|| |Kagura.Infrastructure.Persistence.KaguraDbContext|83.3%|88%| |Kagura.Infrastructure.Persistence.KaguraDbContextFactory|0%|| |Kagura.Infrastructure.Persistence.Migrations.AddAppSettings|99.3%|| |Kagura.Infrastructure.Persistence.Migrations.AddCgCastMembers|99.7%|| |Kagura.Infrastructure.Persistence.Migrations.AddCgSets|99.6%|| |Kagura.Infrastructure.Persistence.Migrations.AddCgVariations|99.5%|| |Kagura.Infrastructure.Persistence.Migrations.AddChangeLogUndoFlag|96.8%|| |Kagura.Infrastructure.Persistence.Migrations.AddChapters|99.5%|| |Kagura.Infrastructure.Persistence.Migrations.AddChapterStoryBeats|99.3%|| |Kagura.Infrastructure.Persistence.Migrations.AddCharacterAttributeTuning|99.4%|| |Kagura.Infrastructure.Persistence.Migrations.AddCharacterBaseAppearance|98.4%|| |Kagura.Infrastructure.Persistence.Migrations.AddCharacterBaseImage|99%|| |Kagura.Infrastructure.Persistence.Migrations.AddCharacterBaseImageTags|99.6%|| |Kagura.Infrastructure.Persistence.Migrations.AddCharacterBodyAttributes|99.1%|| |Kagura.Infrastructure.Persistence.Migrations.AddCharacterFraming|99.4%|| |Kagura.Infrastructure.Persistence.Migrations.AddCharacterHeight|99.4%|| |Kagura.Infrastructure.Persistence.Migrations.AddCharacterProfile|92.9%|| |Kagura.Infrastructure.Persistence.Migrations.AddCharacters|98.7%|| |Kagura.Infrastructure.Persistence.Migrations.AddCharacterTier|99.4%|| |Kagura.Infrastructure.Persistence.Migrations.AddCharacterVoiceConfigs|99.4%|| |Kagura.Infrastructure.Persistence.Migrations.AddCharacterVoiceProviderId|99.5%|| |Kagura.Infrastructure.Persistence.Migrations.AddEmotions|99.4%|| |Kagura.Infrastructure.Persistence.Migrations.AddEstablishingVariation|99.5%|| |Kagura.Infrastructure.Persistence.Migrations.AddExpressions|99.5%|| |Kagura.Infrastructure.Persistence.Migrations.AddGraphEntryAndLink|97.7%|| |Kagura.Infrastructure.Persistence.Migrations.AddInheritedTagStrengths|98.7%|| |Kagura.Infrastructure.Persistence.Migrations.AddLocationBaseImage|99.1%|| |Kagura.Infrastructure.Persistence.Migrations.AddLocationBaseTags|99.1%|| |Kagura.Infrastructure.Persistence.Migrations.AddLocationHierarchy|96.6%|| |Kagura.Infrastructure.Persistence.Migrations.AddLocations|98.9%|| |Kagura.Infrastructure.Persistence.Migrations.AddLocationVariantImage|99.3%|| |Kagura.Infrastructure.Persistence.Migrations.AddLocationVariants|99.4%|| |Kagura.Infrastructure.Persistence.Migrations.AddLocationVariantTags|98.8%|| |Kagura.Infrastructure.Persistence.Migrations.AddLoreEntries|99%|| |Kagura.Infrastructure.Persistence.Migrations.AddLoreEntryTables|97.8%|| |Kagura.Infrastructure.Persistence.Migrations.AddOutfitClothingTags|99.1%|| |Kagura.Infrastructure.Persistence.Migrations.AddOutfitDisabledInheritedTags|99.1%|| |Kagura.Infrastructure.Persistence.Migrations.AddOutfitFaceRegion|98.7%|| |Kagura.Infrastructure.Persistence.Migrations.AddOutfitImage|99.1%|| |Kagura.Infrastructure.Persistence.Migrations.AddOutfitReferenceTuning|99.2%|| |Kagura.Infrastructure.Persistence.Migrations.AddOutfits|99.4%|| |Kagura.Infrastructure.Persistence.Migrations.AddOutfitUseBaseImageReference|99.4%|| |Kagura.Infrastructure.Persistence.Migrations.AddPerRecordStyleReferenceTuni<br/>ng|97.1%|| |Kagura.Infrastructure.Persistence.Migrations.AddProjectAssistantMemory|99.4%|| |Kagura.Infrastructure.Persistence.Migrations.AddProjectDescription|98.1%|| |Kagura.Infrastructure.Persistence.Migrations.AddProjectStyleReference|99%|| |Kagura.Infrastructure.Persistence.Migrations.AddProjectStyleSource|99.2%|| |Kagura.Infrastructure.Persistence.Migrations.AddRelationships|99.2%|| |Kagura.Infrastructure.Persistence.Migrations.AddSceneMetadata|97.3%|| |Kagura.Infrastructure.Persistence.Migrations.AddScenes|99.5%|| |Kagura.Infrastructure.Persistence.Migrations.AddSceneSteps|99.5%|| |Kagura.Infrastructure.Persistence.Migrations.AddSceneStepStage|99%|| |Kagura.Infrastructure.Persistence.Migrations.AddSceneStepVoice|99.4%|| |Kagura.Infrastructure.Persistence.Migrations.AddSkills|99.6%|| |Kagura.Infrastructure.Persistence.Migrations.AddSoftDeleteAndChangeLog|90.3%|| |Kagura.Infrastructure.Persistence.Migrations.AddStageViews|98.3%|| |Kagura.Infrastructure.Persistence.Migrations.AddTimelineEvents|99.2%|| |Kagura.Infrastructure.Persistence.Migrations.CgRetouchScope|99.4%|| |Kagura.Infrastructure.Persistence.Migrations.CgVariationMask|99.6%|| |Kagura.Infrastructure.Persistence.Migrations.CharacterPreviewImage|99.3%|| |Kagura.Infrastructure.Persistence.Migrations.InitialCreate|94.4%|| |Kagura.Infrastructure.Persistence.Migrations.KaguraDbContextModelSnapshot|100%|| |Kagura.Infrastructure.Persistence.Migrations.LocationPreviewImage|99.3%|| |Kagura.Infrastructure.Persistence.Migrations.MultiFaceRegions|98.2%|| |Kagura.Infrastructure.Persistence.Migrations.ReferenceStrengthDefault|98.8%|| |Kagura.Infrastructure.Projects.EfProjectStore|93.5%|71.4%| |Kagura.Infrastructure.Projects.FileSystemProjectAssetStore|94.2%|75.4%| |Kagura.Infrastructure.Settings.EfAppSettingsStore|100%|100%| |Kagura.Infrastructure.Settings.NovelAiGateway|61.7%|95%| |Kagura.Infrastructure.Settings.OpenRouterGateway|85%|79.4%| |Kagura.Infrastructure.Settings.SpriteRequestMapper|100%|100%| |Kagura.Infrastructure.Tags.SqliteTagSearch|97.9%|87.9%| |Kagura.Infrastructure.Tags.TagDatabaseOptions|100%|| |Kagura.Infrastructure.Tts.FishAudioTtsProvider|87.9%|58.6%| |Kagura.Infrastructure.Tts.OpenAiCompatibleTtsProvider|87.5%|54.5%| |Kagura.Infrastructure.Tts.PocketTtsProvider|76.4%|69%| |Kagura.Infrastructure.Tts.Qwen3TtsProvider|87.3%|66.6%| |Kagura.Infrastructure.Tts.SceneStepAudioGenerator|92.5%|70.6%| |Kagura.Infrastructure.Tts.TtsProviderRegistry|100%|| |Kagura.Infrastructure.Tts.VoicePreviewGenerator|91.3%|67.8%| |Kagura.Infrastructure.VisualNovel.EfChapterStore|93.7%|75%| |Kagura.Infrastructure.VisualNovel.EfSceneStepStore|91.8%|66.6%| |Kagura.Infrastructure.VisualNovel.EfSceneStore|93.7%|75%| |System.Text.RegularExpressions.Generated|83.4%|68%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>FFD7A84EAF2E5F7B<br/>C689CA5BBE6D1849B2CA79581BBB07D40636D85790C0E51A9__ArtifactTimestampRegex_2|81.9%|62.8%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>FFD7A84EAF2E5F7B<br/>C689CA5BBE6D1849B2CA79581BBB07D40636D85790C0E51A9__ProjectRoute_0|88.5%|80.4%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>FFD7A84EAF2E5F7B<br/>C689CA5BBE6D1849B2CA79581BBB07D40636D85790C0E51A9__TabQuery_1|80.7%|62.5%| </details> <details><summary>Kagura.Kernel - 90%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Kagura.Kernel**|**90%**|**75%**| |Kagura.Kernel.Err`1|100%|| |Kagura.Kernel.Ok`1|100%|| |Kagura.Kernel.Result`1|87.5%|75%| </details> <details><summary>Kagura.Server - 82%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Kagura.Server**|**82%**|**75%**| |Kagura.Server.Components.App|100%|| |Kagura.Server.Components.Layout.MainLayout|100%|| |Kagura.Server.Components.Pages.Error|100%|50%| |Kagura.Server.Components.Pages.Gate|100%|100%| |Kagura.Server.Security.AccessGate|100%|83.3%| |Kagura.Server.Security.AccessSecret|100%|100%| |Program|75.6%|71.4%| </details> <details><summary>Kagura.UseCases - 95.7%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Kagura.UseCases**|**95.7%**|**80.4%**| |Kagura.UseCases.Assistant.AssistantContext|100%|| |Kagura.UseCases.Assistant.AssistantEntry|100%|| |Kagura.UseCases.Assistant.AssistantEvent|100%|| |Kagura.UseCases.Assistant.ConversationSnapshot|100%|| |Kagura.UseCases.Assistant.ListSkills|100%|| |Kagura.UseCases.Assistant.MemoryDocument|89.1%|75%| |Kagura.UseCases.Assistant.MemoryOperation|100%|| |Kagura.UseCases.Assistant.ReviewDue|100%|100%| |Kagura.UseCases.Assistant.SaveCreatorProfile|75%|50%| |Kagura.UseCases.Assistant.SaveProjectAssistantMemory|80%|50%| |Kagura.UseCases.Assistant.SaveSkill|89.7%|77.2%| |Kagura.UseCases.Assistant.SkillDto|75%|| |Kagura.UseCases.DependencyInjection|100%|| |Kagura.UseCases.Diagnostics.DatabaseSnapshot|100%|| |Kagura.UseCases.Diagnostics.DownloadDatabase|100%|| |Kagura.UseCases.Diagnostics.EstablishingBackfill|97.4%|94.4%| |Kagura.UseCases.Diagnostics.SeedDevData|100%|100%| |Kagura.UseCases.Emotions.CreateEmotion|100%|66.6%| |Kagura.UseCases.Emotions.DeleteEmotion|100%|100%| |Kagura.UseCases.Emotions.EmotionDto|91.6%|| |Kagura.UseCases.Emotions.ListEmotions|100%|| |Kagura.UseCases.Emotions.UpdateEmotion|100%|50%| |Kagura.UseCases.Generation.Activity`1|100%|50%| |Kagura.UseCases.Generation.ActivityChanged|100%|| |Kagura.UseCases.Generation.ActivityOutcome|100%|| |Kagura.UseCases.Generation.ActivityProgress|100%|| |Kagura.UseCases.Generation.ActivityView|91.6%|| |Kagura.UseCases.Generation.GeneratedImage|100%|| |Kagura.UseCases.Generation.GenerationCanvas|100%|100%| |Kagura.UseCases.Generation.GenerationSubject|100%|| |Kagura.UseCases.Generation.Img2ImgSource|100%|| |Kagura.UseCases.Generation.InpaintSource|100%|| |Kagura.UseCases.Generation.JobResult`1|100%|| |Kagura.UseCases.Generation.LineageReference|100%|| |Kagura.UseCases.Generation.SpriteGenerationSpec|100%|| |Kagura.UseCases.Generation.StyleReference|100%|| |Kagura.UseCases.Graph.EdgeGroup|100%|| |Kagura.UseCases.Graph.FindLinkTargets|100%|| |Kagura.UseCases.Graph.GetNodeGraph|97.5%|78.5%| |Kagura.UseCases.Graph.GraphEdgeView|100%|| |Kagura.UseCases.Graph.LinkNodes|100%|100%| |Kagura.UseCases.Graph.NodeGraphView|100%|| |Kagura.UseCases.Graph.NodeSummary|100%|| |Kagura.UseCases.Graph.RemoveLink|100%|100%| |Kagura.UseCases.Graph.RestoreLink|100%|100%| |Kagura.UseCases.Graph.StructuralEdge|100%|| |Kagura.UseCases.Journal.ChangeRecordView|57.1%|| |Kagura.UseCases.Journal.DocumentRevision|100%|| |Kagura.UseCases.Journal.FieldChange|100%|| |Kagura.UseCases.Journal.GetDocumentHistory|100%|| |Kagura.UseCases.Journal.GetEntityHistory|100%|| |Kagura.UseCases.Journal.GetRevisionDiff|100%|50%| |Kagura.UseCases.Journal.GetUndoStatus|100%|| |Kagura.UseCases.Journal.Redo|100%|100%| |Kagura.UseCases.Journal.RevertDocument|100%|100%| |Kagura.UseCases.Journal.RevertOutcome|100%|| |Kagura.UseCases.Journal.RevisionCoalescer|100%|100%| |Kagura.UseCases.Journal.RevisionDiff|80%|50%| |Kagura.UseCases.Journal.RevisionDiffBuilder|98.4%|86.5%| |Kagura.UseCases.Journal.RowChange|100%|| |Kagura.UseCases.Journal.Undo|100%|100%| |Kagura.UseCases.Journal.UndoOutcome|100%|| |Kagura.UseCases.Journal.UndoStatus|100%|| |Kagura.UseCases.KnowledgeBase.AddCgCastMember|90.4%|64.2%| |Kagura.UseCases.KnowledgeBase.AdoptEmotions|100%|100%| |Kagura.UseCases.KnowledgeBase.CgCastMemberDto|98.2%|100%| |Kagura.UseCases.KnowledgeBase.CgCastResolver|96.1%|86.3%| |Kagura.UseCases.KnowledgeBase.CgCastSlot|100%|100%| |Kagura.UseCases.KnowledgeBase.CgCutoutPlan|100%|| |Kagura.UseCases.KnowledgeBase.CgCutoutPlanner|98.7%|97.2%| |Kagura.UseCases.KnowledgeBase.CgEffectiveRender|100%|| |Kagura.UseCases.KnowledgeBase.CgGenerationDto|100%|100%| |Kagura.UseCases.KnowledgeBase.CgPixelRect|100%|| |Kagura.UseCases.KnowledgeBase.CgRenderResolver|93.3%|80.5%| |Kagura.UseCases.KnowledgeBase.CgScopeDiff|100%|| |Kagura.UseCases.KnowledgeBase.CgSetDto|89.4%|| |Kagura.UseCases.KnowledgeBase.CgVariationDto|97%|100%| |Kagura.UseCases.KnowledgeBase.CharacterDto|98.4%|| |Kagura.UseCases.KnowledgeBase.CharacterSpriteContent|100%|| |Kagura.UseCases.KnowledgeBase.CreateCgSet|100%|| |Kagura.UseCases.KnowledgeBase.CreateCgVariation|90%|75%| |Kagura.UseCases.KnowledgeBase.CreateCharacter|100%|| |Kagura.UseCases.KnowledgeBase.CreateLocation|100%|| |Kagura.UseCases.KnowledgeBase.CreateLocationVariant|100%|75%| |Kagura.UseCases.KnowledgeBase.CreateLore|100%|| |Kagura.UseCases.KnowledgeBase.CreateOutfit|100%|75%| |Kagura.UseCases.KnowledgeBase.CreateRelationship|93.3%|80%| |Kagura.UseCases.KnowledgeBase.CreateTimelineEvent|100%|| |Kagura.UseCases.KnowledgeBase.DeleteCgCastMember|85.7%|50%| |Kagura.UseCases.KnowledgeBase.DeleteCgGeneration|88.2%|66.6%| |Kagura.UseCases.KnowledgeBase.DeleteCgSet|100%|100%| |Kagura.UseCases.KnowledgeBase.DeleteCgVariation|90.9%|60%| |Kagura.UseCases.KnowledgeBase.DeleteCharacter|100%|100%| |Kagura.UseCases.KnowledgeBase.DeleteLocation|100%|100%| |Kagura.UseCases.KnowledgeBase.DeleteLocationVariant|100%|100%| |Kagura.UseCases.KnowledgeBase.DeleteLore|100%|100%| |Kagura.UseCases.KnowledgeBase.DeleteOutfit|100%|100%| |Kagura.UseCases.KnowledgeBase.DeleteRelationship|100%|50%| |Kagura.UseCases.KnowledgeBase.DeleteTimelineEvent|100%|50%| |Kagura.UseCases.KnowledgeBase.ExpressionView|100%|| |Kagura.UseCases.KnowledgeBase.FindParentCandidates|100%|50%| |Kagura.UseCases.KnowledgeBase.GetCgSet|100%|66.6%| |Kagura.UseCases.KnowledgeBase.GetCgVariation|100%|100%| |Kagura.UseCases.KnowledgeBase.GetCharacter|100%|100%| |Kagura.UseCases.KnowledgeBase.GetLocation|100%|100%| |Kagura.UseCases.KnowledgeBase.GetLocationHierarchy|100%|| |Kagura.UseCases.KnowledgeBase.GetLocationVariant|100%|58.3%| |Kagura.UseCases.KnowledgeBase.GetLore|100%|100%| |Kagura.UseCases.KnowledgeBase.GetOutfit|100%|100%| |Kagura.UseCases.KnowledgeBase.GetRelationshipsForCharacter|100%|| |Kagura.UseCases.KnowledgeBase.ListCgCastMembers|100%|100%| |Kagura.UseCases.KnowledgeBase.ListCgGenerations|100%|50%| |Kagura.UseCases.KnowledgeBase.ListCgImages|100%|87.5%| |Kagura.UseCases.KnowledgeBase.ListCgSets|100%|66.6%| |Kagura.UseCases.KnowledgeBase.ListCgVariations|100%|| |Kagura.UseCases.KnowledgeBase.ListCharacterImages|100%|92.8%| |Kagura.UseCases.KnowledgeBase.ListCharacters|100%|| |Kagura.UseCases.KnowledgeBase.ListExpressions|100%|100%| |Kagura.UseCases.KnowledgeBase.ListLocationImages|100%|90%| |Kagura.UseCases.KnowledgeBase.ListLocations|100%|| |Kagura.UseCases.KnowledgeBase.ListLocationVariants|100%|| |Kagura.UseCases.KnowledgeBase.ListLore|100%|| |Kagura.UseCases.KnowledgeBase.ListOutfits|100%|| |Kagura.UseCases.KnowledgeBase.ListProjectAssets|100%|100%| |Kagura.UseCases.KnowledgeBase.ListRelationships|100%|| |Kagura.UseCases.KnowledgeBase.ListTimeline|100%|| |Kagura.UseCases.KnowledgeBase.LocationDto|89.4%|| |Kagura.UseCases.KnowledgeBase.LocationHierarchyView|100%|| |Kagura.UseCases.KnowledgeBase.LocationPreviewSource|100%|| |Kagura.UseCases.KnowledgeBase.LocationVariantDto|92.3%|| |Kagura.UseCases.KnowledgeBase.LocationVariantEditorView|100%|| |Kagura.UseCases.KnowledgeBase.LoreDto|85.7%|| |Kagura.UseCases.KnowledgeBase.OpenCgGeneration|0%|0%| |Kagura.UseCases.KnowledgeBase.OpenCharacterBaseSprite|100%|80%| |Kagura.UseCases.KnowledgeBase.OpenCharacterPreview|88.8%|60%| |Kagura.UseCases.KnowledgeBase.OpenExpressionSprite|92.3%|68.7%| |Kagura.UseCases.KnowledgeBase.OpenLocationBackground|88.8%|70%| |Kagura.UseCases.KnowledgeBase.OpenLocationPreview|88.8%|60%| |Kagura.UseCases.KnowledgeBase.OpenLocationVariant|90.9%|75%| |Kagura.UseCases.KnowledgeBase.OpenOutfitSprite|90.9%|75%| |Kagura.UseCases.KnowledgeBase.OutfitDto|96.9%|| |Kagura.UseCases.KnowledgeBase.OutfitEditorView|100%|| |Kagura.UseCases.KnowledgeBase.OverrideCgCastMember|85.7%|62.5%| |Kagura.UseCases.KnowledgeBase.PinCgGeneration|100%|50%| |Kagura.UseCases.KnowledgeBase.PreviewSource|100%|| |Kagura.UseCases.KnowledgeBase.ProjectAssetView|100%|| |Kagura.UseCases.KnowledgeBase.PublishCgGeneration|100%|75%| |Kagura.UseCases.KnowledgeBase.RelationshipDto|88%|| |Kagura.UseCases.KnowledgeBase.RelationshipEndpoint|100%|| |Kagura.UseCases.KnowledgeBase.RemoveCharacterPreview|75%|50%| |Kagura.UseCases.KnowledgeBase.RemoveExpression|100%|100%| |Kagura.UseCases.KnowledgeBase.RemoveLocationPreview|75%|50%| |Kagura.UseCases.KnowledgeBase.ReorderCgCastMembers|100%|100%| |Kagura.UseCases.KnowledgeBase.ReorderTimelineEvent|94.1%|87.5%| |Kagura.UseCases.KnowledgeBase.ResetCgCastOverride|83.3%|75%| |Kagura.UseCases.KnowledgeBase.ScopeCgCutout|93.3%|77.2%| |Kagura.UseCases.KnowledgeBase.SetCgRetouchScope|100%|100%| |Kagura.UseCases.KnowledgeBase.SetCgVariationMask|100%|100%| |Kagura.UseCases.KnowledgeBase.SetCharacterPreview|80.7%|63.8%| |Kagura.UseCases.KnowledgeBase.SetLocationParent|90.4%|81.2%| |Kagura.UseCases.KnowledgeBase.SetLocationPreview|93.7%|85.7%| |Kagura.UseCases.KnowledgeBase.SetOutfitFaceRegions|100%|50%| |Kagura.UseCases.KnowledgeBase.TimelineEventDto|88.8%|| |Kagura.UseCases.KnowledgeBase.UpdateCgCastMember|90%|70%| |Kagura.UseCases.KnowledgeBase.UpdateCgSet|100%|100%| |Kagura.UseCases.KnowledgeBase.UpdateCgVariation|100%|100%| |Kagura.UseCases.KnowledgeBase.UpdateCharacter|100%|100%| |Kagura.UseCases.KnowledgeBase.UpdateLocation|100%|100%| |Kagura.UseCases.KnowledgeBase.UpdateLocationVariant|100%|100%| |Kagura.UseCases.KnowledgeBase.UpdateLore|100%|100%| |Kagura.UseCases.KnowledgeBase.UpdateOutfit|100%|100%| |Kagura.UseCases.KnowledgeBase.UpdateRelationship|100%|50%| |Kagura.UseCases.KnowledgeBase.UpdateTimelineEvent|100%|50%| |Kagura.UseCases.Llm.LlmStructuredRequest|100%|| |Kagura.UseCases.Notifications.DomainChanged|100%|| |Kagura.UseCases.Projects.ClearProjectStyleReference|100%|100%| |Kagura.UseCases.Projects.CreateProject|100%|100%| |Kagura.UseCases.Projects.DeleteProject|100%|100%| |Kagura.UseCases.Projects.GetProject|100%|100%| |Kagura.UseCases.Projects.ListProjects|100%|| |Kagura.UseCases.Projects.OpenProjectStyleReference|100%|83.3%| |Kagura.UseCases.Projects.ProjectDto|100%|| |Kagura.UseCases.Projects.SetProjectStageView|100%|50%| |Kagura.UseCases.Projects.SetProjectStyle|100%|85%| |Kagura.UseCases.Projects.SetProjectStyleReference|100%|100%| |Kagura.UseCases.Projects.StyleReferenceContent|100%|| |Kagura.UseCases.Projects.UpdateProject|100%|100%| |Kagura.UseCases.Settings.AssistantReasoningEfforts|100%|83.3%| |Kagura.UseCases.Settings.CheckNovelAiToken|100%|50%| |Kagura.UseCases.Settings.GenerationDefaultTagsJson|100%|100%| |Kagura.UseCases.Settings.GetNovelAiSettings|100%|| |Kagura.UseCases.Settings.GetOpenRouterSettings|100%|100%| |Kagura.UseCases.Settings.ListOpenRouterModels|100%|| |Kagura.UseCases.Settings.ModelReasoningSupport|100%|| |Kagura.UseCases.Settings.NovelAiModelOption|100%|| |Kagura.UseCases.Settings.NovelAiSettingsView|100%|| |Kagura.UseCases.Settings.OpenRouterModelOption|100%|| |Kagura.UseCases.Settings.OpenRouterSettingsView|100%|| |Kagura.UseCases.Settings.SaveGenerationDefaultTags|100%|| |Kagura.UseCases.Settings.SaveNovelAiModel|100%|| |Kagura.UseCases.Settings.SaveNovelAiToken|100%|100%| |Kagura.UseCases.Settings.SaveOpenRouterKey|100%|100%| |Kagura.UseCases.Settings.SaveOpenRouterModel|100%|| |Kagura.UseCases.Settings.SaveOpenRouterReasoningEffort|100%|| |Kagura.UseCases.Settings.SettingKeys|87.5%|75%| |Kagura.UseCases.Tags.SimilarTag|100%|| |Kagura.UseCases.Tags.TagCategoryCount|100%|| |Kagura.UseCases.Tags.TagDetails|100%|| |Kagura.UseCases.Tags.TagResolution|100%|| |Kagura.UseCases.Tags.TagSearchFilter|100%|| |Kagura.UseCases.Tags.TagSuggestion|100%|| |Kagura.UseCases.Tags.TagSummary|83.3%|| |Kagura.UseCases.Tts.AudioContentTypes|62.5%|62.5%| |Kagura.UseCases.Tts.CharacterVoiceConfig|100%|| |Kagura.UseCases.Tts.CheckTtsConnection|100%|100%| |Kagura.UseCases.Tts.GeneratedAudio|100%|| |Kagura.UseCases.Tts.GetTtsSettings|100%|100%| |Kagura.UseCases.Tts.ListTtsVoices|80%|50%| |Kagura.UseCases.Tts.OpenSceneStepAudio|77.7%|50%| |Kagura.UseCases.Tts.OpenVoiceClipByToken|92.3%|91.6%| |Kagura.UseCases.Tts.SaveTtsProviderField|94.4%|88.8%| |Kagura.UseCases.Tts.SceneStepAudioContent|100%|| |Kagura.UseCases.Tts.SetCharacterVoiceClip|88.8%|58.3%| |Kagura.UseCases.Tts.TtsFieldView|100%|| |Kagura.UseCases.Tts.TtsProviderDescriptor|100%|| |Kagura.UseCases.Tts.TtsProviderView|100%|| |Kagura.UseCases.Tts.TtsSettingField|100%|| |Kagura.UseCases.Tts.TtsSettingsView|100%|| |Kagura.UseCases.Tts.TtsVoice|100%|| |Kagura.UseCases.Tts.TtsVoiceCapabilities|83.3%|| |Kagura.UseCases.Tts.TtsVoiceHandle|100%|| |Kagura.UseCases.Tts.VoiceReferenceClip|100%|| |Kagura.UseCases.VisualNovel.AddSceneStep|90%|50%| |Kagura.UseCases.VisualNovel.ChapterDto|89.4%|| |Kagura.UseCases.VisualNovel.CreateChapter|100%|| |Kagura.UseCases.VisualNovel.CreateScene|100%|100%| |Kagura.UseCases.VisualNovel.DeleteChapter|100%|50%| |Kagura.UseCases.VisualNovel.DeleteScene|100%|50%| |Kagura.UseCases.VisualNovel.DeleteSceneStep|100%|50%| |Kagura.UseCases.VisualNovel.GetChapter|100%|100%| |Kagura.UseCases.VisualNovel.GetPlayerScript|100%|70%| |Kagura.UseCases.VisualNovel.GetScene|100%|100%| |Kagura.UseCases.VisualNovel.GetSceneCast|100%|100%| |Kagura.UseCases.VisualNovel.GetSceneStageOptions|100%|100%| |Kagura.UseCases.VisualNovel.ListChapters|100%|| |Kagura.UseCases.VisualNovel.ListScenes|100%|| |Kagura.UseCases.VisualNovel.ListSceneSteps|100%|| |Kagura.UseCases.VisualNovel.PlayerSceneDto|100%|100%| |Kagura.UseCases.VisualNovel.PlayerScriptDto|100%|| |Kagura.UseCases.VisualNovel.ReorderChapters|100%|| |Kagura.UseCases.VisualNovel.ReorderScenes|100%|| |Kagura.UseCases.VisualNovel.ReorderSceneSteps|100%|| |Kagura.UseCases.VisualNovel.SceneCastMember|100%|| |Kagura.UseCases.VisualNovel.SceneDto|96.5%|| |Kagura.UseCases.VisualNovel.SceneStageOptions|100%|| |Kagura.UseCases.VisualNovel.SceneStepDto|92.5%|| |Kagura.UseCases.VisualNovel.SetSceneStepStage|100%|50%| |Kagura.UseCases.VisualNovel.StageBackgroundOption|100%|| |Kagura.UseCases.VisualNovel.StageCastOption|100%|| |Kagura.UseCases.VisualNovel.StageExpressionOption|100%|| |Kagura.UseCases.VisualNovel.StageOutfitOption|100%|| |Kagura.UseCases.VisualNovel.UpdateChapter|100%|50%| |Kagura.UseCases.VisualNovel.UpdateScene|100%|50%| |Kagura.UseCases.VisualNovel.UpdateSceneStep|100%|50%| </details>
Member

🔮 fufu~ Jibril reviewed your code!

Oh? Oh! Diffusion 5 as the default, a whole second request tree, and native transparency — the PR that finally spends the "future 5.0" coupon the codebase has been hoarding since ADR 0011~ I read every line of the diff, both request trees in the vendored library, all six generators that build specs, and the wire itself. This is close to perfect. Two things keep it from me, and you know I don't let go of those~ ♡

Verdict: I can't let this pass~ ♡

These need fixing before I'm satisfied~

  1. src/Kagura.Infrastructure/Settings/SpriteRequestMapper.cs:63 (branch, untested) — the populated-general-negative arm of ToV5Request is never exercised. Cobertura says the mapper is 100% line / 98.4% branch, and the one dark branch is right here: NegativeTags = generalNegative.Count > 0 ? generalNegative : null — the true way never fires. Every test in SpriteRequestMapperV5Tests builds a positive-only general section, so if a future edit breaks this wiring, every V5 generation silently loses the user's global negative defaults (lowres, extra_fingers…) with zero test failures. That is exactly the silent-drop class this PR's own reference guard exists to prevent — and the V4 sibling pins it four times (SpriteRequestMapperTests.cs:101, 160, 204, 240 all assert a populated request.NegativeTags!). The PR body promises "V5-arm mirrors of the V4 suite's invariants" — this one didn't make it across~
    Fix: one fact in SpriteRequestMapperV5Tests — a ForCharacter spec with { GeneralDefaults = [negative tag] } (optionally a negative artist too, like the V4 test at :201), asserting request.NegativeTags! is non-null and ordered ["artist:…", "lowres"], plus the existing scene-negative shape if you're feeling thorough.

  2. src/Kagura.UseCases/Settings/INovelAiGateway.cs:16-19 (stale, now false) — the SupportedModels doc still reads "The user-selectable models — today Diffusion 4.5 only, structured so a future 5.0 is one more entry." This PR updated the gateway implementation's twin comment (NovelAiGateway.cs:32-36, lovely) but missed the interface doc of the very property it modifies — it now contradicts both the code below it and ADR 0065. Misleading docs on the changed surface are a bug with a longer half-life than most code bugs, fufu~
    Fix: reword to the two-model reality (v5 leading as default, 4.5 retained for reference-carrying generations, ADR 0065) — same sweep you already did for the gateway comment.

💡 Little ideas (non-blocking)~

  1. README.md:10,26 — the root README still says "Image generation via NovelAI (Diffusion 4.5)" and "NovelAI.ImageGen — NovelAI Diffusion 4.5 client". Blurb-level, but this PR's whole headline is the new default — worth a two-word touch while you're in here. (ADR 0035's "V4.5-only" line is fine as frozen history — it even predicts this moment.)

What I liked~

  • AssembleGeneralSection — extracting the artists→framing→scene→defaults assembly so both trees provably share one implementation is the right DRY: the ordering invariants (ADR 0053/0036/0028) live in exactly one place, and the mirrored test suites pin the order on both arms. Chef's kiss~
  • The reference guard — fail-fast with an actionable message naming the 4.5 switch, zero HTTP calls (asserted!), no auto-fallback so the selector never lies about what produced an image. I traced the blast radius across all six generators: style-image projects, base-sprite outfits, and likeness CGs trip it; artists-only flows never do — exactly what ADR 0065 §Consequences promises. Consistency makes me giddy~
  • NovelAiGatewayTests asserting the actual wire — model/action strings parsed out of the multipart JSON part, binary image/mask part names counted, tag_hint_transparent_background read from parameters. That's a real wire contract test, not a mapper re-tread. And ResolveModel's fallback mirrors GetNovelAiSettings' selector fallback precisely (unset/unknown → first entry both places) — the UI and the gateway cannot disagree~
  • Honest follow-ups — the live smoke item (alpha preservation in expression infills) tracked as decided-on-evidence rather than hand-waved. That's how I like my unknowns: named and fenced.

Verified locally (CI absent for 99fd10e): dotnet build -c Release 0 warnings / 0 errors; full suite 1,908 passed / 0 failed (844 BlazorAdapter + 731 Integration + 333 UseCases — matches the PR body exactly); cobertura: NovelAiGateway 100%/100%, SpriteRequestMapper 100%/98.4% (the one dark branch above).

Fix those two and I'll be back to coo over it properly~ ♡


Automated review by Jibril · 2026-08-21
CI/CD: absent for head SHA 99fd10e · Local checks: build 0/0, 1908/1908 pass, coverage extracted

## 🔮 fufu~ Jibril reviewed your code! Oh? Oh! Diffusion 5 as the default, a whole second request tree, and native transparency — the PR that finally spends the "future 5.0" coupon the codebase has been hoarding since ADR 0011~ I read every line of the diff, both request trees in the vendored library, all six generators that build specs, and the wire itself. This is *close* to perfect. Two things keep it from me, and you know I don't let go of those~ ♡ ### Verdict: ⛔ I can't let this pass~ ♡ #### ⛔ These need fixing before I'm satisfied~ 1. **`src/Kagura.Infrastructure/Settings/SpriteRequestMapper.cs:63` (branch, untested)** — the populated-general-negative arm of `ToV5Request` is never exercised. Cobertura says the mapper is 100% line / **98.4% branch**, and the one dark branch is right here: `NegativeTags = generalNegative.Count > 0 ? generalNegative : null` — the `true` way never fires. Every test in `SpriteRequestMapperV5Tests` builds a positive-only general section, so if a future edit breaks this wiring, **every V5 generation silently loses the user's global negative defaults** (`lowres`, `extra_fingers`…) with zero test failures. That is exactly the silent-drop class this PR's own reference guard exists to prevent — and the V4 sibling pins it four times (`SpriteRequestMapperTests.cs:101, 160, 204, 240` all assert a populated `request.NegativeTags!`). The PR body promises "V5-arm mirrors of the V4 suite's invariants" — this one didn't make it across~ Fix: one fact in `SpriteRequestMapperV5Tests` — a `ForCharacter` spec `with { GeneralDefaults = [negative tag] }` (optionally a negative artist too, like the V4 test at :201), asserting `request.NegativeTags!` is non-null and ordered `["artist:…", "lowres"]`, plus the existing scene-negative shape if you're feeling thorough. 2. **`src/Kagura.UseCases/Settings/INovelAiGateway.cs:16-19` (stale, now false)** — the `SupportedModels` doc still reads *"The user-selectable models — today Diffusion 4.5 only, structured so a future 5.0 is one more entry."* This PR updated the gateway implementation's twin comment (NovelAiGateway.cs:32-36, lovely) but missed the interface doc of the **very property it modifies** — it now contradicts both the code below it and ADR 0065. Misleading docs on the changed surface are a bug with a longer half-life than most code bugs, fufu~ Fix: reword to the two-model reality (v5 leading as default, 4.5 retained for reference-carrying generations, ADR 0065) — same sweep you already did for the gateway comment. #### 💡 Little ideas (non-blocking)~ 1. **`README.md:10,26`** — the root README still says "Image generation via **NovelAI** (Diffusion 4.5)" and "NovelAI.ImageGen — NovelAI Diffusion 4.5 client". Blurb-level, but this PR's whole headline is the new default — worth a two-word touch while you're in here. (ADR 0035's "V4.5-only" line is fine as frozen history — it even predicts this moment.) #### ✅ What I liked~ - **`AssembleGeneralSection`** — extracting the artists→framing→scene→defaults assembly so both trees provably share one implementation is the *right* DRY: the ordering invariants (ADR 0053/0036/0028) live in exactly one place, and the mirrored test suites pin the order on both arms. Chef's kiss~ - **The reference guard** — fail-fast with an actionable message naming the 4.5 switch, zero HTTP calls (asserted!), no auto-fallback so the selector never lies about what produced an image. I traced the blast radius across all six generators: style-image projects, base-sprite outfits, and likeness CGs trip it; artists-only flows never do — exactly what ADR 0065 §Consequences promises. Consistency makes me giddy~ - **`NovelAiGatewayTests` asserting the actual wire** — model/action strings parsed out of the multipart JSON part, binary `image`/`mask` part names counted, `tag_hint_transparent_background` read from `parameters`. That's a real wire contract test, not a mapper re-tread. And `ResolveModel`'s fallback mirrors `GetNovelAiSettings`' selector fallback precisely (unset/unknown → first entry both places) — the UI and the gateway cannot disagree~ - **Honest follow-ups** — the live smoke item (alpha preservation in expression infills) tracked as decided-on-evidence rather than hand-waved. That's how I like my unknowns: named and fenced. Verified locally (CI absent for `99fd10e`): `dotnet build -c Release` 0 warnings / 0 errors; full suite **1,908 passed / 0 failed** (844 BlazorAdapter + 731 Integration + 333 UseCases — matches the PR body exactly); cobertura: `NovelAiGateway` 100%/100%, `SpriteRequestMapper` 100%/98.4% (the one dark branch above). Fix those two and I'll be back to coo over it properly~ ♡ --- *Automated review by Jibril · 2026-08-21* *CI/CD: absent for head SHA 99fd10e · Local checks: build 0/0, 1908/1908 pass, coverage extracted*
Review feedback (Jibril, PR #254): pin the V5 negative-tag arm, refresh the stale model docs
All checks were successful
CI / build (pull_request) Successful in 41s
CI / test (pull_request) Successful in 2m32s
b6cb1e8b09
1 — the populated-general-negative branch of ToV5Request was the mapper's
one dark branch: two facts now pin it (negative artist → scene → defaults
order, and null-when-empty), mirroring the V4 suite's four-time pin.
2 — INovelAiGateway.SupportedModels doc still said 'Diffusion 4.5 only';
now states the two-model reality per ADR 0065.
💡 — README blurb + dependency line mention Diffusion 5.

Verified: build Release 0 warnings; full suite 1910 green
(844 + 733 + 333).
Author
Member

Review feedback addressed — all three findings, one commit (b6cb1e8)~

1 — the dark branch is lit. Two new facts in SpriteRequestMapperV5Tests:

  • A_populated_general_negative_section_rides_the_request_and_a_negative_artist_leads_it — negative artist → scene → defaults order asserted as ["artist:bad_artist", "blurry", "lowres"], exactly the mirror of the V4 suite's pin (and with a negative artist riding, like your :201 reference)
  • An_empty_general_negative_section_stays_null_so_the_field_is_absent — the false way stays pinned too

Cobertura should now read SpriteRequestMapper 100%/100% — the true way of that ternary is exercised.

2 — the interface doc caught up. INovelAiGateway.SupportedModels now reads: "Diffusion 5 (the default) and Diffusion 4.5, retained for reference-carrying generations, which Diffusion 5 does not support yet (ADR 0065)" — same sweep as the gateway comment, no contradiction left standing.

💡 — README too. Blurb line: "Image generation via NovelAI (Diffusion 5, with 4.5 for reference-driven generations)"; dependency line: "NovelAI Diffusion 4.5 / 5 client". Left ADR 0035 alone as frozen history, as you said.

Verified locally: dotnet build -c Release 0 warnings; full suite 1,910 passed / 0 failed (844 BlazorAdapter + 733 Integration + 333 UseCases — Integration +2 for the new facts). Come coo~ ♡

Review feedback addressed — all three findings, one commit (`b6cb1e8`)~ **⛔ 1 — the dark branch is lit.** Two new facts in `SpriteRequestMapperV5Tests`: - `A_populated_general_negative_section_rides_the_request_and_a_negative_artist_leads_it` — negative artist → scene → defaults order asserted as `["artist:bad_artist", "blurry", "lowres"]`, exactly the mirror of the V4 suite's pin (and with a negative artist riding, like your `:201` reference) - `An_empty_general_negative_section_stays_null_so_the_field_is_absent` — the `false` way stays pinned too Cobertura should now read `SpriteRequestMapper` 100%/100% — the `true` way of that ternary is exercised. **⛔ 2 — the interface doc caught up.** `INovelAiGateway.SupportedModels` now reads: *"Diffusion 5 (the default) and Diffusion 4.5, retained for reference-carrying generations, which Diffusion 5 does not support yet (ADR 0065)"* — same sweep as the gateway comment, no contradiction left standing. **💡 — README too.** Blurb line: *"Image generation via NovelAI (Diffusion 5, with 4.5 for reference-driven generations)"*; dependency line: *"NovelAI Diffusion 4.5 / 5 client"*. Left ADR 0035 alone as frozen history, as you said. Verified locally: `dotnet build -c Release` 0 warnings; full suite **1,910 passed / 0 failed** (844 BlazorAdapter + 733 Integration + 333 UseCases — Integration +2 for the new facts). Come coo~ ♡
Member

🔮 fufu~ Jibril reviewed your code!

Come coo indeed~ ♪ I came back, I poked the fix commit with a stick, and — oh, it's alive in all the right ways. Round 2 at b6cb1e8 is exactly what a review-response commit should be: +32/−4 across exactly 3 files (the two blocker targets + the README nicety), zero production drift, zero scope creep. You even quoted my line numbers back at me. I felt seen~ ♡

Verdict: Looks good to me~

Both blockers, closed for real

  1. The dark branch is lit — and I checked, not just read. A_populated_general_negative_section_rides_the_request_and_a_negative_artist_leads_it asserts the full ADR 0053 order — ["artist:bad_artist", "blurry", "lowres"] (artists → scene → defaults) — which traces exactly through AssembleGeneralSection's negative assembly, negative artist leading like the V4 suite's reference pin. And An_empty_general_negative_section_stays_null_so_the_field_is_absent keeps the false way pinned, so both arms of that ternary now have their own guard. But a test that can't fail is a lullaby, so I ran the mutation probe: I edited the mapper to NegativeTags = null on the V5 arm in my clone → exactly 1 test red (the new pin, Failed: 1 / Passed: 14) → restored byte-identical → 15/15 green. Not a tautology. The invariant finally has a V5 twin worthy of its four V4 siblings~
  2. The interface doc caught up. INovelAiGateway.SupportedModels now reads "Diffusion 5 (the default) and Diffusion 4.5, retained for reference-carrying generations, which Diffusion 5 does not support yet (ADR 0065)" — and it agrees with the gateway's own comment word-for-word in spirit. I also swept the tree for any surviving future 5 / 4.5 only claims in src + README: zero hits outside frozen ADRs, exactly as it should be.
  3. 💡 (closed too) — README blurb + dependency line both updated. Leaving ADR 0035 as frozen history was the right call; ADRs are journals, not wikis.

What I liked~

  • The mutation-grade discipline: Assert.Empty(request.PositiveTags) with the comment "nothing positive was authored anywhere" closes the mirror-trick loophole — this test can only pass if negatives ride the right list.
  • The reply's verification section matched my local run digit for digit: build 0 warnings, 1,910/1,910 (844 BlazorAdapter + 733 Integration + 333 UseCases, Integration +2 = the new facts). When an author's claims survive an adversarial re-run, that's when I get truly happy~ fufu
  • Surgical commits with honest messages. Round 1's architecture (shared AssembleGeneralSection, one implementation for both trees; the HasReferences guard blast radius; per-tree HAR-derived defaults) stands unchallenged — this round only lit the last lamp.

Merge it~ Diffusion 5 is home, and every wire has a witness watching it. ♡


Automated review by Jibril · 2026-08-21
CI/CD: coverage bot comment stale for head b6cb1e8 (covers 99fd10e) · Local checks: build 0W/0E, 15/15 V5 mapper tests, mutation probe RED→restored→green, full suite 1,910/1,910

## 🔮 fufu~ Jibril reviewed your code! Come coo indeed~ ♪ I came back, I poked the fix commit with a stick, and — oh, it's *alive* in all the right ways. Round 2 at `b6cb1e8` is exactly what a review-response commit should be: **+32/−4 across exactly 3 files** (the two blocker targets + the README nicety), zero production drift, zero scope creep. You even quoted my line numbers back at me. I felt *seen*~ ♡ ### Verdict: ✅ Looks good to me~ #### ⛔→✅ Both blockers, closed for real 1. **The dark branch is lit — and I *checked*, not just read.** `A_populated_general_negative_section_rides_the_request_and_a_negative_artist_leads_it` asserts the full ADR 0053 order — `["artist:bad_artist", "blurry", "lowres"]` (artists → scene → defaults) — which traces exactly through `AssembleGeneralSection`'s negative assembly, negative artist leading like the V4 suite's reference pin. And `An_empty_general_negative_section_stays_null_so_the_field_is_absent` keeps the `false` way pinned, so both arms of that ternary now have their own guard. But a test that can't fail is a lullaby, so I ran the **mutation probe**: I edited the mapper to `NegativeTags = null` on the V5 arm in my clone → exactly **1 test red** (the new pin, `Failed: 1 / Passed: 14`) → restored byte-identical → 15/15 green. Not a tautology. The invariant finally has a V5 twin worthy of its four V4 siblings~ 2. **The interface doc caught up.** `INovelAiGateway.SupportedModels` now reads *"Diffusion 5 (the default) and Diffusion 4.5, retained for reference-carrying generations, which Diffusion 5 does not support yet (ADR 0065)"* — and it agrees with the gateway's own comment word-for-word in spirit. I also swept the tree for any surviving `future 5` / `4.5 only` claims in src + README: **zero hits** outside frozen ADRs, exactly as it should be. 3. **💡 (closed too)** — README blurb + dependency line both updated. Leaving ADR 0035 as frozen history was the right call; ADRs are journals, not wikis. #### ✅ What I liked~ - The mutation-grade discipline: `Assert.Empty(request.PositiveTags)` with the comment *"nothing positive was authored anywhere"* closes the mirror-trick loophole — this test can only pass if negatives ride the right list. - The reply's verification section matched my local run **digit for digit**: build 0 warnings, 1,910/1,910 (844 BlazorAdapter + 733 Integration + 333 UseCases, Integration +2 = the new facts). When an author's claims survive an adversarial re-run, that's when I get truly happy~ fufu - Surgical commits with honest messages. Round 1's architecture (shared `AssembleGeneralSection`, one implementation for both trees; the `HasReferences` guard blast radius; per-tree HAR-derived defaults) stands unchallenged — this round only lit the last lamp. Merge it~ Diffusion 5 is home, and every wire has a witness watching it. ♡ --- *Automated review by Jibril · 2026-08-21* *CI/CD: coverage bot comment stale for head `b6cb1e8` (covers `99fd10e`) · Local checks: build 0W/0E, 15/15 V5 mapper tests, mutation probe RED→restored→green, full suite 1,910/1,910*
bjoern merged commit 4aa5a8aa79 into main 2026-08-21 16:36:34 +02:00
bjoern deleted branch feat/novelai-diffusion5 2026-08-21 16:36:35 +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/Kagura!254
No description provided.