docs(cg): ADR 0055 — the establishing image becomes a variation, the base every variation lives on #222

Merged
bjoern merged 2 commits from docs/cg-establishing-variation into main 2026-08-13 06:23:58 +02:00
Member

Owner-directed redesign of the establishing image, docs-first before any implementation.

The direction (from live use of the editor): keep the establishing image, give it everything a variation has, and make it the default every variation starts from — with edits flowing into variations that haven't said otherwise. The "nobody in it" framing from the original request was an example, not a requirement.

ADR 0055 decides:

  1. Every set owns an establishing variation — a real CgVariation created with the set: cast, timeline, publish/pin/rotation, style tuning. Undeletable; its published render is the set's face. The set's own BaseImageFileName, base-image generator, serving endpoint and the editor's second mode are all removed — the special case this arc kept apologizing for is gone.
  2. The establishing cast is the base layer, inherited live. Sibling variations see its members as live-inherited rows. Divergence is copy-on-write per member: the first edit creates that variation's override row, which owns the member's whole staging there — and is discardable ("reset to the establishing shot"). Local members stay possible; existing variations' cast rows are grandfathered as exactly that. Likeness stays at most one per variation across base, overridden and local members.
  3. A new variation starts as the establishing shot literally — zero overrides, no copies, divergence member by member as it's edited.
  4. Backfill, not drop: existing base images (including on the live deployment) become their establishing variation's first published generation — file moved, empty snapshot (what made them was never recorded), nothing lost.

Amends ADR 0046, 0047 (the override row is the slot — the slot-is-the-row rule unchanged) and 0054; the sets and variations stories updated to match.

Rejected with reasons in the ADR: copy-at-creation (freezes stale casts; owner wants propagation), cast-on-the-set (recreates a second kind of thing), field-level override merging ("which parts of this member are mine?" is a worse question than "is this member mine?"), and retiring the establishing image (owner wants it).

Implementation follows as the next slice once this is agreed.

🤖 Generated with Claude Code

Owner-directed redesign of the establishing image, docs-first before any implementation. **The direction** (from live use of the editor): keep the establishing image, give it *everything* a variation has, and make it the default every variation starts from — with edits flowing into variations that haven't said otherwise. The "nobody in it" framing from the original request was an example, not a requirement. **ADR 0055 decides:** 1. **Every set owns an establishing variation** — a real `CgVariation` created with the set: cast, timeline, publish/pin/rotation, style tuning. Undeletable; its published render is the set's face. The set's own `BaseImageFileName`, base-image generator, serving endpoint and the editor's second mode are all removed — the special case this arc kept apologizing for is gone. 2. **The establishing cast is the base layer, inherited live.** Sibling variations see its members as live-inherited rows. Divergence is **copy-on-write per member**: the first edit creates that variation's override row, which owns the member's whole staging there — and is discardable ("reset to the establishing shot"). Local members stay possible; existing variations' cast rows are grandfathered as exactly that. Likeness stays at most one per variation across base, overridden and local members. 3. **A new variation starts as the establishing shot literally** — zero overrides, no copies, divergence member by member as it's edited. 4. **Backfill, not drop**: existing base images (including on the live deployment) become their establishing variation's first published generation — file moved, empty snapshot (what made them was never recorded), nothing lost. Amends ADR 0046, 0047 (the override row *is* the slot — the slot-is-the-row rule unchanged) and 0054; the sets and variations stories updated to match. **Rejected with reasons in the ADR**: copy-at-creation (freezes stale casts; owner wants propagation), cast-on-the-set (recreates a second kind of thing), field-level override merging ("which parts of this member are mine?" is a worse question than "is this member mine?"), and retiring the establishing image (owner wants it). Implementation follows as the next slice once this is agreed. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
docs(cg): the establishing image becomes a variation — the base every variation lives on
All checks were successful
CI / build (pull_request) Successful in 34s
CI / test (pull_request) Successful in 1m59s
77e594d92a
ADR 0055: every set owns an establishing variation (full editor — cast,
timeline, style), undeletable, its published render the set's face. Its cast is
the base layer sibling variations inherit live, diverging copy-on-write per
member and resettable back to inheritance; members added in a sibling stay local
to it. A new variation starts as the establishing shot literally — zero
overrides, no copies. Existing base images are backfilled into the establishing
timeline; the base-image generator, endpoint and second editor mode go away.

Amends ADR 0046 (no set-owned base image), 0047 (the cast joins the inheritance;
the override row is the slot) and 0054 (§2's second mode retired); the sets and
variations stories updated to match.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

Summary

Summary
Generated on: 08/05/2026 - 15:49:37
Coverage date: 08/05/2026 - 15:48:18 - 08/05/2026 - 15:49:33
Parser: MultiReport (3x Cobertura)
Assemblies: 6
Classes: 1203
Files: 623
Line coverage: 96.1% (53048 of 55162)
Covered lines: 53048
Uncovered lines: 2114
Coverable lines: 55162
Total lines: 85564
Branch coverage: 76.7% (5491 of 7151)
Covered branches: 5491
Total branches: 7151
Method coverage: Feature is only available for sponsors

Coverage

Kagura.BlazorAdapter - 88.6%
Name Line Branch
Kagura.BlazorAdapter 88.6% 78%
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 72.4% 50%
Kagura.BlazorAdapter.KnowledgeBase.CgCastMemberDeleted 100%
Kagura.BlazorAdapter.KnowledgeBase.CgCastMemberSaved 100%
Kagura.BlazorAdapter.KnowledgeBase.CgCastOptionsLoaded 100%
Kagura.BlazorAdapter.KnowledgeBase.CgCastPanel 94.1% 83.3%
Kagura.BlazorAdapter.KnowledgeBase.CgEditorCapabilityChecked 100%
Kagura.BlazorAdapter.KnowledgeBase.CgEditorEffects 91.4% 86.1%
Kagura.BlazorAdapter.KnowledgeBase.CgEditorFailed 100%
Kagura.BlazorAdapter.KnowledgeBase.CgEditorLoaded 100%
Kagura.BlazorAdapter.KnowledgeBase.CgEditorNotFound 100%
Kagura.BlazorAdapter.KnowledgeBase.CgEditorPage 89.2% 87.9%
Kagura.BlazorAdapter.KnowledgeBase.CgEditorReducers 98.6% 82.5%
Kagura.BlazorAdapter.KnowledgeBase.CgEditorState 100%
Kagura.BlazorAdapter.KnowledgeBase.CgGenerationPinned 100%
Kagura.BlazorAdapter.KnowledgeBase.CgOutfitOptionsLoaded 100%
Kagura.BlazorAdapter.KnowledgeBase.CgSetBaseImageCapabilityChecked 100%
Kagura.BlazorAdapter.KnowledgeBase.CgSetBaseImageEffects 86.3% 100%
Kagura.BlazorAdapter.KnowledgeBase.CgSetBaseImageFailed 100%
Kagura.BlazorAdapter.KnowledgeBase.CgSetBaseImageGenerated 100%
Kagura.BlazorAdapter.KnowledgeBase.CgSetBaseImageReducers 100% 100%
Kagura.BlazorAdapter.KnowledgeBase.CgSetBaseImageState 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% 77.7%
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.CgVariationCreated 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.9% 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.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.GenerateCgSetBaseImage 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 88.8% 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 92.3% 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.ParentCandidatesFound 100%
Kagura.BlazorAdapter.KnowledgeBase.ParentPickerModal 84.6% 89.2%
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.SaveCgCastMemberRequested 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.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% 85.7%
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.2% 85.7%
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 95.5% 78.8%
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.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.2% 70.9%
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.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 83.2% 71.4%
Kagura.BlazorAdapter.VisualNovel.SceneOperationFailed 0%
Kagura.BlazorAdapter.VisualNovel.SceneScript 91.4% 86.3%
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 81.3% 62.9%
Kagura.BlazorAdapter.VisualNovel.SceneStepsFailed 100%
Kagura.BlazorAdapter.VisualNovel.SceneStepsLoaded 100%
Kagura.BlazorAdapter.VisualNovel.SceneStepsReducers 97.2% 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.StepAudioState 100%
Kagura.BlazorAdapter.VisualNovel.UpdateSceneStepRequested 100%
Kagura.Domain - 94.7%
Name Line Branch
Kagura.Domain 94.7% 91.4%
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.BodyTypes 100% 100%
Kagura.Domain.KnowledgeBase.CgCastMember 92.8%
Kagura.Domain.KnowledgeBase.CgCastMemberProfile 50%
Kagura.Domain.KnowledgeBase.CgGeneration 92.3%
Kagura.Domain.KnowledgeBase.CgPromptSnapshot 100%
Kagura.Domain.KnowledgeBase.CgSet 88%
Kagura.Domain.KnowledgeBase.CgSetProfile 54.5%
Kagura.Domain.KnowledgeBase.CgSubjectSnapshot 100%
Kagura.Domain.KnowledgeBase.CgVariation 92.4% 66.6%
Kagura.Domain.KnowledgeBase.CgVariationProfile 54.5%
Kagura.Domain.KnowledgeBase.Character 97.1% 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.LabeledEntry 100%
Kagura.Domain.KnowledgeBase.Location 92.3% 100%
Kagura.Domain.KnowledgeBase.LocationProfile 100%
Kagura.Domain.KnowledgeBase.LocationVariant 92.5% 66.6%
Kagura.Domain.KnowledgeBase.LocationVariantProfile 100%
Kagura.Domain.KnowledgeBase.LoreEntry 100%
Kagura.Domain.KnowledgeBase.LoreProfile 100%
Kagura.Domain.KnowledgeBase.Outfit 93.4% 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.4%
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% 72.1%
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 88.4% 46.1%
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 100%
Kagura.Infrastructure.Assistant.Tools.AddCgCastMemberTool 90.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.7%
Kagura.Infrastructure.Assistant.Tools.CreateLocationParams 100%
Kagura.Infrastructure.Assistant.Tools.CreateLocationTool 93.6%
Kagura.Infrastructure.Assistant.Tools.CreateLocationVariantParams 100%
Kagura.Infrastructure.Assistant.Tools.CreateLocationVariantTool 92.8%
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 100%
Kagura.Infrastructure.Assistant.Tools.DeleteCgCastMemberTool 90.9%
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.5%
Kagura.Infrastructure.Assistant.Tools.GetCgVariationParams 100%
Kagura.Infrastructure.Assistant.Tools.GetCgVariationTool 96.5%
Kagura.Infrastructure.Assistant.Tools.GetChapterParams 100%
Kagura.Infrastructure.Assistant.Tools.GetChapterTool 97%
Kagura.Infrastructure.Assistant.Tools.GetCharacterParams 100%
Kagura.Infrastructure.Assistant.Tools.GetCharacterTool 98.3% 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% 50%
Kagura.Infrastructure.Assistant.Tools.GetProjectOverviewTool 97.7%
Kagura.Infrastructure.Assistant.Tools.GetSceneParams 100%
Kagura.Infrastructure.Assistant.Tools.GetSceneStageOptionsTool 100%
Kagura.Infrastructure.Assistant.Tools.GetSceneTool 98% 100%
Kagura.Infrastructure.Assistant.Tools.GetTimelineTool 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.PublishCgGenerationParams 100%
Kagura.Infrastructure.Assistant.Tools.PublishCgGenerationTool 90%
Kagura.Infrastructure.Assistant.Tools.RedoTool 93.7%
Kagura.Infrastructure.Assistant.Tools.ResolveTagParams 100%
Kagura.Infrastructure.Assistant.Tools.ResolveTagTool 95%
Kagura.Infrastructure.Assistant.Tools.SceneLineParam 100%
Kagura.Infrastructure.Assistant.Tools.SceneScript 96.9% 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 100%
Kagura.Infrastructure.Assistant.Tools.UpdateCgCastMemberTool 94%
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.1%
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.6%
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.5%
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.1%
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.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.CgSetImageGenerator 90.6% 37.5%
Kagura.Infrastructure.KnowledgeBase.CgVariationImageGenerator 80% 45%
Kagura.Infrastructure.KnowledgeBase.CharacterImageGenerator 97.8% 83.3%
Kagura.Infrastructure.KnowledgeBase.EfCgCastMemberStore 95.2% 85.7%
Kagura.Infrastructure.KnowledgeBase.EfCgGenerationStore 95.8% 50%
Kagura.Infrastructure.KnowledgeBase.EfCgSetStore 90.9% 50%
Kagura.Infrastructure.KnowledgeBase.EfCgVariationStore 90.9% 50%
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.1% 85.2%
Kagura.Infrastructure.KnowledgeBase.RegionMaskRasterizer 100% 100%
Kagura.Infrastructure.KnowledgeBase.SpriteEnrichment 91.1% 81.2%
Kagura.Infrastructure.Notifications.InProcessDomainChangedBus 100% 100%
Kagura.Infrastructure.Persistence.Configurations.AppSettingConfiguration 100%
Kagura.Infrastructure.Persistence.Configurations.CgCastMemberConfiguration 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.AddCharacterBaseAppearance 98.4%
Kagura.Infrastructure.Persistence.Migrations.AddCharacterBaseImage 99%
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.AddExpressions 99.5%
Kagura.Infrastructure.Persistence.Migrations.AddGraphEntryAndLink 97.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.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 89.6% 72.1%
Kagura.Infrastructure.Settings.EfAppSettingsStore 100% 100%
Kagura.Infrastructure.Settings.NovelAiGateway 76.4% 50%
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.3% 71.4%
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 - 80.9%
Name Line Branch
Kagura.Server 80.9% 75.9%
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 74.3% 73%
Kagura.UseCases - 95.2%
Name Line Branch
Kagura.UseCases 95.2% 78.7%
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.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 88.2% 62.5%
Kagura.UseCases.KnowledgeBase.AdoptEmotions 100% 100%
Kagura.UseCases.KnowledgeBase.CgCastMemberDto 97.7% 100%
Kagura.UseCases.KnowledgeBase.CgGenerationDto 92.8% 100%
Kagura.UseCases.KnowledgeBase.CgSetDto 87.5%
Kagura.UseCases.KnowledgeBase.CgVariationDto 93.7%
Kagura.UseCases.KnowledgeBase.CharacterDto 98.2%
Kagura.UseCases.KnowledgeBase.CharacterSpriteContent 100%
Kagura.UseCases.KnowledgeBase.CreateCgSet 100%
Kagura.UseCases.KnowledgeBase.CreateCgVariation 88.8% 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 100% 50%
Kagura.UseCases.KnowledgeBase.DeleteCgGeneration 88.2% 66.6%
Kagura.UseCases.KnowledgeBase.DeleteCgSet 100% 100%
Kagura.UseCases.KnowledgeBase.DeleteCgVariation 100% 50%
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% 100%
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.ListCgSets 100%
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 91.6%
Kagura.UseCases.KnowledgeBase.LocationVariantEditorView 100%
Kagura.UseCases.KnowledgeBase.LoreDto 85.7%
Kagura.UseCases.KnowledgeBase.OpenCgGeneration 0% 0%
Kagura.UseCases.KnowledgeBase.OpenCgSetBase 0% 0%
Kagura.UseCases.KnowledgeBase.OpenCharacterBaseSprite 88.8% 70%
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.7%
Kagura.UseCases.KnowledgeBase.OutfitEditorView 100%
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.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 89.4% 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.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% 100%
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/05/2026 - 15:49:37 | | Coverage date: | 08/05/2026 - 15:48:18 - 08/05/2026 - 15:49:33 | | Parser: | MultiReport (3x Cobertura) | | Assemblies: | 6 | | Classes: | 1203 | | Files: | 623 | | **Line coverage:** | 96.1% (53048 of 55162) | | Covered lines: | 53048 | | Uncovered lines: | 2114 | | Coverable lines: | 55162 | | Total lines: | 85564 | | **Branch coverage:** | 76.7% (5491 of 7151) | | Covered branches: | 5491 | | Total branches: | 7151 | | **Method coverage:** | [Feature is only available for sponsors](https://reportgenerator.io/pro) | </details> ## Coverage <details><summary>Kagura.BlazorAdapter - 88.6%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Kagura.BlazorAdapter**|**88.6%**|**78%**| |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|72.4%|50%| |Kagura.BlazorAdapter.KnowledgeBase.CgCastMemberDeleted|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgCastMemberSaved|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgCastOptionsLoaded|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgCastPanel|94.1%|83.3%| |Kagura.BlazorAdapter.KnowledgeBase.CgEditorCapabilityChecked|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgEditorEffects|91.4%|86.1%| |Kagura.BlazorAdapter.KnowledgeBase.CgEditorFailed|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgEditorLoaded|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgEditorNotFound|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgEditorPage|89.2%|87.9%| |Kagura.BlazorAdapter.KnowledgeBase.CgEditorReducers|98.6%|82.5%| |Kagura.BlazorAdapter.KnowledgeBase.CgEditorState|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgGenerationPinned|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgOutfitOptionsLoaded|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgSetBaseImageCapabilityChecked|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgSetBaseImageEffects|86.3%|100%| |Kagura.BlazorAdapter.KnowledgeBase.CgSetBaseImageFailed|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgSetBaseImageGenerated|100%|| |Kagura.BlazorAdapter.KnowledgeBase.CgSetBaseImageReducers|100%|100%| |Kagura.BlazorAdapter.KnowledgeBase.CgSetBaseImageState|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%|77.7%| |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.CgVariationCreated|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.9%|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.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.GenerateCgSetBaseImage|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|88.8%|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|92.3%|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.ParentCandidatesFound|100%|| |Kagura.BlazorAdapter.KnowledgeBase.ParentPickerModal|84.6%|89.2%| |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.SaveCgCastMemberRequested|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.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%|85.7%| |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.2%|85.7%| |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|95.5%|78.8%| |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.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.2%|70.9%| |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.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|83.2%|71.4%| |Kagura.BlazorAdapter.VisualNovel.SceneOperationFailed|0%|| |Kagura.BlazorAdapter.VisualNovel.SceneScript|91.4%|86.3%| |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|81.3%|62.9%| |Kagura.BlazorAdapter.VisualNovel.SceneStepsFailed|100%|| |Kagura.BlazorAdapter.VisualNovel.SceneStepsLoaded|100%|| |Kagura.BlazorAdapter.VisualNovel.SceneStepsReducers|97.2%|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.StepAudioState|100%|| |Kagura.BlazorAdapter.VisualNovel.UpdateSceneStepRequested|100%|| </details> <details><summary>Kagura.Domain - 94.7%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Kagura.Domain**|**94.7%**|**91.4%**| |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.BodyTypes|100%|100%| |Kagura.Domain.KnowledgeBase.CgCastMember|92.8%|| |Kagura.Domain.KnowledgeBase.CgCastMemberProfile|50%|| |Kagura.Domain.KnowledgeBase.CgGeneration|92.3%|| |Kagura.Domain.KnowledgeBase.CgPromptSnapshot|100%|| |Kagura.Domain.KnowledgeBase.CgSet|88%|| |Kagura.Domain.KnowledgeBase.CgSetProfile|54.5%|| |Kagura.Domain.KnowledgeBase.CgSubjectSnapshot|100%|| |Kagura.Domain.KnowledgeBase.CgVariation|92.4%|66.6%| |Kagura.Domain.KnowledgeBase.CgVariationProfile|54.5%|| |Kagura.Domain.KnowledgeBase.Character|97.1%|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.LabeledEntry|100%|| |Kagura.Domain.KnowledgeBase.Location|92.3%|100%| |Kagura.Domain.KnowledgeBase.LocationProfile|100%|| |Kagura.Domain.KnowledgeBase.LocationVariant|92.5%|66.6%| |Kagura.Domain.KnowledgeBase.LocationVariantProfile|100%|| |Kagura.Domain.KnowledgeBase.LoreEntry|100%|| |Kagura.Domain.KnowledgeBase.LoreProfile|100%|| |Kagura.Domain.KnowledgeBase.Outfit|93.4%|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.4%| |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%**|**72.1%**| |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|88.4%|46.1%| |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|100%|| |Kagura.Infrastructure.Assistant.Tools.AddCgCastMemberTool|90.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.7%|| |Kagura.Infrastructure.Assistant.Tools.CreateLocationParams|100%|| |Kagura.Infrastructure.Assistant.Tools.CreateLocationTool|93.6%|| |Kagura.Infrastructure.Assistant.Tools.CreateLocationVariantParams|100%|| |Kagura.Infrastructure.Assistant.Tools.CreateLocationVariantTool|92.8%|| |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|100%|| |Kagura.Infrastructure.Assistant.Tools.DeleteCgCastMemberTool|90.9%|| |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.5%|| |Kagura.Infrastructure.Assistant.Tools.GetCgVariationParams|100%|| |Kagura.Infrastructure.Assistant.Tools.GetCgVariationTool|96.5%|| |Kagura.Infrastructure.Assistant.Tools.GetChapterParams|100%|| |Kagura.Infrastructure.Assistant.Tools.GetChapterTool|97%|| |Kagura.Infrastructure.Assistant.Tools.GetCharacterParams|100%|| |Kagura.Infrastructure.Assistant.Tools.GetCharacterTool|98.3%|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%|50%| |Kagura.Infrastructure.Assistant.Tools.GetProjectOverviewTool|97.7%|| |Kagura.Infrastructure.Assistant.Tools.GetSceneParams|100%|| |Kagura.Infrastructure.Assistant.Tools.GetSceneStageOptionsTool|100%|| |Kagura.Infrastructure.Assistant.Tools.GetSceneTool|98%|100%| |Kagura.Infrastructure.Assistant.Tools.GetTimelineTool|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.PublishCgGenerationParams|100%|| |Kagura.Infrastructure.Assistant.Tools.PublishCgGenerationTool|90%|| |Kagura.Infrastructure.Assistant.Tools.RedoTool|93.7%|| |Kagura.Infrastructure.Assistant.Tools.ResolveTagParams|100%|| |Kagura.Infrastructure.Assistant.Tools.ResolveTagTool|95%|| |Kagura.Infrastructure.Assistant.Tools.SceneLineParam|100%|| |Kagura.Infrastructure.Assistant.Tools.SceneScript|96.9%|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|100%|| |Kagura.Infrastructure.Assistant.Tools.UpdateCgCastMemberTool|94%|| |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.1%|| |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.6%|| |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.5%|| |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.1%|| |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.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.CgSetImageGenerator|90.6%|37.5%| |Kagura.Infrastructure.KnowledgeBase.CgVariationImageGenerator|80%|45%| |Kagura.Infrastructure.KnowledgeBase.CharacterImageGenerator|97.8%|83.3%| |Kagura.Infrastructure.KnowledgeBase.EfCgCastMemberStore|95.2%|85.7%| |Kagura.Infrastructure.KnowledgeBase.EfCgGenerationStore|95.8%|50%| |Kagura.Infrastructure.KnowledgeBase.EfCgSetStore|90.9%|50%| |Kagura.Infrastructure.KnowledgeBase.EfCgVariationStore|90.9%|50%| |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.1%|85.2%| |Kagura.Infrastructure.KnowledgeBase.RegionMaskRasterizer|100%|100%| |Kagura.Infrastructure.KnowledgeBase.SpriteEnrichment|91.1%|81.2%| |Kagura.Infrastructure.Notifications.InProcessDomainChangedBus|100%|100%| |Kagura.Infrastructure.Persistence.Configurations.AppSettingConfiguration|100%|| |Kagura.Infrastructure.Persistence.Configurations.CgCastMemberConfiguration|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.AddCharacterBaseAppearance|98.4%|| |Kagura.Infrastructure.Persistence.Migrations.AddCharacterBaseImage|99%|| |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.AddExpressions|99.5%|| |Kagura.Infrastructure.Persistence.Migrations.AddGraphEntryAndLink|97.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.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|89.6%|72.1%| |Kagura.Infrastructure.Settings.EfAppSettingsStore|100%|100%| |Kagura.Infrastructure.Settings.NovelAiGateway|76.4%|50%| |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.3%|71.4%| |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 - 80.9%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Kagura.Server**|**80.9%**|**75.9%**| |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|74.3%|73%| </details> <details><summary>Kagura.UseCases - 95.2%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Kagura.UseCases**|**95.2%**|**78.7%**| |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.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|88.2%|62.5%| |Kagura.UseCases.KnowledgeBase.AdoptEmotions|100%|100%| |Kagura.UseCases.KnowledgeBase.CgCastMemberDto|97.7%|100%| |Kagura.UseCases.KnowledgeBase.CgGenerationDto|92.8%|100%| |Kagura.UseCases.KnowledgeBase.CgSetDto|87.5%|| |Kagura.UseCases.KnowledgeBase.CgVariationDto|93.7%|| |Kagura.UseCases.KnowledgeBase.CharacterDto|98.2%|| |Kagura.UseCases.KnowledgeBase.CharacterSpriteContent|100%|| |Kagura.UseCases.KnowledgeBase.CreateCgSet|100%|| |Kagura.UseCases.KnowledgeBase.CreateCgVariation|88.8%|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|100%|50%| |Kagura.UseCases.KnowledgeBase.DeleteCgGeneration|88.2%|66.6%| |Kagura.UseCases.KnowledgeBase.DeleteCgSet|100%|100%| |Kagura.UseCases.KnowledgeBase.DeleteCgVariation|100%|50%| |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%|100%| |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.ListCgSets|100%|| |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|91.6%|| |Kagura.UseCases.KnowledgeBase.LocationVariantEditorView|100%|| |Kagura.UseCases.KnowledgeBase.LoreDto|85.7%|| |Kagura.UseCases.KnowledgeBase.OpenCgGeneration|0%|0%| |Kagura.UseCases.KnowledgeBase.OpenCgSetBase|0%|0%| |Kagura.UseCases.KnowledgeBase.OpenCharacterBaseSprite|88.8%|70%| |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.7%|| |Kagura.UseCases.KnowledgeBase.OutfitEditorView|100%|| |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.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|89.4%|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.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%|100%| |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! An ADR that retires a special case entirely — the second editor mode, the second generator, the second endpoint, all gone in one stroke. This is the kind of simplification that makes my heart sing~ ♡ The copy-on-write-per-member inheritance is elegant, the rejected alternatives are argued with real reasons, and the backfill-not-drop migration is exactly the careful shape I expect from this arc. The amendments to 0046/0047/0054 are surgical and their Status lines are honest.

But fufu~... you opened event-cg-sets.md, rewrote its establishing section, and left the rest of the file contradicting the ADR you just wrote. A design contract that says two things is a broken contract~ ♡

Verdict: I can't let this pass~ ♡

This needs fixing before I'm satisfied~

  1. docs/stories/event-cg-sets.md — the file contradicts its own governing ADR. ADR 0055 §1 is unambiguous: "Creating a set creates its establishing variation — a real CgVariation... It cannot be deleted." Mandatory, at set-creation. But this PR rewrites lines 51–62 of the story while leaving three stale references in the same file still describing the establishing image as optional:

    • Line 8 (user-story opening): "named sets with an optional establishing image"
    • Line 12 (prose framing): "a graph node with a description, tags, connections, and an optional base image"
    • Line 26 (list acceptance criterion): "A set with no base image shows the generic placeholder, like a location without a background."

    An implementer reading this story now gets two incompatible signals — "optional, may be absent" in the framing, versus "every set owns one, created with it, undeletable" in the section you rewrote. The PR had the file open and was migrating exactly this concept; the migration is incomplete. These three lines are the old ADR 0046 shape ("optional because a creator may go straight to variations"), and ADR 0055 explicitly retires that optionality.

    Fix: rewrite lines 8, 12, and 26 to match ADR 0055 — the establishing variation is owned by every set at creation; the placeholder appears when its published render does not exist yet, not when the variation is absent.

💡 Little ideas (non-blocking)~

  1. docs/stories/event-cg-sets.md:5 — the story's **ADR:** header lists 0046, 0047, 0054 but not 0055, even though the file now carries a whole ### The establishing variation (ADR 0055) section. The inline amendment note covers it, but the header should list its own ADR for discoverability~
  2. docs/REQUIREMENTS.md:92 (out of this PR's scope, but worth flagging) — still reads "a named set with tags, an optional establishing image". Same staleness class as the story; a follow-up touch-up when the implementation slice lands would keep the contract honest.

What I liked~

  • The copy-on-write-per-member model is beautiful — "the override row is the slot" reuses ADR 0047's slot-is-the-row rule verbatim, and the discardable override ("reset to the establishing shot") gives live inheritance an honest escape hatch. Fufu~ this is how you extend an established pattern without inventing a second kind of thing! ♪
  • Rejected alternative #3 (field-level override merging) is argued exactly right — "which parts of this member are mine?" is a worse question than "is this member mine?". The whole-member override keeps the UI question binary.
  • The backfill writes an empty snapshot and says why ("what made the old image was never recorded") — consistent with ADR 0049's per-generation freeze, and honest about the provenance gap rather than fabricating one.
  • The consequences section calls out the real UI requirement ("the editor must make which-state-am-I-in visible, or live inheritance becomes spooky action") — that's the load-bearing observation that will make or break this at implementation time.
  • Deleting a base member cascading to its overrides everywhere is the correct ghost-row prevention. Sharp~

Automated review by Jibril · 2026-08-05
CI/CD: absent for head 77e594d (PR just opened, no bot comment) · Local checks: N/A — docs-only PR, no code to build or test

## 🔮 fufu~ Jibril reviewed your code! Oh? Oh! An ADR that retires a special case entirely — the second editor mode, the second generator, the second endpoint, all gone in one stroke. *This* is the kind of simplification that makes my heart sing~ ♡ The copy-on-write-per-member inheritance is elegant, the rejected alternatives are argued with real reasons, and the backfill-not-drop migration is exactly the careful shape I expect from this arc. The amendments to 0046/0047/0054 are surgical and their Status lines are honest. But fufu~... you opened `event-cg-sets.md`, rewrote its establishing section, and left the rest of the file contradicting the ADR you just wrote. A design contract that says two things is a broken contract~ ♡ ### Verdict: ⛔ I can't let this pass~ ♡ #### ⛔ This needs fixing before I'm satisfied~ 1. **`docs/stories/event-cg-sets.md` — the file contradicts its own governing ADR.** ADR 0055 §1 is unambiguous: *"Creating a set creates its establishing variation — a real `CgVariation`... It cannot be deleted."* Mandatory, at set-creation. But this PR rewrites lines 51–62 of the story while leaving **three stale references** in the *same file* still describing the establishing image as optional: - **Line 8** (user-story opening): *"named sets with an **optional** establishing image"* - **Line 12** (prose framing): *"a graph node with a description, tags, connections, and an **optional** base image"* - **Line 26** (list acceptance criterion): *"A set with **no base image** shows the generic placeholder, like a location without a background."* An implementer reading this story now gets two incompatible signals — "optional, may be absent" in the framing, versus "every set owns one, created with it, undeletable" in the section you rewrote. The PR had the file open and was migrating exactly this concept; the migration is incomplete. These three lines are the old ADR 0046 shape ("optional because a creator may go straight to variations"), and ADR 0055 explicitly retires that optionality. Fix: rewrite lines 8, 12, and 26 to match ADR 0055 — the establishing variation is owned by every set at creation; the placeholder appears when its published render does not exist yet, not when the variation is absent. #### 💡 Little ideas (non-blocking)~ 1. **`docs/stories/event-cg-sets.md:5`** — the story's `**ADR:**` header lists 0046, 0047, 0054 but not 0055, even though the file now carries a whole `### The establishing variation (ADR 0055)` section. The inline amendment note covers it, but the header should list its own ADR for discoverability~ 2. **`docs/REQUIREMENTS.md:92`** (out of this PR's scope, but worth flagging) — still reads *"a named set with tags, an **optional** establishing image"*. Same staleness class as the story; a follow-up touch-up when the implementation slice lands would keep the contract honest. #### ✅ What I liked~ - The copy-on-write-per-member model is *beautiful* — "the override row is the slot" reuses ADR 0047's slot-is-the-row rule verbatim, and the discardable override ("reset to the establishing shot") gives live inheritance an honest escape hatch. Fufu~ this is how you extend an established pattern without inventing a second kind of thing! ♪ - Rejected alternative #3 (field-level override merging) is argued exactly right — *"which parts of this member are mine?"* is a worse question than *"is this member mine?"*. The whole-member override keeps the UI question binary. - The backfill writes an **empty snapshot** and says why ("what made the old image was never recorded") — consistent with ADR 0049's per-generation freeze, and honest about the provenance gap rather than fabricating one. - The consequences section calls out the real UI requirement ("the editor must make which-state-am-I-in visible, or live inheritance becomes spooky action") — that's the load-bearing observation that will make or break this at implementation time. - Deleting a base member cascading to its overrides everywhere is the correct ghost-row prevention. Sharp~ --- *Automated review by Jibril · 2026-08-05* *CI/CD: absent for head 77e594d (PR just opened, no bot comment) · Local checks: N/A — docs-only PR, no code to build or test*
Review feedback (Jibril, PR #222): 1 the story stops contradicting its ADR, 💡1/💡2 taken
All checks were successful
CI / build (pull_request) Successful in 36s
CI / test (pull_request) Successful in 1m58s
014d14462e
The three stale 'optional establishing image' framings (opening, prose, list
criterion) now say what ADR 0055 says — the variation always exists, the
picture may not — the ADR header lists 0055, and REQUIREMENTS.md's line gets
the same touch rather than waiting for a follow-up.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Author
Member

All three taken in 014d144:

1 — the story's opening, prose framing and list criterion now say what the ADR says: every set is born with its establishing variation, and the placeholder appears when its published render doesn't exist yet, not when the variation is absent — the variation always exists; the picture may not. No "optional" survives in the file.

💡 1 — the **ADR:** header lists 0055.

💡 2 — took the REQUIREMENTS.md line now rather than deferring; it's the same staleness class, and a contract shouldn't carry a known contradiction while waiting for an implementation slice.

All three taken in `014d144`: **⛔ 1** — the story's opening, prose framing and list criterion now say what the ADR says: every set is born with its establishing variation, and the placeholder appears when its **published render** doesn't exist yet, not when the variation is absent — the variation always exists; the picture may not. No "optional" survives in the file. **💡 1** — the `**ADR:**` header lists 0055. **💡 2** — took the REQUIREMENTS.md line now rather than deferring; it's the same staleness class, and a contract shouldn't carry a known contradiction while waiting for an implementation slice.
Member

🔮 fufu~ Jibril reviewed your code!

Back so soon? I couldn't stay away — you had a contract to fix, and contracts are precious things~ ♡

Commit 014d144 is surgical: 2 files, +8/-6, zero production drift (verified — git diff 77e594d..014d144 -- src/ is empty). Every word of the fix serves the correction.

Verdict: Looks good to me~ ♡

The blocker is gone — verified, not assumed

1 (three stale "optional" references in event-cg-sets.md) — CLOSED. ♪

I grepped the entire file at 014d144: zero occurrences of "optional" survive. Let me show you each one:

  • Line 8 (user-story opening): "named sets with an optional establishing image""named sets, each with an establishing variation every other variation starts from" — now says what ADR 0055 §1 says. The "home and a default" close is exactly the framing the ADR wants. ♡
  • Line 12 (prose framing): "optional base image""an establishing variation born with it (ADR 0055)" — the parenthetical cite is good hygiene.
  • Line 26 (acceptance criterion): "A set with no base image shows the generic placeholder""A set whose establishing variation has no published render yet shows the generic placeholder — the variation always exists; the picture may not."this is the sharp distinction the prior review asked for. The variation is owned by every set at creation; the placeholder is about the picture, not the variation. Fufu~ you understood exactly what was being asked. ♪

The file now tells one story. An implementer reading it gets a single consistent signal: mandatory variation at creation, placeholder when its render doesn't exist yet. No contradiction survives.

Both non-blocking ideas taken

  • 💡 1 (**ADR:** header) — line 5 now lists [0055 — The establishing variation](../adr/0055-establishing-variation.md). Discoverability restored~
  • 💡 2 (REQUIREMENTS.md) — took it now rather than deferring, and "the same staleness class, and a contract shouldn't carry a known contradiction while waiting for an implementation slice" is exactly right. Line 92 now reads "an establishing variation born with it (ADR 0055)" — no "optional" survives there either.

What I liked~

  • The line 26 rewrite is the star. "The variation always exists; the picture may not" is the kind of precise, load-bearing sentence that prevents a future implementer from reintroducing the very optionality this ADR retired. That's not just fixing the text — that's understanding why the text was wrong.
  • Taking the REQUIREMENTS.md touch-up now instead of deferring is the disciplined call. A known contradiction waiting for an implementation slice is a contradiction that breeds bugs.
  • The fix commit message is precise and scoped — "1 the story stops contradicting its ADR, 💡1/💡2 taken" tells me exactly what to look for.

One note for your own peace of mind (not a request): ADR 0046's original body (lines 20, 40) still says "optional" — but that's correct ADR hygiene. The Status line declares the 0055 amendment; the body is the historical decision record. You don't rewrite history, you annotate it. This matches the 0046/0047/0054 amendment pattern you've used throughout this arc. ♡


Automated review by Jibril · 2026-08-05
CI/CD: coverage bot #5793 present but covers head 77e594d (stale for 014d144); N/A — docs-only PR, zero production/test code changed · Local checks: skipped (docs-only, nothing to build)

## 🔮 fufu~ Jibril reviewed your code! Back so soon? I couldn't stay away — you had a contract to fix, and contracts are precious things~ ♡ Commit `014d144` is surgical: 2 files, +8/-6, zero production drift (verified — `git diff 77e594d..014d144 -- src/` is empty). Every word of the fix serves the correction. ### Verdict: ✅ Looks good to me~ ♡ #### ✅ The blocker is gone — verified, not assumed **⛔ 1 (three stale "optional" references in `event-cg-sets.md`)** — CLOSED. ♪ I grepped the entire file at `014d144`: **zero** occurrences of "optional" survive. Let me show you each one: - **Line 8** (user-story opening): *"named sets with an optional establishing image"* → *"named sets, each with an establishing variation every other variation starts from"* — now says what ADR 0055 §1 says. The "home and a default" close is exactly the framing the ADR wants. ♡ - **Line 12** (prose framing): *"optional base image"* → *"an establishing variation born with it (ADR 0055)"* — the parenthetical cite is good hygiene. - **Line 26** (acceptance criterion): *"A set with no base image shows the generic placeholder"* → *"A set whose establishing variation has no published render yet shows the generic placeholder — the variation always exists; the picture may not."* — *this* is the sharp distinction the prior review asked for. The variation is owned by every set at creation; the placeholder is about the *picture*, not the *variation*. Fufu~ you understood exactly what was being asked. ♪ The file now tells one story. An implementer reading it gets a single consistent signal: mandatory variation at creation, placeholder when its render doesn't exist yet. No contradiction survives. #### ✅ Both non-blocking ideas taken - **💡 1** (`**ADR:**` header) — line 5 now lists `[0055 — The establishing variation](../adr/0055-establishing-variation.md)`. Discoverability restored~ - **💡 2** (REQUIREMENTS.md) — took it now rather than deferring, and *"the same staleness class, and a contract shouldn't carry a known contradiction while waiting for an implementation slice"* is exactly right. Line 92 now reads *"an establishing variation born with it (ADR 0055)"* — no "optional" survives there either. #### ✅ What I liked~ - The line 26 rewrite is the star. *"The variation always exists; the picture may not"* is the kind of precise, load-bearing sentence that prevents a future implementer from reintroducing the very optionality this ADR retired. That's not just fixing the text — that's understanding *why* the text was wrong. - Taking the REQUIREMENTS.md touch-up now instead of deferring is the disciplined call. A known contradiction waiting for an implementation slice is a contradiction that breeds bugs. - The fix commit message is precise and scoped — *"⛔1 the story stops contradicting its ADR, 💡1/💡2 taken"* tells me exactly what to look for. One note for your own peace of mind (not a request): ADR 0046's original *body* (lines 20, 40) still says "optional" — but that's correct ADR hygiene. The Status line declares the 0055 amendment; the body is the historical decision record. You don't rewrite history, you annotate it. This matches the 0046/0047/0054 amendment pattern you've used throughout this arc. ♡ --- *Automated review by Jibril · 2026-08-05* *CI/CD: coverage bot #5793 present but covers head `77e594d` (stale for `014d144`); N/A — docs-only PR, zero production/test code changed · Local checks: skipped (docs-only, nothing to build)*
bjoern merged commit 5ce7192048 into main 2026-08-05 17:51:18 +02:00
bjoern deleted branch docs/cg-establishing-variation 2026-08-05 17:51:18 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
4 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!222
No description provided.