Skip to content

feat: run E2E flow collections in parallel stacks (backlog 132) - #400

Draft
s205109 wants to merge 19 commits into
mainfrom
fix/wt-run-e2e-flow-collections-in-par-59789baa
Draft

feat: run E2E flow collections in parallel stacks (backlog 132)#400
s205109 wants to merge 19 commits into
mainfrom
fix/wt-run-e2e-flow-collections-in-par-59789baa

Conversation

@s205109

@s205109 s205109 commented Sep 9, 2026

Copy link
Copy Markdown
Owner

Backlog 132 — Run E2E flow collections in parallel stacks.

Draft opened at Pickup. The work is at Design.

What the item asks

Decide whether the E2E slice can run its flows at the same time, each with its own
database, API host and browser. A decision not to do it is a real outcome, and it gets
recorded with its reason.

Starting facts

  • E2E wall clock is 321.65 s. The test host holds 237 s of that.
  • tests/AHKFlowApp.E2E.Tests has one collection, E2E, with
    DisableParallelization = true. All 18 test classes join it.
  • StackFixture owns one ApiFactory, one SpaHost, one Playwright browser and one
    database. Every test calls ResetDataAsync, which deletes every table.

Acceptance criteria

See backlog/132-run-e2e-flow-collections-in-par-59789baa.md.

🤖 Generated with Claude Code

Item already reads Stage 2-design; this marker gives the branch a commit so
the draft PR can open.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
adr says why hand-picked groups are right here and wrong in 0013.
item: 57 -> 62 tests, criterion 2 gains SPA host + shared container,
measured baseline 306.96s.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
serilog freeze throws on concurrent host build, not just lost logs.
eager capture at AddSerilog, lazy freeze at first ILogger resolve, so
the gate must span both. xunit matches fixtures by exact type, so
constructors name their group's type.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
nothing-mutable-is-shared was false: serilog's static crosses every
collection. say so up front and point at the gate rule.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
ApiFactory takes a discriminator and stops building its own container.
E2ESqlServer keeps the process at one container so CI does not gain
three more. ApiFactoryTests moves to the exclusive collection because
it mutates a process-wide env var.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
AddSerilog keeps the static Log.Logger it finds and freezes it at the
first ILoggerFactory resolve. two hosts can keep the same instance and
the second freeze throws. Program.cs catches it, so the test sees
'entry point exited without ever building an IHost'.

proven: 20 overlapped rounds fail without the gate, pass with it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
four stacks starting together would run four installs into one shared
browser folder.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
StackFixture loses sealed and takes a discriminator. four collections,
four fixture subclasses, 18 classes moved. xunit matches fixtures by
exact type so each constructor names its group's type.

64 tests pass. wall 241.62s -> 128.29s, host 196s -> 86s.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
the guard read E2ETestCollection.cs and required the literal
ICollectionFixture<StackFixture>. the rule it protects is unchanged -
a stack belongs to a collection, never to a flow class - so it now
matches any StackFixture subtype and adds a check that no two
collections share one fixture type. mutation-proven.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown

Test Results

64 tests   64 ✅  7m 21s ⏱️
 1 suites   0 💤
 1 files     0 ❌

Results for commit 28af49d.

♻️ This comment has been updated with latest results.

@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown

Summary

Summary
Generated on: 09/09/2026 - 21:27:20
Coverage date: 09/09/2026 - 21:23:44 - 09/09/2026 - 21:27:12
Parser: MultiReport (14x Cobertura)
Assemblies: 8
Classes: 428
Files: 327
Line coverage: 94.7% (7285 of 7690)
Covered lines: 7285
Uncovered lines: 405
Coverable lines: 7690
Total lines: 27547
Branch coverage: 82.8% (2157 of 2605)
Covered branches: 2157
Total branches: 2605
Method coverage: Feature is only available for sponsors
Tag: 880_34406373140

Coverage

ahkflow - 96.6%
Name Line Branch
ahkflow 96.6% 87.3%
AHKFlowApp.CLI.Commands.Auth.LoginCommand 100%
AHKFlowApp.CLI.Commands.Auth.LogoutCommand 100%
AHKFlowApp.CLI.Commands.Downloads.AhkDownloadCommand 100%
AHKFlowApp.CLI.Commands.Downloads.DownloadCommand 100%
AHKFlowApp.CLI.Commands.Downloads.ZipDownloadCommand 100%
AHKFlowApp.CLI.Commands.Hotstrings.HotstringCommand 100%
AHKFlowApp.CLI.Commands.Hotstrings.ListHotstringCommand 100%
AHKFlowApp.CLI.Commands.Hotstrings.NewHotstringCommand 100% 100%
AHKFlowApp.CLI.Commands.RootCli 0%
AHKFlowApp.CLI.Exceptions.AuthConfigurationException 100%
AHKFlowApp.CLI.Exceptions.NotAuthenticatedException 100%
AHKFlowApp.CLI.Exceptions.ProfileNotFoundException 100%
AHKFlowApp.CLI.Output.DownloadDestination 100% 100%
AHKFlowApp.CLI.Output.DownloadTarget 100%
AHKFlowApp.CLI.Output.HotstringJsonFormatter 100%
AHKFlowApp.CLI.Output.HotstringTableFormatter 98.6% 94%
AHKFlowApp.CLI.Services.ApiException 100%
AHKFlowApp.CLI.Services.BearerTokenHandler 100%
AHKFlowApp.CLI.Services.BinaryStdout 100% 100%
AHKFlowApp.CLI.Services.CliApiFailureDetector 100% 85%
AHKFlowApp.CLI.Services.CliHttpClientBuilderExtensions 100% 75%
AHKFlowApp.CLI.Services.ConsoleErrorDeviceCodePromptWriter 100% 50%
AHKFlowApp.CLI.Services.ConsoleErrorHttpRetryStatusWriter 100% 50%
AHKFlowApp.CLI.Services.CreateHotstringDto 100%
AHKFlowApp.CLI.Services.DeviceCodePrompt 100%
AHKFlowApp.CLI.Services.DownloadsApiClient 100% 87.5%
AHKFlowApp.CLI.Services.HotstringDto 100%
AHKFlowApp.CLI.Services.HotstringsApiClient 100%
AHKFlowApp.CLI.Services.HttpRetryStatusMessages 100%
AHKFlowApp.CLI.Services.LocalAppDataAuthCachePathProvider 0% 0%
AHKFlowApp.CLI.Services.MsalDeviceCodeTokenProvider 78.5% 83.3%
AHKFlowApp.CLI.Services.PagedList`1 100% 50%
AHKFlowApp.CLI.Services.ProfilesApiClient 100%
AHKFlowApp.CLI.Services.WorkingDirectory 100% 100%
AHKFlowApp.API - 84.1%
Name Line Branch
AHKFlowApp.API 84.1% 60%
AHKFlowApp.API.Auth.HttpContextCurrentUser 100% 46.1%
AHKFlowApp.API.Auth.TestAuthenticationHandler 100%
AHKFlowApp.API.Controllers.CategoriesController 100%
AHKFlowApp.API.Controllers.DashboardController 100%
AHKFlowApp.API.Controllers.DevController 100%
AHKFlowApp.API.Controllers.DownloadsController 100%
AHKFlowApp.API.Controllers.HealthController 100%
AHKFlowApp.API.Controllers.HotkeysController 100%
AHKFlowApp.API.Controllers.HotstringsController 100%
AHKFlowApp.API.Controllers.KnownShortcutsController 100%
AHKFlowApp.API.Controllers.PreferencesController 100%
AHKFlowApp.API.Controllers.ProfilesController 100%
AHKFlowApp.API.Controllers.VersionController 100%
AHKFlowApp.API.Controllers.WhoAmIController 100%
AHKFlowApp.API.DevDatabaseReadiness 100% 100%
AHKFlowApp.API.DevDockerSqlServer 0% 0%
AHKFlowApp.API.Extensions.ApiExtensions 100% 80%
AHKFlowApp.API.Extensions.ProblemDetailsResultExtensions 100% 100%
AHKFlowApp.API.Middleware.GlobalExceptionMiddleware 100%
AHKFlowApp.API.Models.HealthResponse 100%
AHKFlowApp.API.OpenApi.Examples.CreateHotstringDtoExample 100%
AHKFlowApp.API.OpenApi.Examples.HotstringDtoExample 100%
AHKFlowApp.API.OpenApi.Examples.HotstringHistoryVersionDtoExample 100%
AHKFlowApp.API.OpenApi.Examples.HotstringPreviewDtoExample 100%
AHKFlowApp.API.OpenApi.Examples.HotstringPreviewRequestDtoExample 100%
AHKFlowApp.API.OpenApi.Examples.PagedHotstringsExample 100%
AHKFlowApp.API.OpenApi.Examples.UpdateHotstringDtoExample 100%
AHKFlowApp.Application - 98.3%
Name Line Branch
AHKFlowApp.Application 98.3% 90.2%
AHKFlowApp.Application.Behaviors.ValidatingUseCase`2 100%
AHKFlowApp.Application.Commands.Categories.CreateCategoryCommandHandler 100%
AHKFlowApp.Application.Commands.Categories.CreateCategoryCommandValidator 100%
AHKFlowApp.Application.Commands.Categories.DeleteCategoryCommandHandler 100%
AHKFlowApp.Application.Commands.Categories.UpdateCategoryCommandHandler 100%
AHKFlowApp.Application.Commands.Categories.UpdateCategoryCommandValidator 100%
AHKFlowApp.Application.Commands.Dev.HotstringSeedSamples 100%
AHKFlowApp.Application.Commands.Dev.SeedAllCommandHandler 68.7% 33.3%
AHKFlowApp.Application.Commands.Dev.SeedCategoriesCommandHandler 100%
AHKFlowApp.Application.Commands.Dev.SeedHotkeysCommandHandler 100%
AHKFlowApp.Application.Commands.Dev.SeedHotstringsCommandHandler 100%
AHKFlowApp.Application.Commands.Hotkeys.BulkDeleteHotkeysCommandHandler 100%
AHKFlowApp.Application.Commands.Hotkeys.BulkDeleteHotkeysCommandValidator 100%
AHKFlowApp.Application.Commands.Hotkeys.CreateHotkeyCommandHandler 100%
AHKFlowApp.Application.Commands.Hotkeys.CreateHotkeyCommandValidator 100%
AHKFlowApp.Application.Commands.Hotkeys.DeleteHotkeyCommandHandler 100%
AHKFlowApp.Application.Commands.Hotkeys.HotkeyConflictMessages 100% 100%
AHKFlowApp.Application.Commands.Hotkeys.PurgeDeletedHotkeyCommandHandler 100%
AHKFlowApp.Application.Commands.Hotkeys.RestoreHotkeyCommandHandler 100%
AHKFlowApp.Application.Commands.Hotkeys.RevertHotkeyCommandHandler 100%
AHKFlowApp.Application.Commands.Hotkeys.UpdateHotkeyCommandHandler 100%
AHKFlowApp.Application.Commands.Hotkeys.UpdateHotkeyCommandValidator 100%
AHKFlowApp.Application.Commands.Hotstrings.BulkDeleteHotstringsCommandHandl
er
100%
AHKFlowApp.Application.Commands.Hotstrings.BulkDeleteHotstringsCommandValid
ator
100%
AHKFlowApp.Application.Commands.Hotstrings.CreateHotstringCommandHandler 100%
AHKFlowApp.Application.Commands.Hotstrings.CreateHotstringCommandValidator 100%
AHKFlowApp.Application.Commands.Hotstrings.DeleteHotstringCommandHandler 100%
AHKFlowApp.Application.Commands.Hotstrings.HotstringImportClassifier 100% 100%
AHKFlowApp.Application.Commands.Hotstrings.ImportHotstringsCommandHandler 100%
AHKFlowApp.Application.Commands.Hotstrings.ImportHotstringsCommandValidator 100%
AHKFlowApp.Application.Commands.Hotstrings.PreviewHotstringImportCommandHan
dler
100%
AHKFlowApp.Application.Commands.Hotstrings.PreviewHotstringImportCommandVal
idator
100%
AHKFlowApp.Application.Commands.Hotstrings.PurgeDeletedHotstringCommandHand
ler
100%
AHKFlowApp.Application.Commands.Hotstrings.RestoreHotstringCommandHandler 100%
AHKFlowApp.Application.Commands.Hotstrings.RevertHotstringCommandHandler 100%
AHKFlowApp.Application.Commands.Hotstrings.UpdateHotstringCommandHandler 100%
AHKFlowApp.Application.Commands.Hotstrings.UpdateHotstringCommandValidator 100%
AHKFlowApp.Application.Commands.KnownShortcuts.CreateCustomKnownShortcutCom
mandHandler
100%
AHKFlowApp.Application.Commands.KnownShortcuts.CreateCustomKnownShortcutCom
mandValidator
100% 62.5%
AHKFlowApp.Application.Commands.KnownShortcuts.DeleteCustomKnownShortcutCom
mandHandler
100%
AHKFlowApp.Application.Commands.KnownShortcuts.IgnoreKnownShortcutCommandHa
ndler
100%
AHKFlowApp.Application.Commands.KnownShortcuts.RestoreKnownShortcutCommandH
andler
100%
AHKFlowApp.Application.Commands.Preferences.UpdateUserPreferenceCommandHand
ler
100%
AHKFlowApp.Application.Commands.Preferences.UpdateUserPreferenceCommandVali
dator
100%
AHKFlowApp.Application.Commands.Profiles.CreateProfileCommandHandler 100%
AHKFlowApp.Application.Commands.Profiles.CreateProfileCommandValidator 100%
AHKFlowApp.Application.Commands.Profiles.DeleteProfileCommandHandler 100%
AHKFlowApp.Application.Commands.Profiles.UpdateProfileCommandHandler 100%
AHKFlowApp.Application.Commands.Profiles.UpdateProfileCommandValidator 100%
AHKFlowApp.Application.Common.HistorySaveRetry 100% 50%
AHKFlowApp.Application.Constants.DefaultHotkey 100%
AHKFlowApp.Application.Constants.DefaultHotkeyCatalog 100%
AHKFlowApp.Application.Constants.HeaderPreset 100%
AHKFlowApp.Application.Constants.HeaderPresetCatalog 100%
AHKFlowApp.Application.Constants.HotkeyKeyEntry 100%
AHKFlowApp.Application.Constants.HotkeyKeys 100% 100%
AHKFlowApp.Application.Constants.KnownShortcut 100%
AHKFlowApp.Application.Constants.KnownShortcutCatalog 100%
AHKFlowApp.Application.Constants.ShortcutUse 100%
AHKFlowApp.Application.Constants.ShortcutWording 100%
AHKFlowApp.Application.DependencyInjection 100%
AHKFlowApp.Application.DTOs.BulkDeleteResultDto 100%
AHKFlowApp.Application.DTOs.CategoryDto 100%
AHKFlowApp.Application.DTOs.CreateCustomKnownShortcutDto 100%
AHKFlowApp.Application.DTOs.CreateHotkeyDto 100%
AHKFlowApp.Application.DTOs.CreateHotstringDto 100%
AHKFlowApp.Application.DTOs.CreateProfileDto 100%
AHKFlowApp.Application.DTOs.DashboardStatsDto 100%
AHKFlowApp.Application.DTOs.DeletedHotkeyDto 100%
AHKFlowApp.Application.DTOs.DeletedHotstringDto 100%
AHKFlowApp.Application.DTOs.EntityStatsDto 100%
AHKFlowApp.Application.DTOs.HeaderPresetDto 100%
AHKFlowApp.Application.DTOs.HotkeyDto 100%
AHKFlowApp.Application.DTOs.HotkeyHistoryVersionDto 100%
AHKFlowApp.Application.DTOs.HotkeyKeyCatalogDto 100%
AHKFlowApp.Application.DTOs.HotkeyKeyDto 100%
AHKFlowApp.Application.DTOs.HotkeyPreviewRequestDto 100%
AHKFlowApp.Application.DTOs.HotkeySnapshot 100%
AHKFlowApp.Application.DTOs.HotstringDto 100%
AHKFlowApp.Application.DTOs.HotstringHistoryVersionDto 100%
AHKFlowApp.Application.DTOs.HotstringImportPreviewDto 100%
AHKFlowApp.Application.DTOs.HotstringImportResultDto 100%
AHKFlowApp.Application.DTOs.HotstringImportRowDto 100%
AHKFlowApp.Application.DTOs.HotstringPreviewDto 100%
AHKFlowApp.Application.DTOs.HotstringPreviewRequestDto 100%
AHKFlowApp.Application.DTOs.HotstringSnapshot 100%
AHKFlowApp.Application.DTOs.ImportHotstringsRequestDto 100%
AHKFlowApp.Application.DTOs.KnownShortcutDto 100%
AHKFlowApp.Application.DTOs.ManagedKnownShortcutDto 100%
AHKFlowApp.Application.DTOs.ManagedShortcutUseDto 100%
AHKFlowApp.Application.DTOs.PagedList`1 100% 100%
AHKFlowApp.Application.DTOs.ProfileDto 100%
AHKFlowApp.Application.DTOs.ProfileScriptPreviewDto 100%
AHKFlowApp.Application.DTOs.ProfileStatsDto 100%
AHKFlowApp.Application.DTOs.RawSummaryDto 100%
AHKFlowApp.Application.DTOs.RecentActivityItemDto 100%
AHKFlowApp.Application.DTOs.SeedAllResultDto 100%
AHKFlowApp.Application.DTOs.ShortcutUseDto 100%
AHKFlowApp.Application.DTOs.UpdateHotkeyDto 100%
AHKFlowApp.Application.DTOs.UpdateHotstringDto 100%
AHKFlowApp.Application.DTOs.UpdateProfileDto 100%
AHKFlowApp.Application.Mapping.CategoryMapping 100%
AHKFlowApp.Application.Mapping.HotkeyMappings 100%
AHKFlowApp.Application.Mapping.HotstringMappings 100%
AHKFlowApp.Application.Mapping.ProfileMappings 100%
AHKFlowApp.Application.Mapping.UserPreferenceMappings 100%
AHKFlowApp.Application.Queries.Categories.GetCategoryQueryHandler 100%
AHKFlowApp.Application.Queries.Categories.ListCategoriesQuery 100%
AHKFlowApp.Application.Queries.Categories.ListCategoriesQueryHandler 100%
AHKFlowApp.Application.Queries.Categories.ListCategoriesQueryValidator 100%
AHKFlowApp.Application.Queries.Dashboard.GetDashboardStatsQueryHandler 100% 100%
AHKFlowApp.Application.Queries.Downloads.GenerateAllProfileScriptsQueryHand
ler
100% 100%
AHKFlowApp.Application.Queries.Downloads.GenerateAllProfileScriptsZipQueryH
andler
100%
AHKFlowApp.Application.Queries.Downloads.GenerateProfileScriptQueryHandler 100%
AHKFlowApp.Application.Queries.Downloads.GetProfileScriptPreviewQueryHandle
r
100%
AHKFlowApp.Application.Queries.Hotkeys.GetHotkeyHistoryQueryHandler 100%
AHKFlowApp.Application.Queries.Hotkeys.GetHotkeyHistoryVersionQueryHandler 100%
AHKFlowApp.Application.Queries.Hotkeys.GetHotkeyPreviewQueryHandler 100% 100%
AHKFlowApp.Application.Queries.Hotkeys.GetHotkeyPreviewQueryValidator 100%
AHKFlowApp.Application.Queries.Hotkeys.GetHotkeyQueryHandler 100%
AHKFlowApp.Application.Queries.Hotkeys.ListDeletedHotkeysQuery 100%
AHKFlowApp.Application.Queries.Hotkeys.ListDeletedHotkeysQueryHandler 100%
AHKFlowApp.Application.Queries.Hotkeys.ListHotkeyKeysQuery 100%
AHKFlowApp.Application.Queries.Hotkeys.ListHotkeyKeysQueryHandler 100%
AHKFlowApp.Application.Queries.Hotkeys.ListHotkeysQuery 100%
AHKFlowApp.Application.Queries.Hotkeys.ListHotkeysQueryHandler 44.4% 51.7%
AHKFlowApp.Application.Queries.Hotkeys.ListHotkeysQueryValidator 100%
AHKFlowApp.Application.Queries.Hotkeys.ListKnownShortcutsQuery 100%
AHKFlowApp.Application.Queries.Hotkeys.ListKnownShortcutsQueryHandler 100%
AHKFlowApp.Application.Queries.Hotstrings.GetHotstringHistoryQueryHandler 100%
AHKFlowApp.Application.Queries.Hotstrings.GetHotstringHistoryVersionQueryHa
ndler
100%
AHKFlowApp.Application.Queries.Hotstrings.GetHotstringPreviewQueryHandler 100% 100%
AHKFlowApp.Application.Queries.Hotstrings.GetHotstringPreviewQueryValidator 100%
AHKFlowApp.Application.Queries.Hotstrings.GetHotstringQueryHandler 100%
AHKFlowApp.Application.Queries.Hotstrings.ListDeletedHotstringsQuery 100%
AHKFlowApp.Application.Queries.Hotstrings.ListDeletedHotstringsQueryHandler 100%
AHKFlowApp.Application.Queries.Hotstrings.ListHotstringsQuery 100%
AHKFlowApp.Application.Queries.Hotstrings.ListHotstringsQueryHandler 90.9% 66%
AHKFlowApp.Application.Queries.Hotstrings.ListHotstringsQueryValidator 100%
AHKFlowApp.Application.Queries.KnownShortcuts.ListManagedKnownShortcutsQuer
y
100%
AHKFlowApp.Application.Queries.KnownShortcuts.ListManagedKnownShortcutsQuer
yHandler
100%
AHKFlowApp.Application.Queries.Preferences.GetUserPreferenceQueryHandler 100%
AHKFlowApp.Application.Queries.Profiles.GetProfileQueryHandler 100%
AHKFlowApp.Application.Queries.Profiles.ListHeaderPresetsQuery 100%
AHKFlowApp.Application.Queries.Profiles.ListHeaderPresetsQueryHandler 100%
AHKFlowApp.Application.Queries.Profiles.ListProfilesQueryHandler 100%
AHKFlowApp.Application.Services.AhkEscaping 100%
AHKFlowApp.Application.Services.AhkFileNaming 100% 100%
AHKFlowApp.Application.Services.AhkHotstringParser 96.6% 90.8%
AHKFlowApp.Application.Services.AhkScriptGenerator 100% 100%
AHKFlowApp.Application.Services.EntityHistoryRecorder 100%
AHKFlowApp.Application.Services.HeaderTokenRenderer 95.3% 97.3%
AHKFlowApp.Application.Services.HotkeyEmitter 100% 97.3%
AHKFlowApp.Application.Services.HotstringEmitter 98.7% 98.3%
AHKFlowApp.Application.Services.KnownShortcutMerge 100% 91.6%
AHKFlowApp.Application.Services.LegacyHotkeyDefinitionConverter 100% 100%
AHKFlowApp.Application.Services.LegacyHotkeySnapshotConverter 100% 75%
AHKFlowApp.Application.Services.MacroToken 100%
AHKFlowApp.Application.Services.MacroTokenParser 100% 100%
AHKFlowApp.Application.Services.ProfileScriptLoader 100%
AHKFlowApp.Application.Services.RawCommentLift 100% 100%
AHKFlowApp.Application.Services.RawHotkeyBodyScanner 94.3% 94.5%
AHKFlowApp.Application.Services.RawHotstringDefinitionParser 95.3% 92%
AHKFlowApp.Application.Services.RawParseResult 100%
AHKFlowApp.Application.Services.ScriptToRawComposer 100% 100%
AHKFlowApp.Application.Validation.CategoryRules 100%
AHKFlowApp.Application.Validation.HotkeyRules 100% 97.2%
AHKFlowApp.Application.Validation.HotstringRules 100% 100%
AHKFlowApp.Application.Validation.ProfileRules 100% 100%
AHKFlowApp.Application.Validation.WindowContextRules 100% 100%
AHKFlowApp.Domain - 100%
Name Line Branch
AHKFlowApp.Domain 100% 100%
AHKFlowApp.Domain.Constants.DefaultCategories 100%
AHKFlowApp.Domain.Entities.Category 100%
AHKFlowApp.Domain.Entities.CustomKnownShortcut 100%
AHKFlowApp.Domain.Entities.EntityHistory 100%
AHKFlowApp.Domain.Entities.Hotkey 100%
AHKFlowApp.Domain.Entities.HotkeyCategory 100%
AHKFlowApp.Domain.Entities.HotkeyDefinition 100%
AHKFlowApp.Domain.Entities.HotkeyProfile 100%
AHKFlowApp.Domain.Entities.Hotstring 100%
AHKFlowApp.Domain.Entities.HotstringCategory 100%
AHKFlowApp.Domain.Entities.HotstringDefinition 100%
AHKFlowApp.Domain.Entities.HotstringProfile 100%
AHKFlowApp.Domain.Entities.IgnoredKnownShortcut 100%
AHKFlowApp.Domain.Entities.Profile 100%
AHKFlowApp.Domain.Entities.UserPreference 100% 100%
AHKFlowApp.Infrastructure - 100%
Name Line Branch
AHKFlowApp.Infrastructure 100% 60%
AHKFlowApp.Infrastructure.DependencyInjection 100%
AHKFlowApp.Infrastructure.Persistence.AppDbContext 100%
AHKFlowApp.Infrastructure.Persistence.Configurations.CategoryConfiguration 100%
AHKFlowApp.Infrastructure.Persistence.Configurations.CustomKnownShortcutCon
figuration
100%
AHKFlowApp.Infrastructure.Persistence.Configurations.EntityHistoryConfigura
tion
100%
AHKFlowApp.Infrastructure.Persistence.Configurations.HotkeyCategoryConfigur
ation
100%
AHKFlowApp.Infrastructure.Persistence.Configurations.HotkeyConfiguration 100%
AHKFlowApp.Infrastructure.Persistence.Configurations.HotkeyProfileConfigura
tion
100%
AHKFlowApp.Infrastructure.Persistence.Configurations.HotstringCategoryConfi
guration
100%
AHKFlowApp.Infrastructure.Persistence.Configurations.HotstringConfiguration 100%
AHKFlowApp.Infrastructure.Persistence.Configurations.HotstringProfileConfig
uration
100%
AHKFlowApp.Infrastructure.Persistence.Configurations.IgnoredKnownShortcutCo
nfiguration
100%
AHKFlowApp.Infrastructure.Persistence.Configurations.ProfileConfiguration 100%
AHKFlowApp.Infrastructure.Persistence.Configurations.UserPreferenceConfigur
ation
100%
AHKFlowApp.Infrastructure.Services.AssemblyAppVersionProvider 100% 64.2%
AHKFlowApp.Infrastructure.Services.VersionService 100% 50%
AHKFlowApp.Launcher - 71.7%
Name Line Branch
AHKFlowApp.Launcher 71.7% 73.3%
AHKFlowApp.Launcher.DockerSqlControl 22.5% 0%
AHKFlowApp.Launcher.LauncherPlan 100%
AHKFlowApp.Launcher.ProjectLaunch 100%
AHKFlowApp.Launcher.WorktreeLocalDevManifest 100% 91.6%
AHKFlowApp.TestUtilities - 93.6%
Name Line Branch
AHKFlowApp.TestUtilities 93.6% 81.7%
AHKFlowApp.TestUtilities.Auth.TestAuthHandler 100% 88.8%
AHKFlowApp.TestUtilities.Auth.TestUserBuilder 80.9%
AHKFlowApp.TestUtilities.Builders.CategoryBuilder 100%
AHKFlowApp.TestUtilities.Builders.CustomKnownShortcutBuilder 89.4%
AHKFlowApp.TestUtilities.Builders.HealthResponseBuilder 0%
AHKFlowApp.TestUtilities.Builders.HotkeyBuilder 95.6% 100%
AHKFlowApp.TestUtilities.Builders.HotstringBuilder 95.4% 100%
AHKFlowApp.TestUtilities.Builders.IgnoredKnownShortcutBuilder 88.8%
AHKFlowApp.TestUtilities.Builders.ProfileBuilder 100%
AHKFlowApp.TestUtilities.Fixtures.ApiTestFixture 100% 50%
AHKFlowApp.TestUtilities.Fixtures.CustomWebApplicationFactory 100% 100%
AHKFlowApp.TestUtilities.Fixtures.HotkeyKeyFixtures 100%
AHKFlowApp.TestUtilities.Fixtures.LegacyHotkeyFixture 100%
AHKFlowApp.TestUtilities.Fixtures.LegacyHotkeyFixtures 100%
AHKFlowApp.TestUtilities.Fixtures.MigratedDbFixture 100% 50%
AHKFlowApp.TestUtilities.Fixtures.ScriptToRawFixture 100%
AHKFlowApp.TestUtilities.Fixtures.ScriptToRawFixtures 100%
AHKFlowApp.TestUtilities.Fixtures.SharedSqlContainer 100%
AHKFlowApp.TestUtilities.Fixtures.SharedSqlServerFixture 100% 50%
AHKFlowApp.TestUtilities.Fixtures.SqlContainerFixture 100% 50%
AHKFlowApp.TestUtilities.Fixtures.SqlTestDatabase 100% 85%
AHKFlowApp.TestUtilities.Fixtures.TestTimingRecorder 95.2% 62.5%
AHKFlowApp.TestUtilities.Fixtures.TypedHotkeyActionCase 100%
AHKFlowApp.TestUtilities.Fixtures.TypedHotkeyActionFixtures 100%
AutoGeneratedProgram 0%
AHKFlowApp.UI.Blazor - 91.2%
Name Line Branch
AHKFlowApp.UI.Blazor 91.2% 77%
AHKFlowApp.UI.Blazor.Auth.ApiAuthorizationMessageHandler 0%
AHKFlowApp.UI.Blazor.Auth.AzureAdSettings 100% 100%
AHKFlowApp.UI.Blazor.Auth.TestAuthenticationProvider 100%
AHKFlowApp.UI.Blazor.Components.Common.BlockedIconButton 100%
AHKFlowApp.UI.Blazor.Components.Common.CategoryFilterChips 100% 100%
AHKFlowApp.UI.Blazor.Components.Common.EntityChips 100% 100%
AHKFlowApp.UI.Blazor.Components.Common.EntityMultiSelect 84.6% 56.2%
AHKFlowApp.UI.Blazor.Components.Common.KeyPicker 0%
AHKFlowApp.UI.Blazor.Components.Common.MacroReplacementDisplay 83.3% 80%
AHKFlowApp.UI.Blazor.Components.Home.CliQuickstartCard 100%
AHKFlowApp.UI.Blazor.Components.Home.RecentActivityCard 66.6% 53.8%
AHKFlowApp.UI.Blazor.Components.Home.StatCard 100%
AHKFlowApp.UI.Blazor.Components.Hotkeys.HotkeyActionChip 100% 100%
AHKFlowApp.UI.Blazor.Components.Hotkeys.HotkeyEditDialog 89.5% 75.6%
AHKFlowApp.UI.Blazor.Components.Hotkeys.HotkeyHistoryDialog 87.5% 50%
AHKFlowApp.UI.Blazor.Components.Hotkeys.HotkeyMobileList 75.8% 45.8%
AHKFlowApp.UI.Blazor.Components.Hotkeys.ShortcutWarning 100% 88.4%
AHKFlowApp.UI.Blazor.Components.Hotstrings.HotstringEditDialog 89.2% 73.4%
AHKFlowApp.UI.Blazor.Components.Hotstrings.HotstringHistoryDialog 93.3% 50%
AHKFlowApp.UI.Blazor.Components.Hotstrings.HotstringImportDialog 73% 40%
AHKFlowApp.UI.Blazor.Components.Hotstrings.HotstringKindChip 100% 100%
AHKFlowApp.UI.Blazor.Components.Hotstrings.HotstringMobileList 89.3% 100%
AHKFlowApp.UI.Blazor.Components.KnownShortcuts.KnownShortcutMobileList 100% 100%
AHKFlowApp.UI.Blazor.Components.KnownShortcuts.KnownShortcutSourceChip 100% 100%
AHKFlowApp.UI.Blazor.Components.KnownShortcuts.KnownShortcutUseActions 100% 100%
AHKFlowApp.UI.Blazor.Components.Profiles.HeaderPresetPickerDialog 75%
AHKFlowApp.UI.Blazor.DTOs.ApiProblemDetails 100%
AHKFlowApp.UI.Blazor.DTOs.BulkDeleteResultDto 100%
AHKFlowApp.UI.Blazor.DTOs.CategoryDto 100%
AHKFlowApp.UI.Blazor.DTOs.ChangelogDocumentDto 100%
AHKFlowApp.UI.Blazor.DTOs.ChangelogEntryDto 100%
AHKFlowApp.UI.Blazor.DTOs.ChangelogSectionDto 100%
AHKFlowApp.UI.Blazor.DTOs.CreateCustomKnownShortcutDto 100%
AHKFlowApp.UI.Blazor.DTOs.CreateHotkeyDto 100%
AHKFlowApp.UI.Blazor.DTOs.CreateHotstringDto 100%
AHKFlowApp.UI.Blazor.DTOs.CreateProfileDto 100%
AHKFlowApp.UI.Blazor.DTOs.DashboardStatsDto 100%
AHKFlowApp.UI.Blazor.DTOs.DeletedHotkeyDto 100%
AHKFlowApp.UI.Blazor.DTOs.DeletedHotstringDto 100%
AHKFlowApp.UI.Blazor.DTOs.EntityStatsDto 100%
AHKFlowApp.UI.Blazor.DTOs.HeaderPresetDto 100%
AHKFlowApp.UI.Blazor.DTOs.HealthResponse 100%
AHKFlowApp.UI.Blazor.DTOs.HotkeyDto 100%
AHKFlowApp.UI.Blazor.DTOs.HotkeyHistoryVersionDto 100%
AHKFlowApp.UI.Blazor.DTOs.HotkeyKeyCatalogDto 100%
AHKFlowApp.UI.Blazor.DTOs.HotkeyKeyDto 100%
AHKFlowApp.UI.Blazor.DTOs.HotkeyListRequest 100%
AHKFlowApp.UI.Blazor.DTOs.HotkeyPreviewRequestDto 100%
AHKFlowApp.UI.Blazor.DTOs.HotkeySnapshot 100%
AHKFlowApp.UI.Blazor.DTOs.HotstringDto 100%
AHKFlowApp.UI.Blazor.DTOs.HotstringHistoryVersionDto 100%
AHKFlowApp.UI.Blazor.DTOs.HotstringImportPreviewDto 100%
AHKFlowApp.UI.Blazor.DTOs.HotstringImportResultDto 100%
AHKFlowApp.UI.Blazor.DTOs.HotstringImportRowDto 100%
AHKFlowApp.UI.Blazor.DTOs.HotstringListRequest 100%
AHKFlowApp.UI.Blazor.DTOs.HotstringPreviewDto 100%
AHKFlowApp.UI.Blazor.DTOs.HotstringPreviewRequestDto 100%
AHKFlowApp.UI.Blazor.DTOs.HotstringSnapshot 100%
AHKFlowApp.UI.Blazor.DTOs.ImportHotstringsRequestDto 100%
AHKFlowApp.UI.Blazor.DTOs.KnownShortcutDto 100%
AHKFlowApp.UI.Blazor.DTOs.ManagedKnownShortcutDto 100%
AHKFlowApp.UI.Blazor.DTOs.ManagedShortcutUseDto 100%
AHKFlowApp.UI.Blazor.DTOs.PagedList`1 100%
AHKFlowApp.UI.Blazor.DTOs.ProfileDto 100%
AHKFlowApp.UI.Blazor.DTOs.ProfileScriptPreviewDto 100%
AHKFlowApp.UI.Blazor.DTOs.ProfileStatsDto 100%
AHKFlowApp.UI.Blazor.DTOs.RawSummaryDto 100%
AHKFlowApp.UI.Blazor.DTOs.RecentActivityItemDto 100%
AHKFlowApp.UI.Blazor.DTOs.ShortcutUseDto 100%
AHKFlowApp.UI.Blazor.DTOs.UpdateHotkeyDto 100%
AHKFlowApp.UI.Blazor.DTOs.UpdateHotstringDto 100%
AHKFlowApp.UI.Blazor.DTOs.UpdateProfileDto 100%
AHKFlowApp.UI.Blazor.Helpers.DeliveryDisplay 88.8% 83.3%
AHKFlowApp.UI.Blazor.Helpers.DownloadFileNames 100%
AHKFlowApp.UI.Blazor.Helpers.Greeting 100% 100%
AHKFlowApp.UI.Blazor.Helpers.HomeTimeFormat 100% 100%
AHKFlowApp.UI.Blazor.Helpers.HotkeyActionDisplay 84% 75%
AHKFlowApp.UI.Blazor.Helpers.HotstringKindDisplay 93.3% 81.8%
AHKFlowApp.UI.Blazor.Helpers.KnownShortcutWarning 96.8% 93.1%
AHKFlowApp.UI.Blazor.Helpers.MacroTextPiece 100%
AHKFlowApp.UI.Blazor.Helpers.MacroTokens 100% 100%
AHKFlowApp.UI.Blazor.Helpers.ProfileTemplateUse 100%
AHKFlowApp.UI.Blazor.Helpers.RawDecomposition 100%
AHKFlowApp.UI.Blazor.Helpers.RawDefinition 77.6% 61.2%
AHKFlowApp.UI.Blazor.Helpers.RowCombination 100%
AHKFlowApp.UI.Blazor.Helpers.ShortcutScopeDisplay 100% 100%
AHKFlowApp.UI.Blazor.Helpers.TemplateHotkey 100%
AHKFlowApp.UI.Blazor.Helpers.TemplateKeyUses 95.5% 95.4%
AHKFlowApp.UI.Blazor.Helpers.TemplateUseText 98.1% 91.6%
AHKFlowApp.UI.Blazor.Layout.MainLayout 0%
AHKFlowApp.UI.Blazor.Pages.Categories 100% 50%
AHKFlowApp.UI.Blazor.Pages.Changelog 100%
AHKFlowApp.UI.Blazor.Pages.Downloads 100%
AHKFlowApp.UI.Blazor.Pages.Health 100% 100%
AHKFlowApp.UI.Blazor.Pages.Home 100%
AHKFlowApp.UI.Blazor.Pages.Hotkeys 80% 48.3%
AHKFlowApp.UI.Blazor.Pages.Hotstrings 79.1% 65.6%
AHKFlowApp.UI.Blazor.Pages.KnownShortcuts 90.9% 100%
AHKFlowApp.UI.Blazor.Pages.Profiles 100% 78.5%
AHKFlowApp.UI.Blazor.Pages.RecycleBin 100%
AHKFlowApp.UI.Blazor.Pages.Settings 100% 50%
AHKFlowApp.UI.Blazor.Services.AhkFlowAppApiHttpClient 100%
AHKFlowApp.UI.Blazor.Services.ApiClientBase 81.8% 80%
AHKFlowApp.UI.Blazor.Services.ApiErrorMessageFactory 81.2% 61.7%
AHKFlowApp.UI.Blazor.Services.ApiResult 100%
AHKFlowApp.UI.Blazor.Services.ApiResult`1 100%
AHKFlowApp.UI.Blazor.Services.CategoriesApiClient 100% 100%
AHKFlowApp.UI.Blazor.Services.ChangelogClient 100%
AHKFlowApp.UI.Blazor.Services.DashboardApiClient 100%
AHKFlowApp.UI.Blazor.Services.DownloadOutcome 100%
AHKFlowApp.UI.Blazor.Services.DownloadsApiClient 100%
AHKFlowApp.UI.Blazor.Services.FieldErrorMapper 100% 100%
AHKFlowApp.UI.Blazor.Services.HeaderPresetInserter 100% 80%
AHKFlowApp.UI.Blazor.Services.HotkeyKeyCatalog 96% 95.4%
AHKFlowApp.UI.Blazor.Services.HotkeysApiClient 83.7% 66.6%
AHKFlowApp.UI.Blazor.Services.HotstringsApiClient 83% 61.1%
AHKFlowApp.UI.Blazor.Services.HybridUserPreferencesService 90.9%
AHKFlowApp.UI.Blazor.Services.JsFileSaver 0%
AHKFlowApp.UI.Blazor.Services.KnownShortcutCatalog 100%
AHKFlowApp.UI.Blazor.Services.KnownShortcutsApiClient 100%
AHKFlowApp.UI.Blazor.Services.LocalStorageUserPreferencesService 100%
AHKFlowApp.UI.Blazor.Services.PreferencesApiClient 100%
AHKFlowApp.UI.Blazor.Services.PreviewScheduler`2 100% 100%
AHKFlowApp.UI.Blazor.Services.ProfilesApiClient 85.7%
AHKFlowApp.UI.Blazor.Services.ProfileScriptDownloader 100% 100%
AHKFlowApp.UI.Blazor.Shared.LoginDisplay 100%
AHKFlowApp.UI.Blazor.Shared.RedirectToLogin 0%
AHKFlowApp.UI.Blazor.Startup.DevConfig 100%
AHKFlowApp.UI.Blazor.Startup.RequireApiConnectivity 100% 75%
AHKFlowApp.UI.Blazor.Startup.StartupConfigValidator 100% 100%
AHKFlowApp.UI.Blazor.Startup.StartupError 98.3% 90%
AHKFlowApp.UI.Blazor.Startup.StartupErrorRoot 100% 100%
AHKFlowApp.UI.Blazor.Startup.StartupErrorState 100%
AHKFlowApp.UI.Blazor.Validation.CategoryEditModel 100%
AHKFlowApp.UI.Blazor.Validation.HotkeyEditModel 98.9% 95%
AHKFlowApp.UI.Blazor.Validation.HotstringEditModel 95.5% 89.2%
AHKFlowApp.UI.Blazor.Validation.ProfileEditModel 100%

Per-assembly thresholds: Domain line>=85% br>=70% ; Application line>=85% br>=45% ; Infrastructure line>=70% br>=50% ; API line>=57% br>=50% ; UI.Blazor line>=65% br>=28%
Local reproduction: pwsh .\scripts\run-coverage.ps1
Threshold-only rerun: python .\scripts\ci\check-coverage-thresholds.py
Coverage policy: docs\development\coverage.md

cap proven read, not just shipped: 257.14s at 1 thread, 128.29s at 4.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
median 110.60s over 5 runs vs 257.14s serial on the same tree. 2.33x.
baseline corrected: 306.96s was a cold first run.
test count 62 -> 64, two serilog lifecycle tests added.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
30 of 30, 64 tests each, no failure line. no new flake filed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants