fix: the test suites wait with one deadline, and CI runs one project at a time #193

Merged
bjoern merged 6 commits from fix/test-deadlines-under-load into main 2026-10-11 11:19:49 +02:00
Member

The owner asked for this after another CI red on #191: RunMonitorTests.A_cleaning_call_waiting_for_the_gpu_says_why_on_its_pulse and TranscriptionJobTests.A_review_planned_alone_has_no_reader_to_send_back_and_its_verdict_still_fails_it. CI ran one dotnet test over the solution under coverage, so all four test hosts ran at once on the runner. UseCases took 1 m 19 s there against about 3 s locally, and BlazorAdapter 1 m 39 s against about 12 s. The root causes are below, each reproduced on demand and fixed at its source.

Root causes and fixes

  1. The run monitor's pulse tests waited on a real timer the loaded host could not serve in time.
    • How the pulse reaches the screen: a registry change starts RunChangedBridge's 200 ms coalescing window. That is a System.Threading timer, so its callback needs a thread-pool thread before LoadMonitorRun is dispatched and the bar re-renders.
    • The wait: bUnit's WaitForAssertion re-checks only on a render, with its 1 s default, and it blocks a pool thread while it waits.
    • The failure: under four hosts and coverage, the callback waited over 800 ms for a thread. CI's "Check count: 1 … Component render count: 5" is exactly that: no render arrived inside 1 s. No update is ever lost; it arrives late.
    • Fix (tests only): the four pulse tests run the bridge's window on a FakeTimeProvider and close it themselves after each change. The render is done before the wait starts, and no real sleep is left.
    • Proof: with the thread pool starved by a neighbour, main's test failed 5/5 with CI's message, and the fixed test passed 5/5. Removing one window-close makes the fixed test fail with the same message.
  2. The transcription review's test waited out three attempts on a 10 s wall clock. The awaited state, the review row Failed after its third needs_work, is terminal and cannot be missed. A runner that stalls the host for 10 s or more beats the deadline anyway. Proof: an 11 s host freeze failed main's helper 2–3 times out of 3, and at CI's 60 s it passed 3/3.
  3. The ruling bar's tests raced the desk bridge's 200 ms reload (found by the verifier, and the next likely CI red).
    • "Save rule" captures a local, so each render gets a new handler id. A reload landing between FindAll(...) and Click() throws UnknownEventHandlerIdException … ID '14'.
    • Fix (tests only): the tests put the bridge on a FakeTimeProvider, which it already takes from DI, and close its window after "Choose" and "No". Task.Delay(600) is gone.
    • Proof: forcing the reload between the find and the click failed main's shape 3/3, and the fixed shape passed every run. A 500 ms stall at the real click sites failed 2 of the 19 old tests every run and none of the fixed ones.

The systemic part

  • One deadline for every wait the suites share: tests/Orihon.UseCases.Tests/TestDeadlines.cs, linked into the test projects the way TestDoubles.cs is.
    • TestDeadlines.Wait is 10 s locally. ORIHON_TEST_DEADLINE_SECONDS raises it, and CI sets 60.
    • It replaces the 15 private wait helpers (12 at 10 s and 3 at 5 s) and the inline poll loops. One of those loops had no deadline at all.
    • It also covers the positive WaitAsync timeouts and the bridge tests' hidden 0.5 s loops.
    • bUnit's DefaultWaitTimeout is set to the same value once, and the explicit 5, 10 and 30 s window arguments are gone.
    • A timed-out wait now names the condition it waited for.
  • Waits that keep their own values: "nothing happens within X", fake-clock values, the live-server smoke waits, and the 5 s ceiling in VolumeStartupValidatorTests. That ceiling is a real assertion.
  • CI runs the four projects one after another, the way the house rule runs them locally.
    • It is one step with a status accumulator, so a red project does not hide the later ones.
    • The step sets the 60 s deadline, and the job gets timeout-minutes: 30 as the outer bound on a hang.
    • The coverage merge is unchanged: its glob still finds all four cobertura files. I ran the step verbatim locally, and reportgenerator read "MultiReport (4x Cobertura)".

What this does not do

  • No assertion weakened, no retry added, no exception caught. Every change is in tests and CI.
  • A real hang still fails: at 10 s locally, inside the house rule's 60 s per-project cap, with the condition named, and at 60 s on CI.
  • The cost: a failing bUnit wait now takes 10 s to fail locally instead of 1 s. CI's test job takes about a minute longer, because the projects no longer overlap.

Tests

4,678 green and 3 skipped, against 4,669 on main db3560c (+9):

Project Count Change
Domain 177 0
UseCases 2,787 +8 (the shared deadline's own tests)
Integration 1,329 (+3 skipped) 0
BlazorAdapter 385 +1

Each project ran separately under the 60 s cap, with 0 build warnings.

Verified independently: a second agent re-ran each root cause on main's code and on this branch with the same probes, plus the hang probes, the CI step and the counts, and found it clean.

Notes

  • Merge order with #192 (slice 8): #192 changes several of the same test files (floating tests deleted, new tests on the old helpers). Whichever lands second rebases, and its new waits move to TestDeadlines.
  • Not covered: the earlier one-off BlazorAdapter test-host crash on the runner is not a deadline, and this PR does not touch it.
  • Unverified on the runner: timeout-minutes is standard Actions syntax; it has not been seen on this Forgejo runner yet.

🤖 Generated with Claude Code

The owner asked for this after another CI red on #191: `RunMonitorTests.A_cleaning_call_waiting_for_the_gpu_says_why_on_its_pulse` and `TranscriptionJobTests.A_review_planned_alone_has_no_reader_to_send_back_and_its_verdict_still_fails_it`. CI ran one `dotnet test` over the solution under coverage, so all four test hosts ran at once on the runner. UseCases took 1 m 19 s there against about 3 s locally, and BlazorAdapter 1 m 39 s against about 12 s. The root causes are below, each reproduced on demand and fixed at its source. ## Root causes and fixes 1. **The run monitor's pulse tests waited on a real timer the loaded host could not serve in time.** - **How the pulse reaches the screen:** a registry change starts `RunChangedBridge`'s 200 ms coalescing window. That is a `System.Threading` timer, so its callback needs a thread-pool thread before `LoadMonitorRun` is dispatched and the bar re-renders. - **The wait:** bUnit's `WaitForAssertion` re-checks only on a render, with its 1 s default, and it blocks a pool thread while it waits. - **The failure:** under four hosts and coverage, the callback waited over 800 ms for a thread. CI's "Check count: 1 … Component render count: 5" is exactly that: no render arrived inside 1 s. No update is ever lost; it arrives late. - **Fix (tests only):** the four pulse tests run the bridge's window on a `FakeTimeProvider` and close it themselves after each change. The render is done before the wait starts, and no real sleep is left. - **Proof:** with the thread pool starved by a neighbour, main's test failed 5/5 with CI's message, and the fixed test passed 5/5. Removing one window-close makes the fixed test fail with the same message. 2. **The transcription review's test waited out three attempts on a 10 s wall clock.** The awaited state, the review row `Failed` after its third `needs_work`, is terminal and cannot be missed. A runner that stalls the host for 10 s or more beats the deadline anyway. Proof: an 11 s host freeze failed main's helper 2–3 times out of 3, and at CI's 60 s it passed 3/3. 3. **The ruling bar's tests raced the desk bridge's 200 ms reload** (found by the verifier, and the next likely CI red). - "Save rule" captures a local, so each render gets a new handler id. A reload landing between `FindAll(...)` and `Click()` throws `UnknownEventHandlerIdException … ID '14'`. - **Fix (tests only):** the tests put the bridge on a `FakeTimeProvider`, which it already takes from DI, and close its window after "Choose" and "No". `Task.Delay(600)` is gone. - **Proof:** forcing the reload between the find and the click failed main's shape 3/3, and the fixed shape passed every run. A 500 ms stall at the real click sites failed 2 of the 19 old tests every run and none of the fixed ones. ## The systemic part - **One deadline for every wait the suites share:** `tests/Orihon.UseCases.Tests/TestDeadlines.cs`, linked into the test projects the way `TestDoubles.cs` is. - `TestDeadlines.Wait` is 10 s locally. `ORIHON_TEST_DEADLINE_SECONDS` raises it, and CI sets 60. - It replaces the 15 private wait helpers (12 at 10 s and 3 at 5 s) and the inline poll loops. One of those loops had no deadline at all. - It also covers the positive `WaitAsync` timeouts and the bridge tests' hidden 0.5 s loops. - bUnit's `DefaultWaitTimeout` is set to the same value once, and the explicit 5, 10 and 30 s window arguments are gone. - A timed-out wait now names the condition it waited for. - **Waits that keep their own values:** "nothing happens within X", fake-clock values, the live-server smoke waits, and the 5 s ceiling in `VolumeStartupValidatorTests`. That ceiling is a real assertion. - **CI runs the four projects one after another,** the way the house rule runs them locally. - It is one step with a status accumulator, so a red project does not hide the later ones. - The step sets the 60 s deadline, and the job gets `timeout-minutes: 30` as the outer bound on a hang. - The coverage merge is unchanged: its glob still finds all four cobertura files. I ran the step verbatim locally, and reportgenerator read "MultiReport (4x Cobertura)". ## What this does not do - **No assertion weakened, no retry added, no exception caught.** Every change is in tests and CI. - **A real hang still fails:** at 10 s locally, inside the house rule's 60 s per-project cap, with the condition named, and at 60 s on CI. - **The cost:** a failing bUnit wait now takes 10 s to fail locally instead of 1 s. CI's test job takes about a minute longer, because the projects no longer overlap. ## Tests 4,678 green and 3 skipped, against 4,669 on main db3560c (+9): | Project | Count | Change | |---|---|---| | Domain | 177 | 0 | | UseCases | 2,787 | +8 (the shared deadline's own tests) | | Integration | 1,329 (+3 skipped) | 0 | | BlazorAdapter | 385 | +1 | Each project ran separately under the 60 s cap, with 0 build warnings. **Verified independently:** a second agent re-ran each root cause on main's code and on this branch with the same probes, plus the hang probes, the CI step and the counts, and found it clean. ## Notes - **Merge order with #192 (slice 8):** #192 changes several of the same test files (floating tests deleted, new tests on the old helpers). Whichever lands second rebases, and its new waits move to `TestDeadlines`. - **Not covered:** the earlier one-off BlazorAdapter test-host crash on the runner is not a deadline, and this PR does not touch it. - **Unverified on the runner:** `timeout-minutes` is standard Actions syntax; it has not been seen on this Forgejo runner yet. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
A pulse change reaches the strip only through the bridge's 200 ms coalescing window. On the real
clock that window is a thread-pool timer, and a loaded test host can hold its callback past bUnit's
one-second wait: CI failed the GPU-wait test with the line still at "checking the cleaning server".

The pulse tests now put the bridge on a FakeTimeProvider and advance it after each change, so the
re-read and the render land on the test thread before the wait starts. No real sleep is left in
them; the burst test keeps the real clock on purpose.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Every positive wait in the four test projects had its own budget: fifteen private copies of the
same poll helper at 10 s or 5 s, inline loops at 10-30 s (one with none at all), WaitAsync
timeouts, a 0.5 s attempt count in the bridge tests, and bUnit's one-second default under 310
component waits. A shared CI runner stalls a test host for seconds at a time, and whichever budget
was shortest failed: TranscriptionJobTests' review waits out three engine attempts, and its 10 s
ran out on a stall with the engine milliseconds from done.

TestDeadlines (linked into the BlazorAdapter and Integration suites the way TestDoubles is) holds
the one deadline, its UntilAsync poll, and bUnit's DefaultWaitTimeout through AdapterTestContext.
It is 10 s locally, so a hang still fails well inside a project's minute, and
ORIHON_TEST_DEADLINE_SECONDS raises it on CI. A wait ends the moment its condition holds, so a
green run is exactly as fast. "Nothing happens within X" waits and fake-clock values are left as
they were; a failed UntilAsync now names the condition it waited for.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The single solution-wide dotnet test ran all four test hosts at once under coverage, so they
starved each other's thread pools: suites that take 2-12 s locally took 79-99 s on the runner. The
test step now runs the projects one after another, as they run locally, and still goes on to the
later ones when one fails; each writes its coverage where the merge step already looks. The step
raises the shared test deadline to 60 s, and the job gets a 30-minute ceiling for a hang no
deadline catches.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fix: the ruling bar's tests close the desk bridge's window themselves
All checks were successful
CI / build (pull_request) Successful in 45s
CI / test (pull_request) Successful in 3m0s
e3c7a0be57
An answer reaches the bar through the desk bridge's 200 ms coalescing window. On the real clock
that window fired on a pool thread whenever the timer got one, so a loaded host could land the
re-render between a test's find and its click: "Save rule"'s handler closes over the answer and
gets a new id on every render, and bUnit threw "no event handler with ID 14".

The ruling-bar tests now put the bridge on a FakeTimeProvider and close the window right after
"Choose" and "No", so the reload renders on the test thread before the next find. The failed-accept
check closes the window instead of sleeping past it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

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

Commit: 690eeae · Generated: 2026-10-11 09:08:34 UTC · Revision: #2

Summary

Summary
Generated on: 10/11/2026 - 09:08:34
Coverage date: 10/11/2026 - 09:06:43 - 10/11/2026 - 09:08:30
Parser: MultiReport (4x Cobertura)
Assemblies: 6
Classes: 934
Files: 417
Line coverage: 97.1% (48695 of 50106)
Covered lines: 48695
Uncovered lines: 1411
Coverable lines: 50106
Total lines: 77358
Branch coverage: 88.8% (10099 of 11362)
Covered branches: 10099
Total branches: 11362
Method coverage: Feature is only available for sponsors

Coverage

Orihon.BlazorAdapter - 96.6%
Name Line Branch
Orihon.BlazorAdapter 96.6% 91.1%
Orihon.BlazorAdapter.Bible.AddBeatRowRequested 100%
Orihon.BlazorAdapter.Bible.AddCharacterRowRequested 100%
Orihon.BlazorAdapter.Bible.AddGlossaryRowRequested 100%
Orihon.BlazorAdapter.Bible.AddHouseRuleRowRequested 100%
Orihon.BlazorAdapter.Bible.AddLoreRowRequested 100%
Orihon.BlazorAdapter.Bible.BibleEffects 89.8% 76.9%
Orihon.BlazorAdapter.Bible.BibleLoaded 100%
Orihon.BlazorAdapter.Bible.BiblePage 92.3% 80.5%
Orihon.BlazorAdapter.Bible.BibleReducers 90.6%
Orihon.BlazorAdapter.Bible.BibleState 100%
Orihon.BlazorAdapter.Bible.BibleWriteFailed 100%
Orihon.BlazorAdapter.Bible.DeleteBeatRowRequested 100%
Orihon.BlazorAdapter.Bible.DeleteCharacterRowRequested 100%
Orihon.BlazorAdapter.Bible.DeleteGlossaryRowRequested 100%
Orihon.BlazorAdapter.Bible.DeleteHouseRuleRowRequested 0%
Orihon.BlazorAdapter.Bible.DeleteLoreRowRequested 0%
Orihon.BlazorAdapter.Bible.LoadBible 100%
Orihon.BlazorAdapter.Bible.ReorderBeatsRequested 0%
Orihon.BlazorAdapter.Bible.SaveOverviewRequested 100%
Orihon.BlazorAdapter.Bible.SaveSummaryRequested 100%
Orihon.BlazorAdapter.Bible.UpdateBeatRowRequested 100%
Orihon.BlazorAdapter.Bible.UpdateCharacterRowRequested 100%
Orihon.BlazorAdapter.Bible.UpdateGlossaryRowRequested 100%
Orihon.BlazorAdapter.Bible.UpdateHouseRuleRowRequested 100%
Orihon.BlazorAdapter.Bible.UpdateLoreRowRequested 100%
Orihon.BlazorAdapter.BlazorAdapterAssembly 100%
Orihon.BlazorAdapter.PageWorkspace.CleanedDraft 100%
Orihon.BlazorAdapter.PageWorkspace.CleanedView 100% 100%
Orihon.BlazorAdapter.PageWorkspace.CleaningReprocessSent 100%
Orihon.BlazorAdapter.PageWorkspace.CreateRegionRequested 100%
Orihon.BlazorAdapter.PageWorkspace.DeletePageSummaryRequested 100%
Orihon.BlazorAdapter.PageWorkspace.DeleteRegionRequested 100%
Orihon.BlazorAdapter.PageWorkspace.LoadPageCleaning 100%
Orihon.BlazorAdapter.PageWorkspace.LoadPageWorkspace 100%
Orihon.BlazorAdapter.PageWorkspace.MatchSourceToBoxRequested 100%
Orihon.BlazorAdapter.PageWorkspace.PageCleaningLoaded 100%
Orihon.BlazorAdapter.PageWorkspace.PageStepsLoaded 100%
Orihon.BlazorAdapter.PageWorkspace.PageSummarySaved 100%
Orihon.BlazorAdapter.PageWorkspace.PageViewport 100% 100%
Orihon.BlazorAdapter.PageWorkspace.PageWorkspaceEffects 100% 100%
Orihon.BlazorAdapter.PageWorkspace.PageWorkspaceLoaded 100%
Orihon.BlazorAdapter.PageWorkspace.PageWorkspacePage 96.3% 91.3%
Orihon.BlazorAdapter.PageWorkspace.PageWorkspaceReducers 100% 68.7%
Orihon.BlazorAdapter.PageWorkspace.PageWorkspaceState 100%
Orihon.BlazorAdapter.PageWorkspace.PageWriteFailed 100%
Orihon.BlazorAdapter.PageWorkspace.PickCandidateRequested 100%
Orihon.BlazorAdapter.PageWorkspace.RegionCreated 100%
Orihon.BlazorAdapter.PageWorkspace.RegionSaved 100%
Orihon.BlazorAdapter.PageWorkspace.ReorderRegionsRequested 100%
Orihon.BlazorAdapter.PageWorkspace.ReprocessCleaningRequested 100%
Orihon.BlazorAdapter.PageWorkspace.ReprocessPageRequested 100%
Orihon.BlazorAdapter.PageWorkspace.ReprocessTranscriptionRequested 100%
Orihon.BlazorAdapter.PageWorkspace.ReprocessTranslationRequested 100%
Orihon.BlazorAdapter.PageWorkspace.RunTranscriptionAgainRequested 100%
Orihon.BlazorAdapter.PageWorkspace.SavePageSummaryRequested 100%
Orihon.BlazorAdapter.PageWorkspace.SaveRegionRequested 100%
Orihon.BlazorAdapter.PageWorkspace.SetPageMetaRequested 100%
Orihon.BlazorAdapter.PageWorkspace.TextReviewNoteLoaded 100%
Orihon.BlazorAdapter.PageWorkspace.TranscriptionSendBackRefused 100%
Orihon.BlazorAdapter.Projects.CreateProjectRequested 100%
Orihon.BlazorAdapter.Projects.DecideSetupContinuation 100%
Orihon.BlazorAdapter.Projects.DeleteProjectRequested 100%
Orihon.BlazorAdapter.Projects.FinishSetupRequested 100%
Orihon.BlazorAdapter.Projects.ImportPagesRequested 100%
Orihon.BlazorAdapter.Projects.LoadWizard 100%
Orihon.BlazorAdapter.Projects.PageOrganizer 96% 95%
Orihon.BlazorAdapter.Projects.PagesImported 100%
Orihon.BlazorAdapter.Projects.ProjectDeleteFailed 100%
Orihon.BlazorAdapter.Projects.ProjectListEffects 100% 100%
Orihon.BlazorAdapter.Projects.ProjectListPage 89.7% 91.6%
Orihon.BlazorAdapter.Projects.ProjectListReducers 100%
Orihon.BlazorAdapter.Projects.ProjectListState 100%
Orihon.BlazorAdapter.Projects.ProjectsLoaded 100%
Orihon.BlazorAdapter.Projects.ProjectWizardEffects 93.8% 90%
Orihon.BlazorAdapter.Projects.ProjectWizardPage 95.3% 84.1%
Orihon.BlazorAdapter.Projects.ProjectWizardReducers 100%
Orihon.BlazorAdapter.Projects.ProjectWizardState 100%
Orihon.BlazorAdapter.Projects.SetupChat 93.5% 100%
Orihon.BlazorAdapter.Projects.SetupChatEffects 100% 100%
Orihon.BlazorAdapter.Projects.SetupChatFailed 100%
Orihon.BlazorAdapter.Projects.SetupChatReducers 100%
Orihon.BlazorAdapter.Projects.SetupChatState 100%
Orihon.BlazorAdapter.Projects.SetupChatUpdated 100%
Orihon.BlazorAdapter.Projects.StartSetupChat 100%
Orihon.BlazorAdapter.Projects.SubmitSetupAnswer 100%
Orihon.BlazorAdapter.Projects.WizardDeletePagesRequested 100%
Orihon.BlazorAdapter.Projects.WizardLoaded 100%
Orihon.BlazorAdapter.Projects.WizardMovePagesRequested 100%
Orihon.BlazorAdapter.Projects.WizardMovePagesToNewChapterRequested 100%
Orihon.BlazorAdapter.Projects.WizardReorderPagesRequested 100%
Orihon.BlazorAdapter.Projects.WizardWriteFailed 100%
Orihon.BlazorAdapter.Rulings.AcceptProposalRequested 100%
Orihon.BlazorAdapter.Rulings.AnsweredRuling 100%
Orihon.BlazorAdapter.Rulings.AnswerRulingRequested 100%
Orihon.BlazorAdapter.Rulings.DeclineProposalRequested 100%
Orihon.BlazorAdapter.Rulings.DismissRulingRequested 100%
Orihon.BlazorAdapter.Rulings.RulingBar 100% 96.4%
Orihon.BlazorAdapter.Rulings.RulingDeskBridge 94.2% 91.6%
Orihon.BlazorAdapter.Rulings.RulingsEffects 95.4% 83.3%
Orihon.BlazorAdapter.Rulings.RulingsLoaded 100%
Orihon.BlazorAdapter.Rulings.RulingsReducers 100%
Orihon.BlazorAdapter.Rulings.RulingsState 100%
Orihon.BlazorAdapter.Rulings.RulingWriteFailed 100%
Orihon.BlazorAdapter.Rulings.SaveAnswerAsHouseRuleRequested 100%
Orihon.BlazorAdapter.Runs.CancelMonitorRun 100%
Orihon.BlazorAdapter.Runs.MonitorPageRef 100%
Orihon.BlazorAdapter.Runs.MonitorRunLoaded 100%
Orihon.BlazorAdapter.Runs.RetryMonitorExecution 100%
Orihon.BlazorAdapter.Runs.RunChangedBridge 95% 92.8%
Orihon.BlazorAdapter.Runs.RunMonitor 98.2% 94.4%
Orihon.BlazorAdapter.Runs.RunMonitorEffects 100% 92.8%
Orihon.BlazorAdapter.Runs.RunMonitorReducers 100%
Orihon.BlazorAdapter.Runs.RunMonitorState 100%
Orihon.BlazorAdapter.Settings.AgentDebriefsLoaded 100%
Orihon.BlazorAdapter.Settings.AgentDebriefsLoadFailed 100%
Orihon.BlazorAdapter.Settings.AgentEffortPicked 100%
Orihon.BlazorAdapter.Settings.AgentEffortSaved 100%
Orihon.BlazorAdapter.Settings.AgentEffortSaveFailed 100%
Orihon.BlazorAdapter.Settings.AgentFeedbackLoaded 100%
Orihon.BlazorAdapter.Settings.AgentFeedbackLoadFailed 0%
Orihon.BlazorAdapter.Settings.AgentModelPicked 100%
Orihon.BlazorAdapter.Settings.AgentModelSaved 100%
Orihon.BlazorAdapter.Settings.AgentModelSaveFailed 100%
Orihon.BlazorAdapter.Settings.AgentRoutingPicked 100%
Orihon.BlazorAdapter.Settings.AgentRoutingSaved 100%
Orihon.BlazorAdapter.Settings.AgentRoutingSaveFailed 0%
Orihon.BlazorAdapter.Settings.AgentTranscriptsLoaded 100%
Orihon.BlazorAdapter.Settings.AgentTranscriptsLoadFailed 0%
Orihon.BlazorAdapter.Settings.CleaningInFlightPicked 100%
Orihon.BlazorAdapter.Settings.CleaningInFlightSaveFailed 100%
Orihon.BlazorAdapter.Settings.CleaningResumed 100%
Orihon.BlazorAdapter.Settings.CleaningRunnerLoaded 100%
Orihon.BlazorAdapter.Settings.CleaningServerChecked 100%
Orihon.BlazorAdapter.Settings.CleaningServerSaved 100%
Orihon.BlazorAdapter.Settings.CleaningServerSaveFailed 100%
Orihon.BlazorAdapter.Settings.EffortOption 100% 100%
Orihon.BlazorAdapter.Settings.KeySaved 100%
Orihon.BlazorAdapter.Settings.KeySaveFailed 100%
Orihon.BlazorAdapter.Settings.ModelOptionsLoaded 100%
Orihon.BlazorAdapter.Settings.ModelOptionsUnavailable 100%
Orihon.BlazorAdapter.Settings.ResumeCleaningFailed 100%
Orihon.BlazorAdapter.Settings.RoutingOption 100% 100%
Orihon.BlazorAdapter.Settings.RunConcurrencyPicked 100%
Orihon.BlazorAdapter.Settings.RunConcurrencySaveFailed 100%
Orihon.BlazorAdapter.Settings.SaveCleaningServerRequested 100%
Orihon.BlazorAdapter.Settings.SaveKeyRequested 100%
Orihon.BlazorAdapter.Settings.SettingsEffects 92.3% 83.3%
Orihon.BlazorAdapter.Settings.SettingsLoaded 100%
Orihon.BlazorAdapter.Settings.SettingsPage 97.7% 91.5%
Orihon.BlazorAdapter.Settings.SettingsReducers 96.1% 64.2%
Orihon.BlazorAdapter.Settings.SettingsState 100%
Orihon.BlazorAdapter.Settings.TranscriptFilterPicked 100%
Orihon.BlazorAdapter.Settings.TranscriptPagePicked 100%
Orihon.BlazorAdapter.Settings.TranscriptPicked 100%
Orihon.BlazorAdapter.Settings.TranscriptTextLoaded 100%
Orihon.BlazorAdapter.Settings.TranscriptTextLoadFailed 100%
Orihon.BlazorAdapter.Uploads.UploadTransfer 96.5% 100%
Orihon.BlazorAdapter.Uploads.UploadTransferProgress 100% 100%
Orihon.BlazorAdapter.Uploads.UploadTransferResult 100%
Orihon.BlazorAdapter.Workspace.BoxAnswered 100%
Orihon.BlazorAdapter.Workspace.CleanAnswered 100%
Orihon.BlazorAdapter.Workspace.CreateChapterRequested 100%
Orihon.BlazorAdapter.Workspace.DeleteChapterRequested 100%
Orihon.BlazorAdapter.Workspace.DeletePageRequested 100%
Orihon.BlazorAdapter.Workspace.DeleteSummaryRequested 100%
Orihon.BlazorAdapter.Workspace.LoadProjectWorkspace 100%
Orihon.BlazorAdapter.Workspace.MovePageRequested 100%
Orihon.BlazorAdapter.Workspace.ProjectMetadataCard 95.6% 92.8%
Orihon.BlazorAdapter.Workspace.ProjectMetadataSaved 100%
Orihon.BlazorAdapter.Workspace.ProjectWorkspaceEffects 100% 100%
Orihon.BlazorAdapter.Workspace.ProjectWorkspaceLoaded 100%
Orihon.BlazorAdapter.Workspace.ProjectWorkspacePage 95.8% 87.7%
Orihon.BlazorAdapter.Workspace.ProjectWorkspaceReducers 100% 62.5%
Orihon.BlazorAdapter.Workspace.ProjectWorkspaceState 100%
Orihon.BlazorAdapter.Workspace.RenameChapterRequested 100%
Orihon.BlazorAdapter.Workspace.ReorderChaptersRequested 100%
Orihon.BlazorAdapter.Workspace.ReorderPagesRequested 100%
Orihon.BlazorAdapter.Workspace.RunBibleRequested 100%
Orihon.BlazorAdapter.Workspace.RunBoxRequested 100%
Orihon.BlazorAdapter.Workspace.RunCleanRequested 100%
Orihon.BlazorAdapter.Workspace.RunTranscriptionRequested 100%
Orihon.BlazorAdapter.Workspace.RunTranslationRequested 100%
Orihon.BlazorAdapter.Workspace.SaveProjectMetadataRequested 100%
Orihon.BlazorAdapter.Workspace.SaveSummaryRequested 100%
Orihon.BlazorAdapter.Workspace.SetPageKindRequested 100%
Orihon.BlazorAdapter.Workspace.SummaryDeleted 100%
Orihon.BlazorAdapter.Workspace.SummarySaved 100%
Orihon.BlazorAdapter.Workspace.TranscribeAnswered 100%
Orihon.BlazorAdapter.Workspace.WorkspaceImportRequested 100%
Orihon.BlazorAdapter.Workspace.WorkspaceWriteFailed 100%
Orihon.Domain - 100%
Name Line Branch
Orihon.Domain 100% 100%
Orihon.Domain.Agents.AgentDebrief 100% 100%
Orihon.Domain.Agents.AgentDescriptor 100% 100%
Orihon.Domain.Agents.AgentFeedback 100% 100%
Orihon.Domain.Agents.AgentRoster 100% 100%
Orihon.Domain.Agents.InvocationBudget 100%
Orihon.Domain.Bible.Character 100% 100%
Orihon.Domain.Bible.GlossaryEntry 100% 100%
Orihon.Domain.Bible.HouseRule 100%
Orihon.Domain.Bible.LoreEntry 100% 100%
Orihon.Domain.Bible.PageSummary 100%
Orihon.Domain.Bible.StoryBeat 100%
Orihon.Domain.Bible.StoryOverview 100%
Orihon.Domain.Cleaning.AppliedResult 100%
Orihon.Domain.Cleaning.CleaningBasis 100%
Orihon.Domain.Cleaning.CleaningCall 100% 100%
Orihon.Domain.Cleaning.CleaningCallRect 100%
Orihon.Domain.Cleaning.CleaningCanvas 100%
Orihon.Domain.Cleaning.CleaningClause 100%
Orihon.Domain.Cleaning.CleaningEdit 100% 100%
Orihon.Domain.Cleaning.CleaningJudgement 100%
Orihon.Domain.Cleaning.CleaningOutput 100% 100%
Orihon.Domain.Cleaning.CleaningOverrides 100%
Orihon.Domain.Cleaning.CleaningServerIdentity 100%
Orihon.Domain.Cleaning.CleaningServerState 100% 100%
Orihon.Domain.Cleaning.CleaningVerdicts 100% 100%
Orihon.Domain.Cleaning.CleaningViewRecord 100% 100%
Orihon.Domain.Cleaning.CleaningWindow 100%
Orihon.Domain.Cleaning.EditedRegion 100%
Orihon.Domain.Cleaning.PageBox 100% 100%
Orihon.Domain.Cleaning.PageCleaning 100% 100%
Orihon.Domain.Cleaning.PlannedCleaningCall 100%
Orihon.Domain.Cleaning.RegionCleaning 100% 100%
Orihon.Domain.Cleaning.RegionShape 100%
Orihon.Domain.Cleaning.ResultSource 100% 100%
Orihon.Domain.Cleaning.ViewTile 100%
Orihon.Domain.Projects.Project 100% 100%
Orihon.Domain.Projects.ProjectProfile 100%
Orihon.Domain.Runs.Execution 100% 100%
Orihon.Domain.Runs.RegionProblem 100%
Orihon.Domain.Runs.Run 100%
Orihon.Domain.Settings.AppSetting 100%
Orihon.Domain.Text 100% 100%
Orihon.Domain.Translation.BoundingBox 100% 100%
Orihon.Domain.Translation.Chapter 100%
Orihon.Domain.Translation.Page 100% 100%
Orihon.Domain.Translation.Region 100% 100%
Orihon.Domain.Translation.RegionProfile 100%
Orihon.Infrastructure - 98.3%
Name Line Branch
Orihon.Infrastructure 98.3% 87.3%
Orihon.Infrastructure.Agents.EfAgentDebriefStore 100%
Orihon.Infrastructure.Agents.EfAgentFeedbackStore 100%
Orihon.Infrastructure.Bible.EfBibleStore 95.2% 92.8%
Orihon.Infrastructure.Cleaning.EfCleaningCallStore 98.8% 100%
Orihon.Infrastructure.Cleaning.EfCleaningStateStore 100% 100%
Orihon.Infrastructure.DependencyInjection 100% 100%
Orihon.Infrastructure.Gateways.AgentToolAdapter 100%
Orihon.Infrastructure.Gateways.AgentToolAdapter`1 100% 100%
Orihon.Infrastructure.Gateways.AgentTranscript 95.6% 89%
Orihon.Infrastructure.Gateways.Cleaning.BoxChecks 100% 100%
Orihon.Infrastructure.Gateways.Cleaning.DerivedInk 100%
Orihon.Infrastructure.Gateways.Cleaning.EdgeMetrics 100% 100%
Orihon.Infrastructure.Gateways.Cleaning.FillResult 100%
Orihon.Infrastructure.Gateways.Cleaning.GateStats 100%
Orihon.Infrastructure.Gateways.Cleaning.GreyRule 100% 100%
Orihon.Infrastructure.Gateways.Cleaning.LabComposite 100% 98.2%
Orihon.Infrastructure.Gateways.Cleaning.LabFill 100% 100%
Orihon.Infrastructure.Gateways.Cleaning.LabGeometry 100% 100%
Orihon.Infrastructure.Gateways.Cleaning.LabInk 100% 98.3%
Orihon.Infrastructure.Gateways.Cleaning.LabMetrics 100% 100%
Orihon.Infrastructure.Gateways.Cleaning.LabPaper 100% 97.3%
Orihon.Infrastructure.Gateways.Cleaning.LabReadings 100%
Orihon.Infrastructure.Gateways.Cleaning.LabTone 100% 100%
Orihon.Infrastructure.Gateways.Cleaning.PageRects 100%
Orihon.Infrastructure.Gateways.Cleaning.PaperComponent 100%
Orihon.Infrastructure.Gateways.Cleaning.PatchPixels 100% 100%
Orihon.Infrastructure.Gateways.Cleaning.RasterCleaningCompositor 100% 98%
Orihon.Infrastructure.Gateways.Cleaning.RasterCleaningImages 100% 100%
Orihon.Infrastructure.Gateways.Cleaning.RasterCleaningMetrics 100% 97.3%
Orihon.Infrastructure.Gateways.Cleaning.RasterCleaningViews 99.4% 98.3%
Orihon.Infrastructure.Gateways.Cleaning.RasterInkAnalyzer 100% 100%
Orihon.Infrastructure.Gateways.Cleaning.RasterPlateComposer 100% 100%
Orihon.Infrastructure.Gateways.Cleaning.Rgb 100%
Orihon.Infrastructure.Gateways.Cleaning.ToneCurve 100%
Orihon.Infrastructure.Gateways.Cleaning.ViewTiling 100% 100%
Orihon.Infrastructure.Gateways.FileSystemAgentTranscriptStore 85.2% 80.8%
Orihon.Infrastructure.Gateways.HttpWebPageFetcher 95.1% 83.3%
Orihon.Infrastructure.Gateways.LabelFont 100% 50%
Orihon.Infrastructure.Gateways.OpenRouterLlmGateway 90.2% 82.1%
Orihon.Infrastructure.Gateways.QwenImageServerGateway 96.7% 90%
Orihon.Infrastructure.Gateways.QwenImageServerJson 96% 72.3%
Orihon.Infrastructure.Gateways.Raster.FloatImage 77.7% 50%
Orihon.Infrastructure.Gateways.Raster.GrayImage 95.8% 75%
Orihon.Infrastructure.Gateways.Raster.Labels 100% 100%
Orihon.Infrastructure.Gateways.Raster.Mask 99.1% 98.5%
Orihon.Infrastructure.Gateways.Raster.NumpyMath 95.1% 95%
Orihon.Infrastructure.Gateways.Raster.PillowBlur 98.4% 89.4%
Orihon.Infrastructure.Gateways.Raster.PillowLanczos 100% 100%
Orihon.Infrastructure.Gateways.Raster.PixelBox 100% 100%
Orihon.Infrastructure.Gateways.Raster.RgbImage 96.4% 75%
Orihon.Infrastructure.Gateways.Raster.ScipyGaussian 100% 100%
Orihon.Infrastructure.Gateways.SkiaImages 100% 100%
Orihon.Infrastructure.Gateways.SkiaPageImageRenderer 97.4% 90.8%
Orihon.Infrastructure.Gateways.SkiaPixelDigest 100% 100%
Orihon.Infrastructure.Gateways.UntaggedPng 100% 100%
Orihon.Infrastructure.Persistence.Configurations.AgentDebriefConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.AgentFeedbackConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.AppSettingConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.ChapterConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.CharacterConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.CleaningCallConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.CleaningEditConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.CleaningOutputConfiguratio
n
100%
Orihon.Infrastructure.Persistence.Configurations.CleaningServerStateConfigu
ration
100%
Orihon.Infrastructure.Persistence.Configurations.CleaningViewConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.ExecutionConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.GlossaryEntryConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.HouseRuleConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.JsonColumnMapper 100%
Orihon.Infrastructure.Persistence.Configurations.LoreEntryConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.PageCleaningConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.PageConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.PageSummaryConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.ProjectConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.RegionCleaningConfiguratio
n
100%
Orihon.Infrastructure.Persistence.Configurations.RegionConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.RunConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.StoryBeatConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.StoryOverviewConfiguration 100%
Orihon.Infrastructure.Persistence.Converters.UtcTicksConverter 100%
Orihon.Infrastructure.Persistence.Migrations.AddAgentDebriefs 99.5%
Orihon.Infrastructure.Persistence.Migrations.AddAgentFeedback 99.5%
Orihon.Infrastructure.Persistence.Migrations.AddAppSettings 99.3%
Orihon.Infrastructure.Persistence.Migrations.AddCleaningCallAttempt 99.6%
Orihon.Infrastructure.Persistence.Migrations.AddCleaningCallCanvasMode 99.6%
Orihon.Infrastructure.Persistence.Migrations.AddCleaningCallRunner 99.3%
Orihon.Infrastructure.Persistence.Migrations.AddCleaningStageFacts 99.1%
Orihon.Infrastructure.Persistence.Migrations.AddCleaningState 99.1%
Orihon.Infrastructure.Persistence.Migrations.AddExecutionFeedbackRegions 99.3%
Orihon.Infrastructure.Persistence.Migrations.AddExecutionSentBackBy 99.6%
Orihon.Infrastructure.Persistence.Migrations.AddHouseRules 99.6%
Orihon.Infrastructure.Persistence.Migrations.AddPagePassFacts 99%
Orihon.Infrastructure.Persistence.Migrations.AddProjectSourceLanguage 99.3%
Orihon.Infrastructure.Persistence.Migrations.AddRegionFitBoxDropFillHints 98.1%
Orihon.Infrastructure.Persistence.Migrations.AddRegionForm 99.4%
Orihon.Infrastructure.Persistence.Migrations.AddRegionInk 99.4%
Orihon.Infrastructure.Persistence.Migrations.AddRegionSourceBox 99.6%
Orihon.Infrastructure.Persistence.Migrations.AddRuns 99.1%
Orihon.Infrastructure.Persistence.Migrations.AddStoryOverview 99.5%
Orihon.Infrastructure.Persistence.Migrations.AddTextDoneAndReviewNote 99.2%
Orihon.Infrastructure.Persistence.Migrations.DropRegionContainer 99.1%
Orihon.Infrastructure.Persistence.Migrations.DropRegionInk 99.5%
Orihon.Infrastructure.Persistence.Migrations.DropRegionType 99%
Orihon.Infrastructure.Persistence.Migrations.DropRegionTypeset 99.4%
Orihon.Infrastructure.Persistence.Migrations.InitialTranslationDomain 97.3%
Orihon.Infrastructure.Persistence.Migrations.OrihonDbContextModelSnapshot 100%
Orihon.Infrastructure.Persistence.Migrations.RenameSourceTargetColumns 97.2%
Orihon.Infrastructure.Persistence.Migrations.ReplaceFitBoxWithContainerSeed 99.2%
Orihon.Infrastructure.Persistence.Migrations.RetireFloatingPassAndAddBoxesD
one
98.1% 100%
Orihon.Infrastructure.Persistence.OrihonDbContext 100%
Orihon.Infrastructure.Persistence.OrihonDbContextFactory 100%
Orihon.Infrastructure.Projects.EfProjectStore 100% 100%
Orihon.Infrastructure.Projects.FileSystemPageImageStore 100% 100%
Orihon.Infrastructure.Runs.EfRunStore 100% 100%
Orihon.Infrastructure.Settings.EfAppSettingsStore 100% 100%
Orihon.Infrastructure.Translation.EfChapterStore 100% 100%
Orihon.Infrastructure.Translation.EfPageStore 100% 100%
Orihon.Infrastructure.Translation.EfRegionStore 100% 100%
Orihon.Infrastructure.Translation.Ordering 100% 100%
System.Text.RegularExpressions.Generated 70.6% 53.3%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>F7FCA343D2B99030
A835C427B12E8B84E2A8A7283193FC51C220B5B4E80CE8D56__BlankLines_4
77.9% 76.6%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>F7FCA343D2B99030
A835C427B12E8B84E2A8A7283193FC51C220B5B4E80CE8D56__BlockBreaks_1
59% 42.5%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>F7FCA343D2B99030
A835C427B12E8B84E2A8A7283193FC51C220B5B4E80CE8D56__SpaceRuns_3
89.4% 75%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>F7FCA343D2B99030
A835C427B12E8B84E2A8A7283193FC51C220B5B4E80CE8D56__Tags_2
83.7% 62.5%
Orihon.Kernel - 90.9%
Name Line Branch
Orihon.Kernel 90.9% 75%
Orihon.Kernel.Err`1 100%
Orihon.Kernel.Ok`1 100%
Orihon.Kernel.Result`1 88.8% 75%
Orihon.Server - 95.1%
Name Line Branch
Orihon.Server 95.1% 79.4%
Orihon.Server.CleaningCallRunnerBootstrap 100%
Orihon.Server.Components.App 100%
Orihon.Server.Components.Layout.MainLayout 100%
Orihon.Server.Components.Pages.Gate 64.2% 66.6%
Orihon.Server.Diagnostics.FakeCleaningServer 94.6% 80.7%
Orihon.Server.RunEngineBootstrap 100%
Orihon.Server.Security.AccessGate 91.8% 41.6%
Orihon.Server.Security.AccessSecret 100% 50%
Orihon.Server.VolumeStartupValidator 100% 100%
Program 96.7% 85.7%
Orihon.UseCases - 94.4%
Name Line Branch
Orihon.UseCases 94.4% 88.9%
Orihon.UseCases.Agents.AgentAttemptPreparation 100%
Orihon.UseCases.Agents.AgentAttemptSupport 98.6% 98.8%
Orihon.UseCases.Agents.AgentBlueprint 100%
Orihon.UseCases.Agents.AgentCapDebrief 100%
Orihon.UseCases.Agents.AgentGlossary 100%
Orihon.UseCases.Agents.AgentInvocation 100%
Orihon.UseCases.Agents.AgentOutcome 100%
Orihon.UseCases.Agents.AgentTexts 100% 100%
Orihon.UseCases.Agents.AgentTool`1 90.9% 75%
Orihon.UseCases.Agents.AgentToolImage 100%
Orihon.UseCases.Agents.AgentToolResult 100%
Orihon.UseCases.Agents.Annotation.AddRegionParams 100%
Orihon.UseCases.Agents.Annotation.AddRegionTool 100% 100%
Orihon.UseCases.Agents.Annotation.AnnotationBlueprints 100%
Orihon.UseCases.Agents.Annotation.AnnotationStage 100% 87.5%
Orihon.UseCases.Agents.Annotation.BoundBoxParams 100%
Orihon.UseCases.Agents.Annotation.BoundContactSheetTool 91.3% 75%
Orihon.UseCases.Agents.Annotation.BoundCropParams 100%
Orihon.UseCases.Agents.Annotation.BoundCropTool 100%
Orihon.UseCases.Agents.Annotation.BoundDeleteParams 100%
Orihon.UseCases.Agents.Annotation.BoundViewPageTool 92% 80%
Orihon.UseCases.Agents.Annotation.BoundViewParams 100%
Orihon.UseCases.Agents.Annotation.BoxCreationExecutor 100% 75%
Orihon.UseCases.Agents.Annotation.BoxQaExecutor 93.1% 83.3%
Orihon.UseCases.Agents.Annotation.BoxRefinementExecutor 96.7% 91.6%
Orihon.UseCases.Agents.Annotation.ClassifyRegionParams 100%
Orihon.UseCases.Agents.Annotation.ClassifyRegionTool 100% 100%
Orihon.UseCases.Agents.Annotation.DeleteBoundRegionTool 100% 100%
Orihon.UseCases.Agents.Annotation.DeleteRegionParams 100%
Orihon.UseCases.Agents.Annotation.DeleteRegionTool 100% 100%
Orihon.UseCases.Agents.Annotation.FindGlossaryParams 100%
Orihon.UseCases.Agents.Annotation.FindGlossaryTool 94.4% 75%
Orihon.UseCases.Agents.Annotation.ListRegionsTool 92.5% 86.3%
Orihon.UseCases.Agents.Annotation.MoveResizeBoundTool 100% 100%
Orihon.UseCases.Agents.Annotation.MoveResizeRegionParams 100%
Orihon.UseCases.Agents.Annotation.MoveResizeRegionTool 95.6% 75%
Orihon.UseCases.Agents.Annotation.NoteRegionParams 100%
Orihon.UseCases.Agents.Annotation.NoteRegionTool 100% 100%
Orihon.UseCases.Agents.Annotation.QaReportSink 100% 100%
Orihon.UseCases.Agents.Annotation.RegionAuthoringAccess 91.1% 84.6%
Orihon.UseCases.Agents.Annotation.RegionBriefing 100% 100%
Orihon.UseCases.Agents.Annotation.RegionCropParams 100%
Orihon.UseCases.Agents.Annotation.RegionCropTool 100% 100%
Orihon.UseCases.Agents.Annotation.RegionForms 100% 100%
Orihon.UseCases.Agents.Annotation.RegionProblemParams 100%
Orihon.UseCases.Agents.Annotation.RegionWindow 100% 100%
Orihon.UseCases.Agents.Annotation.RejectRegionParams 100%
Orihon.UseCases.Agents.Annotation.RejectRegionTool 100% 100%
Orihon.UseCases.Agents.Annotation.ReorderRegionParams 100%
Orihon.UseCases.Agents.Annotation.ReorderRegionTool 96.2% 90%
Orihon.UseCases.Agents.Annotation.ReportQaParams 100% 100%
Orihon.UseCases.Agents.Annotation.ReportQaTool 100% 100%
Orihon.UseCases.Agents.Annotation.SetPageMetaParams 100%
Orihon.UseCases.Agents.Annotation.SetPageMetaTool 100% 90%
Orihon.UseCases.Agents.Annotation.SetTranscriptionParams 100%
Orihon.UseCases.Agents.Annotation.SetTranscriptionTool 100% 100%
Orihon.UseCases.Agents.Annotation.TextProblemParams 100%
Orihon.UseCases.Agents.Annotation.TextReportQaParams 100% 100%
Orihon.UseCases.Agents.Annotation.TextReportQaTool 100% 100%
Orihon.UseCases.Agents.Annotation.TranscriptionExecutor 100% 91.6%
Orihon.UseCases.Agents.Annotation.TranscriptionQaExecutor 97% 85%
Orihon.UseCases.Agents.Annotation.VerdictTool`1 97% 90%
Orihon.UseCases.Agents.AssistantSpoke 100%
Orihon.UseCases.Agents.AvoidedWord 100%
Orihon.UseCases.Agents.BibleBuilding.BibleBuildingBlueprint 100%
Orihon.UseCases.Agents.BibleBuilding.BibleBuildingExecutor 96.9% 75%
Orihon.UseCases.Agents.BibleBuilding.GetRegionParams 100%
Orihon.UseCases.Agents.BibleBuilding.GetRegionTool 92% 70%
Orihon.UseCases.Agents.BibleBuilding.ListProjectRegionsTool 96% 87.5%
Orihon.UseCases.Agents.BibleBuilding.ListRegionsParams 100%
Orihon.UseCases.Agents.Cleaning.AcceptEntryParams 100%
Orihon.UseCases.Agents.Cleaning.AcceptParams 100%
Orihon.UseCases.Agents.Cleaning.AcceptTool 100% 100%
Orihon.UseCases.Agents.Cleaning.AddMissedRegionParams 100%
Orihon.UseCases.Agents.Cleaning.AddMissedRegionTool 100% 100%
Orihon.UseCases.Agents.Cleaning.CheckCompareParams 100%
Orihon.UseCases.Agents.Cleaning.CheckCompareTool 100% 90%
Orihon.UseCases.Agents.Cleaning.CheckPageParams 100%
Orihon.UseCases.Agents.Cleaning.CheckViewPageTool 100%
Orihon.UseCases.Agents.Cleaning.CleaningBlueprints 100% 100%
Orihon.UseCases.Agents.Cleaning.CleaningBriefing 100% 98%
Orihon.UseCases.Agents.Cleaning.CleaningClassifyParams 100%
Orihon.UseCases.Agents.Cleaning.CleaningClassifyRegionTool 100% 100%
Orihon.UseCases.Agents.Cleaning.CleaningCropParams 100%
Orihon.UseCases.Agents.Cleaning.CleaningCropTool 100% 100%
Orihon.UseCases.Agents.Cleaning.CleaningExecutor 99% 98.9%
Orihon.UseCases.Agents.Cleaning.CleaningFinish 100% 100%
Orihon.UseCases.Agents.Cleaning.CleaningListRegionsTool 100% 100%
Orihon.UseCases.Agents.Cleaning.CleaningLooksAt 100% 100%
Orihon.UseCases.Agents.Cleaning.CleaningMoveParams 100%
Orihon.UseCases.Agents.Cleaning.CleaningMoveRegionTool 100% 100%
Orihon.UseCases.Agents.Cleaning.CleaningPageParams 100%
Orihon.UseCases.Agents.Cleaning.CleaningRegionParams 100%
Orihon.UseCases.Agents.Cleaning.CleaningStatusTool 100% 96.8%
Orihon.UseCases.Agents.Cleaning.CleaningToolAccess 96.2% 96.1%
Orihon.UseCases.Agents.Cleaning.CleaningWords 100% 100%
Orihon.UseCases.Agents.Cleaning.CleanParams 100%
Orihon.UseCases.Agents.Cleaning.CleanRegionParams 100%
Orihon.UseCases.Agents.Cleaning.CleanTool 98.6% 95.4%
Orihon.UseCases.Agents.Cleaning.EscalateParams 100%
Orihon.UseCases.Agents.Cleaning.EscalateTool 100% 100%
Orihon.UseCases.Agents.Cleaning.FillParams 100%
Orihon.UseCases.Agents.Cleaning.FillTool 100% 100%
Orihon.UseCases.Agents.Cleaning.FinalizeTool 100% 100%
Orihon.UseCases.Agents.Cleaning.FinishPageParams 100%
Orihon.UseCases.Agents.Cleaning.FinishPageTool 100% 100%
Orihon.UseCases.Agents.Cleaning.FinishSurveyTool 100% 100%
Orihon.UseCases.Agents.Cleaning.GroupCompareParams 100%
Orihon.UseCases.Agents.Cleaning.GroupCompareTool 100% 100%
Orihon.UseCases.Agents.Cleaning.GroupMeasureInkParams 100%
Orihon.UseCases.Agents.Cleaning.GroupMeasureInkTool 100%
Orihon.UseCases.Agents.Cleaning.InkReading 100% 100%
Orihon.UseCases.Agents.Cleaning.MeasureInkParams 100%
Orihon.UseCases.Agents.Cleaning.MeasureInkTool 100%
Orihon.UseCases.Agents.Cleaning.ModelWords 100% 100%
Orihon.UseCases.Agents.Cleaning.RecompositeParams 100%
Orihon.UseCases.Agents.Cleaning.RecompositeTool 100% 100%
Orihon.UseCases.Agents.Cleaning.RejectParams 100%
Orihon.UseCases.Agents.Cleaning.RejectTool 100% 100%
Orihon.UseCases.Agents.Cleaning.Rubric 100% 100%
Orihon.UseCases.Agents.Cleaning.SplitRegionParams 100%
Orihon.UseCases.Agents.Cleaning.SplitRegionTool 100% 100%
Orihon.UseCases.Agents.Cleaning.SurveyViewPageTool 100%
Orihon.UseCases.Agents.Cleaning.UndoTool 100% 100%
Orihon.UseCases.Agents.GlossaryTerm 100%
Orihon.UseCases.Agents.Inspection.PageImageAccess 93.2% 82.1%
Orihon.UseCases.Agents.Inspection.ViewAccount 100% 100%
Orihon.UseCases.Agents.Inspection.ViewTexts 100%
Orihon.UseCases.Agents.ReportFrictionParams 100%
Orihon.UseCases.Agents.ReportFrictionTool 100% 92.8%
Orihon.UseCases.Agents.ResearchSetup.AddStoryBeatParams 100%
Orihon.UseCases.Agents.ResearchSetup.AddStoryBeatTool 100% 75%
Orihon.UseCases.Agents.ResearchSetup.AskUserParams 100%
Orihon.UseCases.Agents.ResearchSetup.AskUserTool 100% 100%
Orihon.UseCases.Agents.ResearchSetup.DeleteStoryBeatParams 100%
Orihon.UseCases.Agents.ResearchSetup.DeleteStoryBeatTool 100% 100%
Orihon.UseCases.Agents.ResearchSetup.FetchUrlParams 100%
Orihon.UseCases.Agents.ResearchSetup.FetchUrlTool 100% 100%
Orihon.UseCases.Agents.ResearchSetup.ListBibleTool 90.3% 66.6%
Orihon.UseCases.Agents.ResearchSetup.ListPagesTool 97% 83.3%
Orihon.UseCases.Agents.ResearchSetup.LocatedPage 100%
Orihon.UseCases.Agents.ResearchSetup.PageByNumber 96.5% 93.7%
Orihon.UseCases.Agents.ResearchSetup.ResearchSetupBlueprint 100%
Orihon.UseCases.Agents.ResearchSetup.SetPageMetaParams 100%
Orihon.UseCases.Agents.ResearchSetup.SetPageMetaTool 95.4% 80%
Orihon.UseCases.Agents.ResearchSetup.SetPageSummaryParams 100%
Orihon.UseCases.Agents.ResearchSetup.SetPageSummaryTool 96% 75%
Orihon.UseCases.Agents.ResearchSetup.SetProjectMetadataParams 100%
Orihon.UseCases.Agents.ResearchSetup.SetProjectMetadataTool 96.4% 95.8%
Orihon.UseCases.Agents.ResearchSetup.SetStoryOverviewParams 100%
Orihon.UseCases.Agents.ResearchSetup.SetStoryOverviewTool 100% 100%
Orihon.UseCases.Agents.ResearchSetup.StoryBeatByNumber 100% 100%
Orihon.UseCases.Agents.ResearchSetup.UpdateStoryBeatParams 100%
Orihon.UseCases.Agents.ResearchSetup.UpdateStoryBeatTool 100% 75%
Orihon.UseCases.Agents.ResearchSetup.UpsertCharacterParams 100%
Orihon.UseCases.Agents.ResearchSetup.UpsertCharacterTool 96.1% 78.5%
Orihon.UseCases.Agents.ResearchSetup.UpsertGlossaryParams 100%
Orihon.UseCases.Agents.ResearchSetup.UpsertGlossaryTool 97.6% 95%
Orihon.UseCases.Agents.ResearchSetup.UpsertLoreParams 100%
Orihon.UseCases.Agents.ResearchSetup.UpsertLoreTool 96.1% 78.5%
Orihon.UseCases.Agents.ResearchSetup.ViewPageParams 100%
Orihon.UseCases.Agents.ResearchSetup.ViewPageTool 100% 100%
Orihon.UseCases.Agents.RoundStarted 100%
Orihon.UseCases.Agents.Rulings.AnswerRuling 100%
Orihon.UseCases.Agents.Rulings.DismissRuling 100%
Orihon.UseCases.Agents.Rulings.HouseRuleProposal 100%
Orihon.UseCases.Agents.Rulings.ListPendingRulings 100%
Orihon.UseCases.Agents.Rulings.ListRuleProposals 100%
Orihon.UseCases.Agents.Rulings.PendingRuling 100%
Orihon.UseCases.Agents.Rulings.ProposeHouseRuleParams 100%
Orihon.UseCases.Agents.Rulings.ProposeHouseRuleTool 100% 100%
Orihon.UseCases.Agents.Rulings.RequestRulingParams 100%
Orihon.UseCases.Agents.Rulings.RequestRulingTool 100% 81.2%
Orihon.UseCases.Agents.Rulings.RulingAnswer 100%
Orihon.UseCases.Agents.Rulings.RulingDesk 97.8% 80%
Orihon.UseCases.Agents.Rulings.RulingOption 100%
Orihon.UseCases.Agents.Rulings.RulingOptionParams 100%
Orihon.UseCases.Agents.Rulings.SettledRuling 100%
Orihon.UseCases.Agents.Rulings.WithdrawRuleProposal 100%
Orihon.UseCases.Agents.Setup.ResearchSetupExecutor 98.4% 91.6%
Orihon.UseCases.Agents.Setup.SetupChatEntry 100%
Orihon.UseCases.Agents.Setup.SetupConversation 100% 90.6%
Orihon.UseCases.Agents.Setup.SetupConversationRegistry 100%
Orihon.UseCases.Agents.ToolCalled 100%
Orihon.UseCases.Agents.ToolCompleted 100%
Orihon.UseCases.Agents.TranscriptLabel 100% 100%
Orihon.UseCases.Agents.Translation.GetPageSummaryParams 100%
Orihon.UseCases.Agents.Translation.GetPageSummaryTool 90.4% 66.6%
Orihon.UseCases.Agents.Translation.SetTranslationParams 100%
Orihon.UseCases.Agents.Translation.SetTranslationTool 94.2% 78.5%
Orihon.UseCases.Agents.Translation.TranslationBlueprint 100%
Orihon.UseCases.Agents.Translation.TranslationExecutor 93.8% 71.4%
Orihon.UseCases.Agents.Translation.UpdateGlossaryEnParams 100%
Orihon.UseCases.Agents.Translation.UpdateGlossaryEnTool 95.8% 80%
Orihon.UseCases.Bible.AddCharacter 100% 100%
Orihon.UseCases.Bible.AddGlossaryEntry 100% 100%
Orihon.UseCases.Bible.AddHouseRule 100% 100%
Orihon.UseCases.Bible.AddLoreEntry 100% 100%
Orihon.UseCases.Bible.AddStoryBeat 100% 100%
Orihon.UseCases.Bible.BibleDto 100%
Orihon.UseCases.Bible.CharacterDto 100%
Orihon.UseCases.Bible.DeleteCharacter 100% 100%
Orihon.UseCases.Bible.DeleteGlossaryEntry 100% 100%
Orihon.UseCases.Bible.DeleteHouseRule 100% 100%
Orihon.UseCases.Bible.DeleteLoreEntry 100% 100%
Orihon.UseCases.Bible.DeletePageSummary 100% 100%
Orihon.UseCases.Bible.DeleteStoryBeat 100% 100%
Orihon.UseCases.Bible.GetBible 100% 100%
Orihon.UseCases.Bible.GlossaryEntryDto 100%
Orihon.UseCases.Bible.HouseRuleDto 100%
Orihon.UseCases.Bible.LoreEntryDto 100%
Orihon.UseCases.Bible.PageSummaryDto 100%
Orihon.UseCases.Bible.ReorderStoryBeats 100%
Orihon.UseCases.Bible.SetPageSummary 100% 100%
Orihon.UseCases.Bible.SetStoryOverview 100% 100%
Orihon.UseCases.Bible.StoryBeatDto 100%
Orihon.UseCases.Bible.StoryOverviewDto 100%
Orihon.UseCases.Bible.UpdateCharacter 100% 100%
Orihon.UseCases.Bible.UpdateGlossaryEntry 100% 100%
Orihon.UseCases.Bible.UpdateHouseRule 100% 100%
Orihon.UseCases.Bible.UpdateLoreEntry 100% 100%
Orihon.UseCases.Bible.UpdateStoryBeat 100% 100%
Orihon.UseCases.Chapters.ChapterDto 100%
Orihon.UseCases.Chapters.CreateChapter 100% 100%
Orihon.UseCases.Chapters.DeleteChapter 100% 100%
Orihon.UseCases.Chapters.RenameChapter 100% 100%
Orihon.UseCases.Chapters.ReorderChapters 100%
Orihon.UseCases.Cleaning.AcceptCleaning 100% 98.3%
Orihon.UseCases.Cleaning.AcceptEntry 100%
Orihon.UseCases.Cleaning.AddMissedRegion 100% 100%
Orihon.UseCases.Cleaning.CallFrame 100% 100%
Orihon.UseCases.Cleaning.CallFrames 100% 100%
Orihon.UseCases.Cleaning.CallMember 100%
Orihon.UseCases.Cleaning.CallNote 100%
Orihon.UseCases.Cleaning.CanaryShape 100% 50%
Orihon.UseCases.Cleaning.CandidatePick 100%
Orihon.UseCases.Cleaning.CandidatePickDto 100%
Orihon.UseCases.Cleaning.CandidateReading 100%
Orihon.UseCases.Cleaning.CanvasChoice 100%
Orihon.UseCases.Cleaning.ClassifyCleaningRegion 100% 100%
Orihon.UseCases.Cleaning.CleanAnswer 100%
Orihon.UseCases.Cleaning.CleanAsk 100%
Orihon.UseCases.Cleaning.CleanAsked 100%
Orihon.UseCases.Cleaning.CleanCandidate 100%
Orihon.UseCases.Cleaning.CleanedRegionDto 96.2% 100%
Orihon.UseCases.Cleaning.CleanedResultDto 100%
Orihon.UseCases.Cleaning.CleanedViewDto 100%
Orihon.UseCases.Cleaning.CleanFailed 100%
Orihon.UseCases.Cleaning.CleanHalted 100%
Orihon.UseCases.Cleaning.CleaningAccepted 100%
Orihon.UseCases.Cleaning.CleaningAssessment 100% 100%
Orihon.UseCases.Cleaning.CleaningCacheKey 100% 100%
Orihon.UseCases.Cleaning.CleaningCallDto 100%
Orihon.UseCases.Cleaning.CleaningCallFailed 100%
Orihon.UseCases.Cleaning.CleaningCallFile 100%
Orihon.UseCases.Cleaning.CleaningCallHalted 100%
Orihon.UseCases.Cleaning.CleaningCallRequest 100%
Orihon.UseCases.Cleaning.CleaningCallReturned 100%
Orihon.UseCases.Cleaning.CleaningCallRunner 97.2% 95.2%
Orihon.UseCases.Cleaning.CleaningCanary 100%
Orihon.UseCases.Cleaning.CleaningCandidate 80%
Orihon.UseCases.Cleaning.CleaningCandidateDto 100%
Orihon.UseCases.Cleaning.CleaningCandidates 100% 97%
Orihon.UseCases.Cleaning.CleaningComposites 100% 97.8%
Orihon.UseCases.Cleaning.CleaningCoverage 100% 100%
Orihon.UseCases.Cleaning.CleaningEditDto 77.7%
Orihon.UseCases.Cleaning.CleaningEdits 100% 100%
Orihon.UseCases.Cleaning.CleaningEligibility 100% 100%
Orihon.UseCases.Cleaning.CleaningFailure 100%
Orihon.UseCases.Cleaning.CleaningFailures 100% 97.6%
Orihon.UseCases.Cleaning.CleaningFrames 100% 100%
Orihon.UseCases.Cleaning.CleaningGpuTime 100%
Orihon.UseCases.Cleaning.CleaningGroupBinding 100% 100%
Orihon.UseCases.Cleaning.CleaningHealth 100% 100%
Orihon.UseCases.Cleaning.CleaningIdentity 100% 89.7%
Orihon.UseCases.Cleaning.CleaningInvocation 100% 100%
Orihon.UseCases.Cleaning.CleaningInvocationOptions 100%
Orihon.UseCases.Cleaning.CleaningJudgementDto 100%
Orihon.UseCases.Cleaning.CleaningLabels 100% 100%
Orihon.UseCases.Cleaning.CleaningLooks 100% 100%
Orihon.UseCases.Cleaning.CleaningModelCalls 100% 100%
Orihon.UseCases.Cleaning.CleaningPage 100%
Orihon.UseCases.Cleaning.CleaningPageGuard 100% 100%
Orihon.UseCases.Cleaning.CleaningPageLocks 100% 100%
Orihon.UseCases.Cleaning.CleaningPatchLanding 100% 100%
Orihon.UseCases.Cleaning.CleaningPlan 100%
Orihon.UseCases.Cleaning.CleaningPlanner 100% 100%
Orihon.UseCases.Cleaning.CleaningPlanOptions 100%
Orihon.UseCases.Cleaning.CleaningRecipe 100%
Orihon.UseCases.Cleaning.CleaningRegionEdited 100%
Orihon.UseCases.Cleaning.CleaningRegions 100% 100%
Orihon.UseCases.Cleaning.CleaningRegionUpkeep 100% 97.2%
Orihon.UseCases.Cleaning.CleaningRejected 100%
Orihon.UseCases.Cleaning.CleaningRowNotes 100% 100%
Orihon.UseCases.Cleaning.CleaningRowWords 100%
Orihon.UseCases.Cleaning.CleaningRunnerOptions 100%
Orihon.UseCases.Cleaning.CleaningRunnerStatus 100%
Orihon.UseCases.Cleaning.CleaningSeeds 100% 100%
Orihon.UseCases.Cleaning.CleaningStatusRead 100%
Orihon.UseCases.Cleaning.CleaningTouchUp 100% 100%
Orihon.UseCases.Cleaning.CleaningUndone 100%
Orihon.UseCases.Cleaning.CleaningViewDto 100%
Orihon.UseCases.Cleaning.CleaningViewOptions 100%
Orihon.UseCases.Cleaning.CleaningWork 100% 100%
Orihon.UseCases.Cleaning.CleanMember 100%
Orihon.UseCases.Cleaning.CleanRegions 99.2% 96.8%
Orihon.UseCases.Cleaning.CleanReturned 100%
Orihon.UseCases.Cleaning.CompareAsk 100%
Orihon.UseCases.Cleaning.CompareCleaningView 100% 96.9%
Orihon.UseCases.Cleaning.CompareSourceAsk 100%
Orihon.UseCases.Cleaning.ComposedCandidate 100% 100%
Orihon.UseCases.Cleaning.CompositeWarning 100%
Orihon.UseCases.Cleaning.CompositeWarnings 100% 100%
Orihon.UseCases.Cleaning.ComputedFill 100%
Orihon.UseCases.Cleaning.CropAsk 100%
Orihon.UseCases.Cleaning.CropCleaningView 100% 100%
Orihon.UseCases.Cleaning.EscalateCleaning 100% 100%
Orihon.UseCases.Cleaning.FillRegion 100% 100%
Orihon.UseCases.Cleaning.FillShown 100%
Orihon.UseCases.Cleaning.FinalizeGroup 100% 100%
Orihon.UseCases.Cleaning.FinishPageCheck 100% 100%
Orihon.UseCases.Cleaning.FinishSurvey 100% 100%
Orihon.UseCases.Cleaning.GetCleanedView 99.3% 94.9%
Orihon.UseCases.Cleaning.GetCleaningRunnerStatus 100%
Orihon.UseCases.Cleaning.GetCleaningStatus 100% 100%
Orihon.UseCases.Cleaning.GpuWait 100%
Orihon.UseCases.Cleaning.GroupBinding 100%
Orihon.UseCases.Cleaning.GroupFinalized 100%
Orihon.UseCases.Cleaning.InkHints 100% 100%
Orihon.UseCases.Cleaning.InkMeasured 100%
Orihon.UseCases.Cleaning.JobClock 100% 100%
Orihon.UseCases.Cleaning.JobIdentity 100%
Orihon.UseCases.Cleaning.LabelProblem 100%
Orihon.UseCases.Cleaning.LoadedCandidate 100%
Orihon.UseCases.Cleaning.MagnifiedCanvas 100%
Orihon.UseCases.Cleaning.MeasureCleaningInk 100% 100%
Orihon.UseCases.Cleaning.ModelSource 100%
Orihon.UseCases.Cleaning.MoveCleaningRegion 100% 100%
Orihon.UseCases.Cleaning.OwedRegion 100%
Orihon.UseCases.Cleaning.OweFreshAttempts 100% 100%
Orihon.UseCases.Cleaning.OwnWindowFrame 100%
Orihon.UseCases.Cleaning.PageChecked 100%
Orihon.UseCases.Cleaning.PageLook 100%
Orihon.UseCases.Cleaning.PagePlan 100%
Orihon.UseCases.Cleaning.PageWork 100% 100%
Orihon.UseCases.Cleaning.PickCleaningCandidate 100% 96.9%
Orihon.UseCases.Cleaning.PlanCleaning 100% 100%
Orihon.UseCases.Cleaning.PlannedCall 100%
Orihon.UseCases.Cleaning.PlanSurvey 100% 100%
Orihon.UseCases.Cleaning.PlateRebuilt 100%
Orihon.UseCases.Cleaning.RebuildPlate 100% 100%
Orihon.UseCases.Cleaning.RecompositeAsk 100%
Orihon.UseCases.Cleaning.RecompositeCandidate 100% 97.8%
Orihon.UseCases.Cleaning.Recomposited 100%
Orihon.UseCases.Cleaning.RecordedView 100%
Orihon.UseCases.Cleaning.RecordPageCheck 100% 75%
Orihon.UseCases.Cleaning.RectFrame 100%
Orihon.UseCases.Cleaning.RegionCleaningRead 100%
Orihon.UseCases.Cleaning.RegionFrame 100%
Orihon.UseCases.Cleaning.RegionStanding 100% 100%
Orihon.UseCases.Cleaning.RejectCleaning 100% 97.6%
Orihon.UseCases.Cleaning.RejectEntry 100%
Orihon.UseCases.Cleaning.ReprocessCleaning 100% 100%
Orihon.UseCases.Cleaning.ResumeCleaning 100% 100%
Orihon.UseCases.Cleaning.SplitCleaningRegion 100% 100%
Orihon.UseCases.Cleaning.StartCleaningRun 100% 98%
Orihon.UseCases.Cleaning.SurveyBatch 100%
Orihon.UseCases.Cleaning.SurveyCoverage 100% 100%
Orihon.UseCases.Cleaning.SurveyFinished 100%
Orihon.UseCases.Cleaning.SurveyTarget 100%
Orihon.UseCases.Cleaning.UndoCleaning 100% 94.4%
Orihon.UseCases.Cleaning.UploadNotes 100%
Orihon.UseCases.Cleaning.ViewCleaningPage 100% 100%
Orihon.UseCases.Cleaning.ViewColour 100%
Orihon.UseCases.Debriefs.AgentDebriefDto 90.9%
Orihon.UseCases.Debriefs.AgentFeedbackDto 83.3%
Orihon.UseCases.Debriefs.ClearAgentDebriefs 100%
Orihon.UseCases.Debriefs.ClearAgentFeedback 100%
Orihon.UseCases.Debriefs.ListAgentDebriefs 100% 100%
Orihon.UseCases.Debriefs.ListAgentFeedback 100% 75%
Orihon.UseCases.DependencyInjection 100%
Orihon.UseCases.Diagnostics.FakeCleaningServerAddress 100%
Orihon.UseCases.Diagnostics.SeedCleaning 89.1% 57.3%
Orihon.UseCases.Diagnostics.SeedDevData 99.2% 80.7%
Orihon.UseCases.Gateways.AppliedComposite 100%
Orihon.UseCases.Gateways.BoxFlag 100%
Orihon.UseCases.Gateways.CallComposite 100%
Orihon.UseCases.Gateways.CleaningOverlays 100%
Orihon.UseCases.Gateways.CleaningSource 100%
Orihon.UseCases.Gateways.CleaningView 100% 100%
Orihon.UseCases.Gateways.CleaningViewImage 100%
Orihon.UseCases.Gateways.CleaningViewTile 100%
Orihon.UseCases.Gateways.ClosedBalloon 100%
Orihon.UseCases.Gateways.CompareRequest 100%
Orihon.UseCases.Gateways.CompositeMember 100%
Orihon.UseCases.Gateways.CompositeRequest 100%
Orihon.UseCases.Gateways.CompositeSettings 100%
Orihon.UseCases.Gateways.CropRequest 100%
Orihon.UseCases.Gateways.EditBackendError 100%
Orihon.UseCases.Gateways.EditBackendIdentity 100%
Orihon.UseCases.Gateways.EditJob 100%
Orihon.UseCases.Gateways.EditJobAccepted 100%
Orihon.UseCases.Gateways.EditJobRejected 100%
Orihon.UseCases.Gateways.EditJobRequest 86.6% 66.6%
Orihon.UseCases.Gateways.EditJobRun 100%
Orihon.UseCases.Gateways.EditModels 100%
Orihon.UseCases.Gateways.EditModelWeight 100%
Orihon.UseCases.Gateways.EditOutputImage 100%
Orihon.UseCases.Gateways.EditOutputWithheld 100%
Orihon.UseCases.Gateways.EditRect 100% 100%
Orihon.UseCases.Gateways.EditRunOutput 100%
Orihon.UseCases.Gateways.EditServerAnswered`1 100%
Orihon.UseCases.Gateways.EditServerBuild 100%
Orihon.UseCases.Gateways.EditServerHealth 100%
Orihon.UseCases.Gateways.EditServerSilent`1 100%
Orihon.UseCases.Gateways.FillRefusal 100%
Orihon.UseCases.Gateways.FillReport 100%
Orihon.UseCases.Gateways.GlyphFill 100%
Orihon.UseCases.Gateways.GridAxis 100%
Orihon.UseCases.Gateways.GridSteps 100%
Orihon.UseCases.Gateways.InkFacts 100%
Orihon.UseCases.Gateways.InkHint 100%
Orihon.UseCases.Gateways.InkMeasure 100%
Orihon.UseCases.Gateways.InkReadings 100%
Orihon.UseCases.Gateways.InkRegion 100%
Orihon.UseCases.Gateways.LabeledBox 100%
Orihon.UseCases.Gateways.LevelRange 100%
Orihon.UseCases.Gateways.LlmKeyInfo 100%
Orihon.UseCases.Gateways.LlmModel 100%
Orihon.UseCases.Gateways.LlmReasoning 100% 100%
Orihon.UseCases.Gateways.MeasureBlend 100%
Orihon.UseCases.Gateways.MeasureRaw 100%
Orihon.UseCases.Gateways.MeasureRegion 100%
Orihon.UseCases.Gateways.MeasureRequest 100%
Orihon.UseCases.Gateways.MemberComposite 100%
Orihon.UseCases.Gateways.PagePatch 100%
Orihon.UseCases.Gateways.PageTone 100%
Orihon.UseCases.Gateways.PaperColor 100%
Orihon.UseCases.Gateways.PixelAlpha 100%
Orihon.UseCases.Gateways.PixelDigest 100%
Orihon.UseCases.Gateways.PixelMask 100%
Orihon.UseCases.Gateways.PixelRect 100%
Orihon.UseCases.Gateways.PixelWindow 100%
Orihon.UseCases.Gateways.PlateBuild 100%
Orihon.UseCases.Gateways.RegionGeometry 100%
Orihon.UseCases.Gateways.RegionPlanFacts 100%
Orihon.UseCases.Gateways.RegistrationField 100%
Orihon.UseCases.Gateways.RenderedView 100%
Orihon.UseCases.Gateways.StoredPatch 100%
Orihon.UseCases.Gateways.StoredTranscript 100%
Orihon.UseCases.Gateways.StoredTranscriptPage 100%
Orihon.UseCases.Gateways.ToneFit 100%
Orihon.UseCases.Gateways.TranscriptHeader 97.3% 90.9%
Orihon.UseCases.Gateways.TranscriptListingFacets 100%
Orihon.UseCases.Gateways.TranscriptSummary 100%
Orihon.UseCases.Gateways.WindowUpload 100%
Orihon.UseCases.NextOrder 100%
Orihon.UseCases.Pages.DeletePage 100% 100%
Orihon.UseCases.Pages.DeletePages 100% 100%
Orihon.UseCases.Pages.GetPage 100% 100%
Orihon.UseCases.Pages.GetPageSteps 100% 100%
Orihon.UseCases.Pages.GetProjectWorkspace 100% 100%
Orihon.UseCases.Pages.GetReadingOrder 100% 100%
Orihon.UseCases.Pages.ImportPages 100% 100%
Orihon.UseCases.Pages.ImportPagesResult 100%
Orihon.UseCases.Pages.MarkPageBoxesDone 100% 100%
Orihon.UseCases.Pages.MarkPageTextDone 100% 100%
Orihon.UseCases.Pages.MovePage 100% 93.7%
Orihon.UseCases.Pages.MovePages 100% 100%
Orihon.UseCases.Pages.PageCleaningSummary 100%
Orihon.UseCases.Pages.PageDetailDto 100% 100%
Orihon.UseCases.Pages.PageDto 100%
Orihon.UseCases.Pages.PageStepsDto 100%
Orihon.UseCases.Pages.PageUpload 100%
Orihon.UseCases.Pages.ProjectWorkspaceDto 100%
Orihon.UseCases.Pages.ReorderPages 100%
Orihon.UseCases.Pages.SetPageMeta 100% 100%
Orihon.UseCases.Pages.WorkspaceChapterDto 100%
Orihon.UseCases.Projects.BoxAnswer 100%
Orihon.UseCases.Projects.CompleteProjectSetup 100% 93.7%
Orihon.UseCases.Projects.CreateProject 100% 100%
Orihon.UseCases.Projects.DeleteProject 100% 100%
Orihon.UseCases.Projects.GetProject 100% 100%
Orihon.UseCases.Projects.ListProjects 100%
Orihon.UseCases.Projects.PageMention 100%
Orihon.UseCases.Projects.ProjectDto 96.1%
Orihon.UseCases.Projects.StartBibleRun 92.3% 83.3%
Orihon.UseCases.Projects.StartBoxRun 100% 100%
Orihon.UseCases.Projects.StartSetupRun 100% 100%
Orihon.UseCases.Projects.StartTranscriptionRun 100% 95.4%
Orihon.UseCases.Projects.StartTranslationRun 92.3% 83.3%
Orihon.UseCases.Projects.StoredPageImage 100%
Orihon.UseCases.Projects.TranscribeAnswer 100%
Orihon.UseCases.Projects.UpdateProjectMetadata 100% 100%
Orihon.UseCases.Regions.CreateRegion 100% 100%
Orihon.UseCases.Regions.DeleteRegion 100% 100%
Orihon.UseCases.Regions.MatchSourceToBox 100% 100%
Orihon.UseCases.Regions.RegionDto 100%
Orihon.UseCases.Regions.RegionWrite 100% 100%
Orihon.UseCases.Regions.RegionWriteResult 100%
Orihon.UseCases.Regions.RegionWrites 100% 100%
Orihon.UseCases.Regions.ReorderRegions 100%
Orihon.UseCases.Regions.SplitRegion 97.2% 84.6%
Orihon.UseCases.Regions.UpdateRegion 100% 96.4%
Orihon.UseCases.Runs.AnnotationPipeline 100% 100%
Orihon.UseCases.Runs.AttemptLedger 100% 100%
Orihon.UseCases.Runs.ExecutionDto 93.7%
Orihon.UseCases.Runs.ExecutionProgress 100%
Orihon.UseCases.Runs.ExecutionProgressRegistry 100% 100%
Orihon.UseCases.Runs.ExecutionPulseRelay 100% 100%
Orihon.UseCases.Runs.ExecutionSendBack 100%
Orihon.UseCases.Runs.GetTextReviewNote 100% 100%
Orihon.UseCases.Runs.PlannedExecution 100%
Orihon.UseCases.Runs.PulseTarget 100%
Orihon.UseCases.Runs.ReprocessPage 97.2% 95.8%
Orihon.UseCases.Runs.ReprocessTranscription 100% 100%
Orihon.UseCases.Runs.ReprocessTranslation 88.8% 83.3%
Orihon.UseCases.Runs.RunDto 93.3% 90%
Orihon.UseCases.Runs.RunEngine 97.3% 94.5%
Orihon.UseCases.Runs.RunEngineOptions 100% 100%
Orihon.UseCases.Runs.RunPhase 94.7% 100%
Orihon.UseCases.Runs.RunStart 100%
Orihon.UseCases.Runs.StageContext 100% 100%
Orihon.UseCases.Runs.StageHaltedException 100%
Orihon.UseCases.Runs.WorkStates 100% 83.3%
Orihon.UseCases.Settings.AgentSettingDto 100% 100%
Orihon.UseCases.Settings.CheckCleaningServer 87.5% 60%
Orihon.UseCases.Settings.CleaningInFlightSetting 100% 100%
Orihon.UseCases.Settings.CleaningServerSetting 100% 100%
Orihon.UseCases.Settings.CleaningServerStatusDto 100% 100%
Orihon.UseCases.Settings.ConcurrencySetting 100% 100%
Orihon.UseCases.Settings.EffortSetting 100% 100%
Orihon.UseCases.Settings.GetSettings 100% 100%
Orihon.UseCases.Settings.ListModelOptions 100% 100%
Orihon.UseCases.Settings.RoutingSetting 100% 100%
Orihon.UseCases.Settings.SaveAgentEffort 100% 100%
Orihon.UseCases.Settings.SaveAgentModel 100% 100%
Orihon.UseCases.Settings.SaveAgentRouting 100% 100%
Orihon.UseCases.Settings.SaveCleaningInFlight 100% 100%
Orihon.UseCases.Settings.SaveCleaningServer 95.2% 85.7%
Orihon.UseCases.Settings.SaveOpenRouterKey 100% 100%
Orihon.UseCases.Settings.SaveRunConcurrency 100% 100%
Orihon.UseCases.Settings.SettingKeys 100% 100%
Orihon.UseCases.Settings.SettingsDto 100% 100%
Orihon.UseCases.Transcripts.AgentTranscriptDto 100%
Orihon.UseCases.Transcripts.AgentTranscriptListDto 100%
Orihon.UseCases.Transcripts.AgentTranscriptPageDto 100%
Orihon.UseCases.Transcripts.AgentTranscriptTextDto 100%
Orihon.UseCases.Transcripts.ClearAgentTranscripts 100% 100%
Orihon.UseCases.Transcripts.ListAgentTranscripts 100% 100%
Orihon.UseCases.Transcripts.ReadAgentTranscript 100% 100%
System.Text.RegularExpressions.Generated 75.6% 70.3%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FBF39405179F8AD0
D7D45893AA49E1445928C26437E2DAC34A6F93741B38DCDA0__BalloonWords_7
70.7% 57.8%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FBF39405179F8AD0
D7D45893AA49E1445928C26437E2DAC34A6F93741B38DCDA0__Capital_0
90.1% 77.2%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FBF39405179F8AD0
D7D45893AA49E1445928C26437E2DAC34A6F93741B38DCDA0__CoordinateWords_1
81.8% 81.8%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FBF39405179F8AD0
D7D45893AA49E1445928C26437E2DAC34A6F93741B38DCDA0__JustBefore_4
80.9% 71.1%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FBF39405179F8AD0
D7D45893AA49E1445928C26437E2DAC34A6F93741B38DCDA0__KindWords_5
78.6% 63.7%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FBF39405179F8AD0
D7D45893AA49E1445928C26437E2DAC34A6F93741B38DCDA0__OutlineWords_6
65.1% 53.5%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FBF39405179F8AD0
D7D45893AA49E1445928C26437E2DAC34A6F93741B38DCDA0__PositionalProse_2
71.9% 71.3%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>FBF39405179F8AD0
D7D45893AA49E1445928C26437E2DAC34A6F93741B38DCDA0__SideOfTheBox_3
83% 80.4%
<!-- coverage-comment --> > 🔄 **Auto-updating coverage report** — this comment is regenerated on every push, so the numbers below always reflect the commit shown here, not the branch tip. > > **Commit:** `690eeae` · **Generated:** 2026-10-11 09:08:34 UTC · **Revision:** #2 # Summary <details open><summary>Summary</summary> ||| |:---|:---| | Generated on: | 10/11/2026 - 09:08:34 | | Coverage date: | 10/11/2026 - 09:06:43 - 10/11/2026 - 09:08:30 | | Parser: | MultiReport (4x Cobertura) | | Assemblies: | 6 | | Classes: | 934 | | Files: | 417 | | **Line coverage:** | 97.1% (48695 of 50106) | | Covered lines: | 48695 | | Uncovered lines: | 1411 | | Coverable lines: | 50106 | | Total lines: | 77358 | | **Branch coverage:** | 88.8% (10099 of 11362) | | Covered branches: | 10099 | | Total branches: | 11362 | | **Method coverage:** | [Feature is only available for sponsors](https://reportgenerator.io/pro) | </details> ## Coverage <details><summary>Orihon.BlazorAdapter - 96.6%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Orihon.BlazorAdapter**|**96.6%**|**91.1%**| |Orihon.BlazorAdapter.Bible.AddBeatRowRequested|100%|| |Orihon.BlazorAdapter.Bible.AddCharacterRowRequested|100%|| |Orihon.BlazorAdapter.Bible.AddGlossaryRowRequested|100%|| |Orihon.BlazorAdapter.Bible.AddHouseRuleRowRequested|100%|| |Orihon.BlazorAdapter.Bible.AddLoreRowRequested|100%|| |Orihon.BlazorAdapter.Bible.BibleEffects|89.8%|76.9%| |Orihon.BlazorAdapter.Bible.BibleLoaded|100%|| |Orihon.BlazorAdapter.Bible.BiblePage|92.3%|80.5%| |Orihon.BlazorAdapter.Bible.BibleReducers|90.6%|| |Orihon.BlazorAdapter.Bible.BibleState|100%|| |Orihon.BlazorAdapter.Bible.BibleWriteFailed|100%|| |Orihon.BlazorAdapter.Bible.DeleteBeatRowRequested|100%|| |Orihon.BlazorAdapter.Bible.DeleteCharacterRowRequested|100%|| |Orihon.BlazorAdapter.Bible.DeleteGlossaryRowRequested|100%|| |Orihon.BlazorAdapter.Bible.DeleteHouseRuleRowRequested|0%|| |Orihon.BlazorAdapter.Bible.DeleteLoreRowRequested|0%|| |Orihon.BlazorAdapter.Bible.LoadBible|100%|| |Orihon.BlazorAdapter.Bible.ReorderBeatsRequested|0%|| |Orihon.BlazorAdapter.Bible.SaveOverviewRequested|100%|| |Orihon.BlazorAdapter.Bible.SaveSummaryRequested|100%|| |Orihon.BlazorAdapter.Bible.UpdateBeatRowRequested|100%|| |Orihon.BlazorAdapter.Bible.UpdateCharacterRowRequested|100%|| |Orihon.BlazorAdapter.Bible.UpdateGlossaryRowRequested|100%|| |Orihon.BlazorAdapter.Bible.UpdateHouseRuleRowRequested|100%|| |Orihon.BlazorAdapter.Bible.UpdateLoreRowRequested|100%|| |Orihon.BlazorAdapter.BlazorAdapterAssembly|100%|| |Orihon.BlazorAdapter.PageWorkspace.CleanedDraft|100%|| |Orihon.BlazorAdapter.PageWorkspace.CleanedView|100%|100%| |Orihon.BlazorAdapter.PageWorkspace.CleaningReprocessSent|100%|| |Orihon.BlazorAdapter.PageWorkspace.CreateRegionRequested|100%|| |Orihon.BlazorAdapter.PageWorkspace.DeletePageSummaryRequested|100%|| |Orihon.BlazorAdapter.PageWorkspace.DeleteRegionRequested|100%|| |Orihon.BlazorAdapter.PageWorkspace.LoadPageCleaning|100%|| |Orihon.BlazorAdapter.PageWorkspace.LoadPageWorkspace|100%|| |Orihon.BlazorAdapter.PageWorkspace.MatchSourceToBoxRequested|100%|| |Orihon.BlazorAdapter.PageWorkspace.PageCleaningLoaded|100%|| |Orihon.BlazorAdapter.PageWorkspace.PageStepsLoaded|100%|| |Orihon.BlazorAdapter.PageWorkspace.PageSummarySaved|100%|| |Orihon.BlazorAdapter.PageWorkspace.PageViewport|100%|100%| |Orihon.BlazorAdapter.PageWorkspace.PageWorkspaceEffects|100%|100%| |Orihon.BlazorAdapter.PageWorkspace.PageWorkspaceLoaded|100%|| |Orihon.BlazorAdapter.PageWorkspace.PageWorkspacePage|96.3%|91.3%| |Orihon.BlazorAdapter.PageWorkspace.PageWorkspaceReducers|100%|68.7%| |Orihon.BlazorAdapter.PageWorkspace.PageWorkspaceState|100%|| |Orihon.BlazorAdapter.PageWorkspace.PageWriteFailed|100%|| |Orihon.BlazorAdapter.PageWorkspace.PickCandidateRequested|100%|| |Orihon.BlazorAdapter.PageWorkspace.RegionCreated|100%|| |Orihon.BlazorAdapter.PageWorkspace.RegionSaved|100%|| |Orihon.BlazorAdapter.PageWorkspace.ReorderRegionsRequested|100%|| |Orihon.BlazorAdapter.PageWorkspace.ReprocessCleaningRequested|100%|| |Orihon.BlazorAdapter.PageWorkspace.ReprocessPageRequested|100%|| |Orihon.BlazorAdapter.PageWorkspace.ReprocessTranscriptionRequested|100%|| |Orihon.BlazorAdapter.PageWorkspace.ReprocessTranslationRequested|100%|| |Orihon.BlazorAdapter.PageWorkspace.RunTranscriptionAgainRequested|100%|| |Orihon.BlazorAdapter.PageWorkspace.SavePageSummaryRequested|100%|| |Orihon.BlazorAdapter.PageWorkspace.SaveRegionRequested|100%|| |Orihon.BlazorAdapter.PageWorkspace.SetPageMetaRequested|100%|| |Orihon.BlazorAdapter.PageWorkspace.TextReviewNoteLoaded|100%|| |Orihon.BlazorAdapter.PageWorkspace.TranscriptionSendBackRefused|100%|| |Orihon.BlazorAdapter.Projects.CreateProjectRequested|100%|| |Orihon.BlazorAdapter.Projects.DecideSetupContinuation|100%|| |Orihon.BlazorAdapter.Projects.DeleteProjectRequested|100%|| |Orihon.BlazorAdapter.Projects.FinishSetupRequested|100%|| |Orihon.BlazorAdapter.Projects.ImportPagesRequested|100%|| |Orihon.BlazorAdapter.Projects.LoadWizard|100%|| |Orihon.BlazorAdapter.Projects.PageOrganizer|96%|95%| |Orihon.BlazorAdapter.Projects.PagesImported|100%|| |Orihon.BlazorAdapter.Projects.ProjectDeleteFailed|100%|| |Orihon.BlazorAdapter.Projects.ProjectListEffects|100%|100%| |Orihon.BlazorAdapter.Projects.ProjectListPage|89.7%|91.6%| |Orihon.BlazorAdapter.Projects.ProjectListReducers|100%|| |Orihon.BlazorAdapter.Projects.ProjectListState|100%|| |Orihon.BlazorAdapter.Projects.ProjectsLoaded|100%|| |Orihon.BlazorAdapter.Projects.ProjectWizardEffects|93.8%|90%| |Orihon.BlazorAdapter.Projects.ProjectWizardPage|95.3%|84.1%| |Orihon.BlazorAdapter.Projects.ProjectWizardReducers|100%|| |Orihon.BlazorAdapter.Projects.ProjectWizardState|100%|| |Orihon.BlazorAdapter.Projects.SetupChat|93.5%|100%| |Orihon.BlazorAdapter.Projects.SetupChatEffects|100%|100%| |Orihon.BlazorAdapter.Projects.SetupChatFailed|100%|| |Orihon.BlazorAdapter.Projects.SetupChatReducers|100%|| |Orihon.BlazorAdapter.Projects.SetupChatState|100%|| |Orihon.BlazorAdapter.Projects.SetupChatUpdated|100%|| |Orihon.BlazorAdapter.Projects.StartSetupChat|100%|| |Orihon.BlazorAdapter.Projects.SubmitSetupAnswer|100%|| |Orihon.BlazorAdapter.Projects.WizardDeletePagesRequested|100%|| |Orihon.BlazorAdapter.Projects.WizardLoaded|100%|| |Orihon.BlazorAdapter.Projects.WizardMovePagesRequested|100%|| |Orihon.BlazorAdapter.Projects.WizardMovePagesToNewChapterRequested|100%|| |Orihon.BlazorAdapter.Projects.WizardReorderPagesRequested|100%|| |Orihon.BlazorAdapter.Projects.WizardWriteFailed|100%|| |Orihon.BlazorAdapter.Rulings.AcceptProposalRequested|100%|| |Orihon.BlazorAdapter.Rulings.AnsweredRuling|100%|| |Orihon.BlazorAdapter.Rulings.AnswerRulingRequested|100%|| |Orihon.BlazorAdapter.Rulings.DeclineProposalRequested|100%|| |Orihon.BlazorAdapter.Rulings.DismissRulingRequested|100%|| |Orihon.BlazorAdapter.Rulings.RulingBar|100%|96.4%| |Orihon.BlazorAdapter.Rulings.RulingDeskBridge|94.2%|91.6%| |Orihon.BlazorAdapter.Rulings.RulingsEffects|95.4%|83.3%| |Orihon.BlazorAdapter.Rulings.RulingsLoaded|100%|| |Orihon.BlazorAdapter.Rulings.RulingsReducers|100%|| |Orihon.BlazorAdapter.Rulings.RulingsState|100%|| |Orihon.BlazorAdapter.Rulings.RulingWriteFailed|100%|| |Orihon.BlazorAdapter.Rulings.SaveAnswerAsHouseRuleRequested|100%|| |Orihon.BlazorAdapter.Runs.CancelMonitorRun|100%|| |Orihon.BlazorAdapter.Runs.MonitorPageRef|100%|| |Orihon.BlazorAdapter.Runs.MonitorRunLoaded|100%|| |Orihon.BlazorAdapter.Runs.RetryMonitorExecution|100%|| |Orihon.BlazorAdapter.Runs.RunChangedBridge|95%|92.8%| |Orihon.BlazorAdapter.Runs.RunMonitor|98.2%|94.4%| |Orihon.BlazorAdapter.Runs.RunMonitorEffects|100%|92.8%| |Orihon.BlazorAdapter.Runs.RunMonitorReducers|100%|| |Orihon.BlazorAdapter.Runs.RunMonitorState|100%|| |Orihon.BlazorAdapter.Settings.AgentDebriefsLoaded|100%|| |Orihon.BlazorAdapter.Settings.AgentDebriefsLoadFailed|100%|| |Orihon.BlazorAdapter.Settings.AgentEffortPicked|100%|| |Orihon.BlazorAdapter.Settings.AgentEffortSaved|100%|| |Orihon.BlazorAdapter.Settings.AgentEffortSaveFailed|100%|| |Orihon.BlazorAdapter.Settings.AgentFeedbackLoaded|100%|| |Orihon.BlazorAdapter.Settings.AgentFeedbackLoadFailed|0%|| |Orihon.BlazorAdapter.Settings.AgentModelPicked|100%|| |Orihon.BlazorAdapter.Settings.AgentModelSaved|100%|| |Orihon.BlazorAdapter.Settings.AgentModelSaveFailed|100%|| |Orihon.BlazorAdapter.Settings.AgentRoutingPicked|100%|| |Orihon.BlazorAdapter.Settings.AgentRoutingSaved|100%|| |Orihon.BlazorAdapter.Settings.AgentRoutingSaveFailed|0%|| |Orihon.BlazorAdapter.Settings.AgentTranscriptsLoaded|100%|| |Orihon.BlazorAdapter.Settings.AgentTranscriptsLoadFailed|0%|| |Orihon.BlazorAdapter.Settings.CleaningInFlightPicked|100%|| |Orihon.BlazorAdapter.Settings.CleaningInFlightSaveFailed|100%|| |Orihon.BlazorAdapter.Settings.CleaningResumed|100%|| |Orihon.BlazorAdapter.Settings.CleaningRunnerLoaded|100%|| |Orihon.BlazorAdapter.Settings.CleaningServerChecked|100%|| |Orihon.BlazorAdapter.Settings.CleaningServerSaved|100%|| |Orihon.BlazorAdapter.Settings.CleaningServerSaveFailed|100%|| |Orihon.BlazorAdapter.Settings.EffortOption|100%|100%| |Orihon.BlazorAdapter.Settings.KeySaved|100%|| |Orihon.BlazorAdapter.Settings.KeySaveFailed|100%|| |Orihon.BlazorAdapter.Settings.ModelOptionsLoaded|100%|| |Orihon.BlazorAdapter.Settings.ModelOptionsUnavailable|100%|| |Orihon.BlazorAdapter.Settings.ResumeCleaningFailed|100%|| |Orihon.BlazorAdapter.Settings.RoutingOption|100%|100%| |Orihon.BlazorAdapter.Settings.RunConcurrencyPicked|100%|| |Orihon.BlazorAdapter.Settings.RunConcurrencySaveFailed|100%|| |Orihon.BlazorAdapter.Settings.SaveCleaningServerRequested|100%|| |Orihon.BlazorAdapter.Settings.SaveKeyRequested|100%|| |Orihon.BlazorAdapter.Settings.SettingsEffects|92.3%|83.3%| |Orihon.BlazorAdapter.Settings.SettingsLoaded|100%|| |Orihon.BlazorAdapter.Settings.SettingsPage|97.7%|91.5%| |Orihon.BlazorAdapter.Settings.SettingsReducers|96.1%|64.2%| |Orihon.BlazorAdapter.Settings.SettingsState|100%|| |Orihon.BlazorAdapter.Settings.TranscriptFilterPicked|100%|| |Orihon.BlazorAdapter.Settings.TranscriptPagePicked|100%|| |Orihon.BlazorAdapter.Settings.TranscriptPicked|100%|| |Orihon.BlazorAdapter.Settings.TranscriptTextLoaded|100%|| |Orihon.BlazorAdapter.Settings.TranscriptTextLoadFailed|100%|| |Orihon.BlazorAdapter.Uploads.UploadTransfer|96.5%|100%| |Orihon.BlazorAdapter.Uploads.UploadTransferProgress|100%|100%| |Orihon.BlazorAdapter.Uploads.UploadTransferResult|100%|| |Orihon.BlazorAdapter.Workspace.BoxAnswered|100%|| |Orihon.BlazorAdapter.Workspace.CleanAnswered|100%|| |Orihon.BlazorAdapter.Workspace.CreateChapterRequested|100%|| |Orihon.BlazorAdapter.Workspace.DeleteChapterRequested|100%|| |Orihon.BlazorAdapter.Workspace.DeletePageRequested|100%|| |Orihon.BlazorAdapter.Workspace.DeleteSummaryRequested|100%|| |Orihon.BlazorAdapter.Workspace.LoadProjectWorkspace|100%|| |Orihon.BlazorAdapter.Workspace.MovePageRequested|100%|| |Orihon.BlazorAdapter.Workspace.ProjectMetadataCard|95.6%|92.8%| |Orihon.BlazorAdapter.Workspace.ProjectMetadataSaved|100%|| |Orihon.BlazorAdapter.Workspace.ProjectWorkspaceEffects|100%|100%| |Orihon.BlazorAdapter.Workspace.ProjectWorkspaceLoaded|100%|| |Orihon.BlazorAdapter.Workspace.ProjectWorkspacePage|95.8%|87.7%| |Orihon.BlazorAdapter.Workspace.ProjectWorkspaceReducers|100%|62.5%| |Orihon.BlazorAdapter.Workspace.ProjectWorkspaceState|100%|| |Orihon.BlazorAdapter.Workspace.RenameChapterRequested|100%|| |Orihon.BlazorAdapter.Workspace.ReorderChaptersRequested|100%|| |Orihon.BlazorAdapter.Workspace.ReorderPagesRequested|100%|| |Orihon.BlazorAdapter.Workspace.RunBibleRequested|100%|| |Orihon.BlazorAdapter.Workspace.RunBoxRequested|100%|| |Orihon.BlazorAdapter.Workspace.RunCleanRequested|100%|| |Orihon.BlazorAdapter.Workspace.RunTranscriptionRequested|100%|| |Orihon.BlazorAdapter.Workspace.RunTranslationRequested|100%|| |Orihon.BlazorAdapter.Workspace.SaveProjectMetadataRequested|100%|| |Orihon.BlazorAdapter.Workspace.SaveSummaryRequested|100%|| |Orihon.BlazorAdapter.Workspace.SetPageKindRequested|100%|| |Orihon.BlazorAdapter.Workspace.SummaryDeleted|100%|| |Orihon.BlazorAdapter.Workspace.SummarySaved|100%|| |Orihon.BlazorAdapter.Workspace.TranscribeAnswered|100%|| |Orihon.BlazorAdapter.Workspace.WorkspaceImportRequested|100%|| |Orihon.BlazorAdapter.Workspace.WorkspaceWriteFailed|100%|| </details> <details><summary>Orihon.Domain - 100%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Orihon.Domain**|**100%**|**100%**| |Orihon.Domain.Agents.AgentDebrief|100%|100%| |Orihon.Domain.Agents.AgentDescriptor|100%|100%| |Orihon.Domain.Agents.AgentFeedback|100%|100%| |Orihon.Domain.Agents.AgentRoster|100%|100%| |Orihon.Domain.Agents.InvocationBudget|100%|| |Orihon.Domain.Bible.Character|100%|100%| |Orihon.Domain.Bible.GlossaryEntry|100%|100%| |Orihon.Domain.Bible.HouseRule|100%|| |Orihon.Domain.Bible.LoreEntry|100%|100%| |Orihon.Domain.Bible.PageSummary|100%|| |Orihon.Domain.Bible.StoryBeat|100%|| |Orihon.Domain.Bible.StoryOverview|100%|| |Orihon.Domain.Cleaning.AppliedResult|100%|| |Orihon.Domain.Cleaning.CleaningBasis|100%|| |Orihon.Domain.Cleaning.CleaningCall|100%|100%| |Orihon.Domain.Cleaning.CleaningCallRect|100%|| |Orihon.Domain.Cleaning.CleaningCanvas|100%|| |Orihon.Domain.Cleaning.CleaningClause|100%|| |Orihon.Domain.Cleaning.CleaningEdit|100%|100%| |Orihon.Domain.Cleaning.CleaningJudgement|100%|| |Orihon.Domain.Cleaning.CleaningOutput|100%|100%| |Orihon.Domain.Cleaning.CleaningOverrides|100%|| |Orihon.Domain.Cleaning.CleaningServerIdentity|100%|| |Orihon.Domain.Cleaning.CleaningServerState|100%|100%| |Orihon.Domain.Cleaning.CleaningVerdicts|100%|100%| |Orihon.Domain.Cleaning.CleaningViewRecord|100%|100%| |Orihon.Domain.Cleaning.CleaningWindow|100%|| |Orihon.Domain.Cleaning.EditedRegion|100%|| |Orihon.Domain.Cleaning.PageBox|100%|100%| |Orihon.Domain.Cleaning.PageCleaning|100%|100%| |Orihon.Domain.Cleaning.PlannedCleaningCall|100%|| |Orihon.Domain.Cleaning.RegionCleaning|100%|100%| |Orihon.Domain.Cleaning.RegionShape|100%|| |Orihon.Domain.Cleaning.ResultSource|100%|100%| |Orihon.Domain.Cleaning.ViewTile|100%|| |Orihon.Domain.Projects.Project|100%|100%| |Orihon.Domain.Projects.ProjectProfile|100%|| |Orihon.Domain.Runs.Execution|100%|100%| |Orihon.Domain.Runs.RegionProblem|100%|| |Orihon.Domain.Runs.Run|100%|| |Orihon.Domain.Settings.AppSetting|100%|| |Orihon.Domain.Text|100%|100%| |Orihon.Domain.Translation.BoundingBox|100%|100%| |Orihon.Domain.Translation.Chapter|100%|| |Orihon.Domain.Translation.Page|100%|100%| |Orihon.Domain.Translation.Region|100%|100%| |Orihon.Domain.Translation.RegionProfile|100%|| </details> <details><summary>Orihon.Infrastructure - 98.3%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Orihon.Infrastructure**|**98.3%**|**87.3%**| |Orihon.Infrastructure.Agents.EfAgentDebriefStore|100%|| |Orihon.Infrastructure.Agents.EfAgentFeedbackStore|100%|| |Orihon.Infrastructure.Bible.EfBibleStore|95.2%|92.8%| |Orihon.Infrastructure.Cleaning.EfCleaningCallStore|98.8%|100%| |Orihon.Infrastructure.Cleaning.EfCleaningStateStore|100%|100%| |Orihon.Infrastructure.DependencyInjection|100%|100%| |Orihon.Infrastructure.Gateways.AgentToolAdapter|100%|| |Orihon.Infrastructure.Gateways.AgentToolAdapter`1|100%|100%| |Orihon.Infrastructure.Gateways.AgentTranscript|95.6%|89%| |Orihon.Infrastructure.Gateways.Cleaning.BoxChecks|100%|100%| |Orihon.Infrastructure.Gateways.Cleaning.DerivedInk|100%|| |Orihon.Infrastructure.Gateways.Cleaning.EdgeMetrics|100%|100%| |Orihon.Infrastructure.Gateways.Cleaning.FillResult|100%|| |Orihon.Infrastructure.Gateways.Cleaning.GateStats|100%|| |Orihon.Infrastructure.Gateways.Cleaning.GreyRule|100%|100%| |Orihon.Infrastructure.Gateways.Cleaning.LabComposite|100%|98.2%| |Orihon.Infrastructure.Gateways.Cleaning.LabFill|100%|100%| |Orihon.Infrastructure.Gateways.Cleaning.LabGeometry|100%|100%| |Orihon.Infrastructure.Gateways.Cleaning.LabInk|100%|98.3%| |Orihon.Infrastructure.Gateways.Cleaning.LabMetrics|100%|100%| |Orihon.Infrastructure.Gateways.Cleaning.LabPaper|100%|97.3%| |Orihon.Infrastructure.Gateways.Cleaning.LabReadings|100%|| |Orihon.Infrastructure.Gateways.Cleaning.LabTone|100%|100%| |Orihon.Infrastructure.Gateways.Cleaning.PageRects|100%|| |Orihon.Infrastructure.Gateways.Cleaning.PaperComponent|100%|| |Orihon.Infrastructure.Gateways.Cleaning.PatchPixels|100%|100%| |Orihon.Infrastructure.Gateways.Cleaning.RasterCleaningCompositor|100%|98%| |Orihon.Infrastructure.Gateways.Cleaning.RasterCleaningImages|100%|100%| |Orihon.Infrastructure.Gateways.Cleaning.RasterCleaningMetrics|100%|97.3%| |Orihon.Infrastructure.Gateways.Cleaning.RasterCleaningViews|99.4%|98.3%| |Orihon.Infrastructure.Gateways.Cleaning.RasterInkAnalyzer|100%|100%| |Orihon.Infrastructure.Gateways.Cleaning.RasterPlateComposer|100%|100%| |Orihon.Infrastructure.Gateways.Cleaning.Rgb|100%|| |Orihon.Infrastructure.Gateways.Cleaning.ToneCurve|100%|| |Orihon.Infrastructure.Gateways.Cleaning.ViewTiling|100%|100%| |Orihon.Infrastructure.Gateways.FileSystemAgentTranscriptStore|85.2%|80.8%| |Orihon.Infrastructure.Gateways.HttpWebPageFetcher|95.1%|83.3%| |Orihon.Infrastructure.Gateways.LabelFont|100%|50%| |Orihon.Infrastructure.Gateways.OpenRouterLlmGateway|90.2%|82.1%| |Orihon.Infrastructure.Gateways.QwenImageServerGateway|96.7%|90%| |Orihon.Infrastructure.Gateways.QwenImageServerJson|96%|72.3%| |Orihon.Infrastructure.Gateways.Raster.FloatImage|77.7%|50%| |Orihon.Infrastructure.Gateways.Raster.GrayImage|95.8%|75%| |Orihon.Infrastructure.Gateways.Raster.Labels|100%|100%| |Orihon.Infrastructure.Gateways.Raster.Mask|99.1%|98.5%| |Orihon.Infrastructure.Gateways.Raster.NumpyMath|95.1%|95%| |Orihon.Infrastructure.Gateways.Raster.PillowBlur|98.4%|89.4%| |Orihon.Infrastructure.Gateways.Raster.PillowLanczos|100%|100%| |Orihon.Infrastructure.Gateways.Raster.PixelBox|100%|100%| |Orihon.Infrastructure.Gateways.Raster.RgbImage|96.4%|75%| |Orihon.Infrastructure.Gateways.Raster.ScipyGaussian|100%|100%| |Orihon.Infrastructure.Gateways.SkiaImages|100%|100%| |Orihon.Infrastructure.Gateways.SkiaPageImageRenderer|97.4%|90.8%| |Orihon.Infrastructure.Gateways.SkiaPixelDigest|100%|100%| |Orihon.Infrastructure.Gateways.UntaggedPng|100%|100%| |Orihon.Infrastructure.Persistence.Configurations.AgentDebriefConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.AgentFeedbackConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.AppSettingConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.ChapterConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.CharacterConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.CleaningCallConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.CleaningEditConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.CleaningOutputConfiguratio<br/>n|100%|| |Orihon.Infrastructure.Persistence.Configurations.CleaningServerStateConfigu<br/>ration|100%|| |Orihon.Infrastructure.Persistence.Configurations.CleaningViewConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.ExecutionConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.GlossaryEntryConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.HouseRuleConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.JsonColumnMapper|100%|| |Orihon.Infrastructure.Persistence.Configurations.LoreEntryConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.PageCleaningConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.PageConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.PageSummaryConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.ProjectConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.RegionCleaningConfiguratio<br/>n|100%|| |Orihon.Infrastructure.Persistence.Configurations.RegionConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.RunConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.StoryBeatConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.StoryOverviewConfiguration|100%|| |Orihon.Infrastructure.Persistence.Converters.UtcTicksConverter|100%|| |Orihon.Infrastructure.Persistence.Migrations.AddAgentDebriefs|99.5%|| |Orihon.Infrastructure.Persistence.Migrations.AddAgentFeedback|99.5%|| |Orihon.Infrastructure.Persistence.Migrations.AddAppSettings|99.3%|| |Orihon.Infrastructure.Persistence.Migrations.AddCleaningCallAttempt|99.6%|| |Orihon.Infrastructure.Persistence.Migrations.AddCleaningCallCanvasMode|99.6%|| |Orihon.Infrastructure.Persistence.Migrations.AddCleaningCallRunner|99.3%|| |Orihon.Infrastructure.Persistence.Migrations.AddCleaningStageFacts|99.1%|| |Orihon.Infrastructure.Persistence.Migrations.AddCleaningState|99.1%|| |Orihon.Infrastructure.Persistence.Migrations.AddExecutionFeedbackRegions|99.3%|| |Orihon.Infrastructure.Persistence.Migrations.AddExecutionSentBackBy|99.6%|| |Orihon.Infrastructure.Persistence.Migrations.AddHouseRules|99.6%|| |Orihon.Infrastructure.Persistence.Migrations.AddPagePassFacts|99%|| |Orihon.Infrastructure.Persistence.Migrations.AddProjectSourceLanguage|99.3%|| |Orihon.Infrastructure.Persistence.Migrations.AddRegionFitBoxDropFillHints|98.1%|| |Orihon.Infrastructure.Persistence.Migrations.AddRegionForm|99.4%|| |Orihon.Infrastructure.Persistence.Migrations.AddRegionInk|99.4%|| |Orihon.Infrastructure.Persistence.Migrations.AddRegionSourceBox|99.6%|| |Orihon.Infrastructure.Persistence.Migrations.AddRuns|99.1%|| |Orihon.Infrastructure.Persistence.Migrations.AddStoryOverview|99.5%|| |Orihon.Infrastructure.Persistence.Migrations.AddTextDoneAndReviewNote|99.2%|| |Orihon.Infrastructure.Persistence.Migrations.DropRegionContainer|99.1%|| |Orihon.Infrastructure.Persistence.Migrations.DropRegionInk|99.5%|| |Orihon.Infrastructure.Persistence.Migrations.DropRegionType|99%|| |Orihon.Infrastructure.Persistence.Migrations.DropRegionTypeset|99.4%|| |Orihon.Infrastructure.Persistence.Migrations.InitialTranslationDomain|97.3%|| |Orihon.Infrastructure.Persistence.Migrations.OrihonDbContextModelSnapshot|100%|| |Orihon.Infrastructure.Persistence.Migrations.RenameSourceTargetColumns|97.2%|| |Orihon.Infrastructure.Persistence.Migrations.ReplaceFitBoxWithContainerSeed|99.2%|| |Orihon.Infrastructure.Persistence.Migrations.RetireFloatingPassAndAddBoxesD<br/>one|98.1%|100%| |Orihon.Infrastructure.Persistence.OrihonDbContext|100%|| |Orihon.Infrastructure.Persistence.OrihonDbContextFactory|100%|| |Orihon.Infrastructure.Projects.EfProjectStore|100%|100%| |Orihon.Infrastructure.Projects.FileSystemPageImageStore|100%|100%| |Orihon.Infrastructure.Runs.EfRunStore|100%|100%| |Orihon.Infrastructure.Settings.EfAppSettingsStore|100%|100%| |Orihon.Infrastructure.Translation.EfChapterStore|100%|100%| |Orihon.Infrastructure.Translation.EfPageStore|100%|100%| |Orihon.Infrastructure.Translation.EfRegionStore|100%|100%| |Orihon.Infrastructure.Translation.Ordering|100%|100%| |System.Text.RegularExpressions.Generated|70.6%|53.3%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>F7FCA343D2B99030<br/>A835C427B12E8B84E2A8A7283193FC51C220B5B4E80CE8D56__BlankLines_4|77.9%|76.6%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>F7FCA343D2B99030<br/>A835C427B12E8B84E2A8A7283193FC51C220B5B4E80CE8D56__BlockBreaks_1|59%|42.5%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>F7FCA343D2B99030<br/>A835C427B12E8B84E2A8A7283193FC51C220B5B4E80CE8D56__SpaceRuns_3|89.4%|75%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>F7FCA343D2B99030<br/>A835C427B12E8B84E2A8A7283193FC51C220B5B4E80CE8D56__Tags_2|83.7%|62.5%| </details> <details><summary>Orihon.Kernel - 90.9%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Orihon.Kernel**|**90.9%**|**75%**| |Orihon.Kernel.Err`1|100%|| |Orihon.Kernel.Ok`1|100%|| |Orihon.Kernel.Result`1|88.8%|75%| </details> <details><summary>Orihon.Server - 95.1%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Orihon.Server**|**95.1%**|**79.4%**| |Orihon.Server.CleaningCallRunnerBootstrap|100%|| |Orihon.Server.Components.App|100%|| |Orihon.Server.Components.Layout.MainLayout|100%|| |Orihon.Server.Components.Pages.Gate|64.2%|66.6%| |Orihon.Server.Diagnostics.FakeCleaningServer|94.6%|80.7%| |Orihon.Server.RunEngineBootstrap|100%|| |Orihon.Server.Security.AccessGate|91.8%|41.6%| |Orihon.Server.Security.AccessSecret|100%|50%| |Orihon.Server.VolumeStartupValidator|100%|100%| |Program|96.7%|85.7%| </details> <details><summary>Orihon.UseCases - 94.4%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Orihon.UseCases**|**94.4%**|**88.9%**| |Orihon.UseCases.Agents.AgentAttemptPreparation|100%|| |Orihon.UseCases.Agents.AgentAttemptSupport|98.6%|98.8%| |Orihon.UseCases.Agents.AgentBlueprint|100%|| |Orihon.UseCases.Agents.AgentCapDebrief|100%|| |Orihon.UseCases.Agents.AgentGlossary|100%|| |Orihon.UseCases.Agents.AgentInvocation|100%|| |Orihon.UseCases.Agents.AgentOutcome|100%|| |Orihon.UseCases.Agents.AgentTexts|100%|100%| |Orihon.UseCases.Agents.AgentTool`1|90.9%|75%| |Orihon.UseCases.Agents.AgentToolImage|100%|| |Orihon.UseCases.Agents.AgentToolResult|100%|| |Orihon.UseCases.Agents.Annotation.AddRegionParams|100%|| |Orihon.UseCases.Agents.Annotation.AddRegionTool|100%|100%| |Orihon.UseCases.Agents.Annotation.AnnotationBlueprints|100%|| |Orihon.UseCases.Agents.Annotation.AnnotationStage|100%|87.5%| |Orihon.UseCases.Agents.Annotation.BoundBoxParams|100%|| |Orihon.UseCases.Agents.Annotation.BoundContactSheetTool|91.3%|75%| |Orihon.UseCases.Agents.Annotation.BoundCropParams|100%|| |Orihon.UseCases.Agents.Annotation.BoundCropTool|100%|| |Orihon.UseCases.Agents.Annotation.BoundDeleteParams|100%|| |Orihon.UseCases.Agents.Annotation.BoundViewPageTool|92%|80%| |Orihon.UseCases.Agents.Annotation.BoundViewParams|100%|| |Orihon.UseCases.Agents.Annotation.BoxCreationExecutor|100%|75%| |Orihon.UseCases.Agents.Annotation.BoxQaExecutor|93.1%|83.3%| |Orihon.UseCases.Agents.Annotation.BoxRefinementExecutor|96.7%|91.6%| |Orihon.UseCases.Agents.Annotation.ClassifyRegionParams|100%|| |Orihon.UseCases.Agents.Annotation.ClassifyRegionTool|100%|100%| |Orihon.UseCases.Agents.Annotation.DeleteBoundRegionTool|100%|100%| |Orihon.UseCases.Agents.Annotation.DeleteRegionParams|100%|| |Orihon.UseCases.Agents.Annotation.DeleteRegionTool|100%|100%| |Orihon.UseCases.Agents.Annotation.FindGlossaryParams|100%|| |Orihon.UseCases.Agents.Annotation.FindGlossaryTool|94.4%|75%| |Orihon.UseCases.Agents.Annotation.ListRegionsTool|92.5%|86.3%| |Orihon.UseCases.Agents.Annotation.MoveResizeBoundTool|100%|100%| |Orihon.UseCases.Agents.Annotation.MoveResizeRegionParams|100%|| |Orihon.UseCases.Agents.Annotation.MoveResizeRegionTool|95.6%|75%| |Orihon.UseCases.Agents.Annotation.NoteRegionParams|100%|| |Orihon.UseCases.Agents.Annotation.NoteRegionTool|100%|100%| |Orihon.UseCases.Agents.Annotation.QaReportSink|100%|100%| |Orihon.UseCases.Agents.Annotation.RegionAuthoringAccess|91.1%|84.6%| |Orihon.UseCases.Agents.Annotation.RegionBriefing|100%|100%| |Orihon.UseCases.Agents.Annotation.RegionCropParams|100%|| |Orihon.UseCases.Agents.Annotation.RegionCropTool|100%|100%| |Orihon.UseCases.Agents.Annotation.RegionForms|100%|100%| |Orihon.UseCases.Agents.Annotation.RegionProblemParams|100%|| |Orihon.UseCases.Agents.Annotation.RegionWindow|100%|100%| |Orihon.UseCases.Agents.Annotation.RejectRegionParams|100%|| |Orihon.UseCases.Agents.Annotation.RejectRegionTool|100%|100%| |Orihon.UseCases.Agents.Annotation.ReorderRegionParams|100%|| |Orihon.UseCases.Agents.Annotation.ReorderRegionTool|96.2%|90%| |Orihon.UseCases.Agents.Annotation.ReportQaParams|100%|100%| |Orihon.UseCases.Agents.Annotation.ReportQaTool|100%|100%| |Orihon.UseCases.Agents.Annotation.SetPageMetaParams|100%|| |Orihon.UseCases.Agents.Annotation.SetPageMetaTool|100%|90%| |Orihon.UseCases.Agents.Annotation.SetTranscriptionParams|100%|| |Orihon.UseCases.Agents.Annotation.SetTranscriptionTool|100%|100%| |Orihon.UseCases.Agents.Annotation.TextProblemParams|100%|| |Orihon.UseCases.Agents.Annotation.TextReportQaParams|100%|100%| |Orihon.UseCases.Agents.Annotation.TextReportQaTool|100%|100%| |Orihon.UseCases.Agents.Annotation.TranscriptionExecutor|100%|91.6%| |Orihon.UseCases.Agents.Annotation.TranscriptionQaExecutor|97%|85%| |Orihon.UseCases.Agents.Annotation.VerdictTool`1|97%|90%| |Orihon.UseCases.Agents.AssistantSpoke|100%|| |Orihon.UseCases.Agents.AvoidedWord|100%|| |Orihon.UseCases.Agents.BibleBuilding.BibleBuildingBlueprint|100%|| |Orihon.UseCases.Agents.BibleBuilding.BibleBuildingExecutor|96.9%|75%| |Orihon.UseCases.Agents.BibleBuilding.GetRegionParams|100%|| |Orihon.UseCases.Agents.BibleBuilding.GetRegionTool|92%|70%| |Orihon.UseCases.Agents.BibleBuilding.ListProjectRegionsTool|96%|87.5%| |Orihon.UseCases.Agents.BibleBuilding.ListRegionsParams|100%|| |Orihon.UseCases.Agents.Cleaning.AcceptEntryParams|100%|| |Orihon.UseCases.Agents.Cleaning.AcceptParams|100%|| |Orihon.UseCases.Agents.Cleaning.AcceptTool|100%|100%| |Orihon.UseCases.Agents.Cleaning.AddMissedRegionParams|100%|| |Orihon.UseCases.Agents.Cleaning.AddMissedRegionTool|100%|100%| |Orihon.UseCases.Agents.Cleaning.CheckCompareParams|100%|| |Orihon.UseCases.Agents.Cleaning.CheckCompareTool|100%|90%| |Orihon.UseCases.Agents.Cleaning.CheckPageParams|100%|| |Orihon.UseCases.Agents.Cleaning.CheckViewPageTool|100%|| |Orihon.UseCases.Agents.Cleaning.CleaningBlueprints|100%|100%| |Orihon.UseCases.Agents.Cleaning.CleaningBriefing|100%|98%| |Orihon.UseCases.Agents.Cleaning.CleaningClassifyParams|100%|| |Orihon.UseCases.Agents.Cleaning.CleaningClassifyRegionTool|100%|100%| |Orihon.UseCases.Agents.Cleaning.CleaningCropParams|100%|| |Orihon.UseCases.Agents.Cleaning.CleaningCropTool|100%|100%| |Orihon.UseCases.Agents.Cleaning.CleaningExecutor|99%|98.9%| |Orihon.UseCases.Agents.Cleaning.CleaningFinish|100%|100%| |Orihon.UseCases.Agents.Cleaning.CleaningListRegionsTool|100%|100%| |Orihon.UseCases.Agents.Cleaning.CleaningLooksAt|100%|100%| |Orihon.UseCases.Agents.Cleaning.CleaningMoveParams|100%|| |Orihon.UseCases.Agents.Cleaning.CleaningMoveRegionTool|100%|100%| |Orihon.UseCases.Agents.Cleaning.CleaningPageParams|100%|| |Orihon.UseCases.Agents.Cleaning.CleaningRegionParams|100%|| |Orihon.UseCases.Agents.Cleaning.CleaningStatusTool|100%|96.8%| |Orihon.UseCases.Agents.Cleaning.CleaningToolAccess|96.2%|96.1%| |Orihon.UseCases.Agents.Cleaning.CleaningWords|100%|100%| |Orihon.UseCases.Agents.Cleaning.CleanParams|100%|| |Orihon.UseCases.Agents.Cleaning.CleanRegionParams|100%|| |Orihon.UseCases.Agents.Cleaning.CleanTool|98.6%|95.4%| |Orihon.UseCases.Agents.Cleaning.EscalateParams|100%|| |Orihon.UseCases.Agents.Cleaning.EscalateTool|100%|100%| |Orihon.UseCases.Agents.Cleaning.FillParams|100%|| |Orihon.UseCases.Agents.Cleaning.FillTool|100%|100%| |Orihon.UseCases.Agents.Cleaning.FinalizeTool|100%|100%| |Orihon.UseCases.Agents.Cleaning.FinishPageParams|100%|| |Orihon.UseCases.Agents.Cleaning.FinishPageTool|100%|100%| |Orihon.UseCases.Agents.Cleaning.FinishSurveyTool|100%|100%| |Orihon.UseCases.Agents.Cleaning.GroupCompareParams|100%|| |Orihon.UseCases.Agents.Cleaning.GroupCompareTool|100%|100%| |Orihon.UseCases.Agents.Cleaning.GroupMeasureInkParams|100%|| |Orihon.UseCases.Agents.Cleaning.GroupMeasureInkTool|100%|| |Orihon.UseCases.Agents.Cleaning.InkReading|100%|100%| |Orihon.UseCases.Agents.Cleaning.MeasureInkParams|100%|| |Orihon.UseCases.Agents.Cleaning.MeasureInkTool|100%|| |Orihon.UseCases.Agents.Cleaning.ModelWords|100%|100%| |Orihon.UseCases.Agents.Cleaning.RecompositeParams|100%|| |Orihon.UseCases.Agents.Cleaning.RecompositeTool|100%|100%| |Orihon.UseCases.Agents.Cleaning.RejectParams|100%|| |Orihon.UseCases.Agents.Cleaning.RejectTool|100%|100%| |Orihon.UseCases.Agents.Cleaning.Rubric|100%|100%| |Orihon.UseCases.Agents.Cleaning.SplitRegionParams|100%|| |Orihon.UseCases.Agents.Cleaning.SplitRegionTool|100%|100%| |Orihon.UseCases.Agents.Cleaning.SurveyViewPageTool|100%|| |Orihon.UseCases.Agents.Cleaning.UndoTool|100%|100%| |Orihon.UseCases.Agents.GlossaryTerm|100%|| |Orihon.UseCases.Agents.Inspection.PageImageAccess|93.2%|82.1%| |Orihon.UseCases.Agents.Inspection.ViewAccount|100%|100%| |Orihon.UseCases.Agents.Inspection.ViewTexts|100%|| |Orihon.UseCases.Agents.ReportFrictionParams|100%|| |Orihon.UseCases.Agents.ReportFrictionTool|100%|92.8%| |Orihon.UseCases.Agents.ResearchSetup.AddStoryBeatParams|100%|| |Orihon.UseCases.Agents.ResearchSetup.AddStoryBeatTool|100%|75%| |Orihon.UseCases.Agents.ResearchSetup.AskUserParams|100%|| |Orihon.UseCases.Agents.ResearchSetup.AskUserTool|100%|100%| |Orihon.UseCases.Agents.ResearchSetup.DeleteStoryBeatParams|100%|| |Orihon.UseCases.Agents.ResearchSetup.DeleteStoryBeatTool|100%|100%| |Orihon.UseCases.Agents.ResearchSetup.FetchUrlParams|100%|| |Orihon.UseCases.Agents.ResearchSetup.FetchUrlTool|100%|100%| |Orihon.UseCases.Agents.ResearchSetup.ListBibleTool|90.3%|66.6%| |Orihon.UseCases.Agents.ResearchSetup.ListPagesTool|97%|83.3%| |Orihon.UseCases.Agents.ResearchSetup.LocatedPage|100%|| |Orihon.UseCases.Agents.ResearchSetup.PageByNumber|96.5%|93.7%| |Orihon.UseCases.Agents.ResearchSetup.ResearchSetupBlueprint|100%|| |Orihon.UseCases.Agents.ResearchSetup.SetPageMetaParams|100%|| |Orihon.UseCases.Agents.ResearchSetup.SetPageMetaTool|95.4%|80%| |Orihon.UseCases.Agents.ResearchSetup.SetPageSummaryParams|100%|| |Orihon.UseCases.Agents.ResearchSetup.SetPageSummaryTool|96%|75%| |Orihon.UseCases.Agents.ResearchSetup.SetProjectMetadataParams|100%|| |Orihon.UseCases.Agents.ResearchSetup.SetProjectMetadataTool|96.4%|95.8%| |Orihon.UseCases.Agents.ResearchSetup.SetStoryOverviewParams|100%|| |Orihon.UseCases.Agents.ResearchSetup.SetStoryOverviewTool|100%|100%| |Orihon.UseCases.Agents.ResearchSetup.StoryBeatByNumber|100%|100%| |Orihon.UseCases.Agents.ResearchSetup.UpdateStoryBeatParams|100%|| |Orihon.UseCases.Agents.ResearchSetup.UpdateStoryBeatTool|100%|75%| |Orihon.UseCases.Agents.ResearchSetup.UpsertCharacterParams|100%|| |Orihon.UseCases.Agents.ResearchSetup.UpsertCharacterTool|96.1%|78.5%| |Orihon.UseCases.Agents.ResearchSetup.UpsertGlossaryParams|100%|| |Orihon.UseCases.Agents.ResearchSetup.UpsertGlossaryTool|97.6%|95%| |Orihon.UseCases.Agents.ResearchSetup.UpsertLoreParams|100%|| |Orihon.UseCases.Agents.ResearchSetup.UpsertLoreTool|96.1%|78.5%| |Orihon.UseCases.Agents.ResearchSetup.ViewPageParams|100%|| |Orihon.UseCases.Agents.ResearchSetup.ViewPageTool|100%|100%| |Orihon.UseCases.Agents.RoundStarted|100%|| |Orihon.UseCases.Agents.Rulings.AnswerRuling|100%|| |Orihon.UseCases.Agents.Rulings.DismissRuling|100%|| |Orihon.UseCases.Agents.Rulings.HouseRuleProposal|100%|| |Orihon.UseCases.Agents.Rulings.ListPendingRulings|100%|| |Orihon.UseCases.Agents.Rulings.ListRuleProposals|100%|| |Orihon.UseCases.Agents.Rulings.PendingRuling|100%|| |Orihon.UseCases.Agents.Rulings.ProposeHouseRuleParams|100%|| |Orihon.UseCases.Agents.Rulings.ProposeHouseRuleTool|100%|100%| |Orihon.UseCases.Agents.Rulings.RequestRulingParams|100%|| |Orihon.UseCases.Agents.Rulings.RequestRulingTool|100%|81.2%| |Orihon.UseCases.Agents.Rulings.RulingAnswer|100%|| |Orihon.UseCases.Agents.Rulings.RulingDesk|97.8%|80%| |Orihon.UseCases.Agents.Rulings.RulingOption|100%|| |Orihon.UseCases.Agents.Rulings.RulingOptionParams|100%|| |Orihon.UseCases.Agents.Rulings.SettledRuling|100%|| |Orihon.UseCases.Agents.Rulings.WithdrawRuleProposal|100%|| |Orihon.UseCases.Agents.Setup.ResearchSetupExecutor|98.4%|91.6%| |Orihon.UseCases.Agents.Setup.SetupChatEntry|100%|| |Orihon.UseCases.Agents.Setup.SetupConversation|100%|90.6%| |Orihon.UseCases.Agents.Setup.SetupConversationRegistry|100%|| |Orihon.UseCases.Agents.ToolCalled|100%|| |Orihon.UseCases.Agents.ToolCompleted|100%|| |Orihon.UseCases.Agents.TranscriptLabel|100%|100%| |Orihon.UseCases.Agents.Translation.GetPageSummaryParams|100%|| |Orihon.UseCases.Agents.Translation.GetPageSummaryTool|90.4%|66.6%| |Orihon.UseCases.Agents.Translation.SetTranslationParams|100%|| |Orihon.UseCases.Agents.Translation.SetTranslationTool|94.2%|78.5%| |Orihon.UseCases.Agents.Translation.TranslationBlueprint|100%|| |Orihon.UseCases.Agents.Translation.TranslationExecutor|93.8%|71.4%| |Orihon.UseCases.Agents.Translation.UpdateGlossaryEnParams|100%|| |Orihon.UseCases.Agents.Translation.UpdateGlossaryEnTool|95.8%|80%| |Orihon.UseCases.Bible.AddCharacter|100%|100%| |Orihon.UseCases.Bible.AddGlossaryEntry|100%|100%| |Orihon.UseCases.Bible.AddHouseRule|100%|100%| |Orihon.UseCases.Bible.AddLoreEntry|100%|100%| |Orihon.UseCases.Bible.AddStoryBeat|100%|100%| |Orihon.UseCases.Bible.BibleDto|100%|| |Orihon.UseCases.Bible.CharacterDto|100%|| |Orihon.UseCases.Bible.DeleteCharacter|100%|100%| |Orihon.UseCases.Bible.DeleteGlossaryEntry|100%|100%| |Orihon.UseCases.Bible.DeleteHouseRule|100%|100%| |Orihon.UseCases.Bible.DeleteLoreEntry|100%|100%| |Orihon.UseCases.Bible.DeletePageSummary|100%|100%| |Orihon.UseCases.Bible.DeleteStoryBeat|100%|100%| |Orihon.UseCases.Bible.GetBible|100%|100%| |Orihon.UseCases.Bible.GlossaryEntryDto|100%|| |Orihon.UseCases.Bible.HouseRuleDto|100%|| |Orihon.UseCases.Bible.LoreEntryDto|100%|| |Orihon.UseCases.Bible.PageSummaryDto|100%|| |Orihon.UseCases.Bible.ReorderStoryBeats|100%|| |Orihon.UseCases.Bible.SetPageSummary|100%|100%| |Orihon.UseCases.Bible.SetStoryOverview|100%|100%| |Orihon.UseCases.Bible.StoryBeatDto|100%|| |Orihon.UseCases.Bible.StoryOverviewDto|100%|| |Orihon.UseCases.Bible.UpdateCharacter|100%|100%| |Orihon.UseCases.Bible.UpdateGlossaryEntry|100%|100%| |Orihon.UseCases.Bible.UpdateHouseRule|100%|100%| |Orihon.UseCases.Bible.UpdateLoreEntry|100%|100%| |Orihon.UseCases.Bible.UpdateStoryBeat|100%|100%| |Orihon.UseCases.Chapters.ChapterDto|100%|| |Orihon.UseCases.Chapters.CreateChapter|100%|100%| |Orihon.UseCases.Chapters.DeleteChapter|100%|100%| |Orihon.UseCases.Chapters.RenameChapter|100%|100%| |Orihon.UseCases.Chapters.ReorderChapters|100%|| |Orihon.UseCases.Cleaning.AcceptCleaning|100%|98.3%| |Orihon.UseCases.Cleaning.AcceptEntry|100%|| |Orihon.UseCases.Cleaning.AddMissedRegion|100%|100%| |Orihon.UseCases.Cleaning.CallFrame|100%|100%| |Orihon.UseCases.Cleaning.CallFrames|100%|100%| |Orihon.UseCases.Cleaning.CallMember|100%|| |Orihon.UseCases.Cleaning.CallNote|100%|| |Orihon.UseCases.Cleaning.CanaryShape|100%|50%| |Orihon.UseCases.Cleaning.CandidatePick|100%|| |Orihon.UseCases.Cleaning.CandidatePickDto|100%|| |Orihon.UseCases.Cleaning.CandidateReading|100%|| |Orihon.UseCases.Cleaning.CanvasChoice|100%|| |Orihon.UseCases.Cleaning.ClassifyCleaningRegion|100%|100%| |Orihon.UseCases.Cleaning.CleanAnswer|100%|| |Orihon.UseCases.Cleaning.CleanAsk|100%|| |Orihon.UseCases.Cleaning.CleanAsked|100%|| |Orihon.UseCases.Cleaning.CleanCandidate|100%|| |Orihon.UseCases.Cleaning.CleanedRegionDto|96.2%|100%| |Orihon.UseCases.Cleaning.CleanedResultDto|100%|| |Orihon.UseCases.Cleaning.CleanedViewDto|100%|| |Orihon.UseCases.Cleaning.CleanFailed|100%|| |Orihon.UseCases.Cleaning.CleanHalted|100%|| |Orihon.UseCases.Cleaning.CleaningAccepted|100%|| |Orihon.UseCases.Cleaning.CleaningAssessment|100%|100%| |Orihon.UseCases.Cleaning.CleaningCacheKey|100%|100%| |Orihon.UseCases.Cleaning.CleaningCallDto|100%|| |Orihon.UseCases.Cleaning.CleaningCallFailed|100%|| |Orihon.UseCases.Cleaning.CleaningCallFile|100%|| |Orihon.UseCases.Cleaning.CleaningCallHalted|100%|| |Orihon.UseCases.Cleaning.CleaningCallRequest|100%|| |Orihon.UseCases.Cleaning.CleaningCallReturned|100%|| |Orihon.UseCases.Cleaning.CleaningCallRunner|97.2%|95.2%| |Orihon.UseCases.Cleaning.CleaningCanary|100%|| |Orihon.UseCases.Cleaning.CleaningCandidate|80%|| |Orihon.UseCases.Cleaning.CleaningCandidateDto|100%|| |Orihon.UseCases.Cleaning.CleaningCandidates|100%|97%| |Orihon.UseCases.Cleaning.CleaningComposites|100%|97.8%| |Orihon.UseCases.Cleaning.CleaningCoverage|100%|100%| |Orihon.UseCases.Cleaning.CleaningEditDto|77.7%|| |Orihon.UseCases.Cleaning.CleaningEdits|100%|100%| |Orihon.UseCases.Cleaning.CleaningEligibility|100%|100%| |Orihon.UseCases.Cleaning.CleaningFailure|100%|| |Orihon.UseCases.Cleaning.CleaningFailures|100%|97.6%| |Orihon.UseCases.Cleaning.CleaningFrames|100%|100%| |Orihon.UseCases.Cleaning.CleaningGpuTime|100%|| |Orihon.UseCases.Cleaning.CleaningGroupBinding|100%|100%| |Orihon.UseCases.Cleaning.CleaningHealth|100%|100%| |Orihon.UseCases.Cleaning.CleaningIdentity|100%|89.7%| |Orihon.UseCases.Cleaning.CleaningInvocation|100%|100%| |Orihon.UseCases.Cleaning.CleaningInvocationOptions|100%|| |Orihon.UseCases.Cleaning.CleaningJudgementDto|100%|| |Orihon.UseCases.Cleaning.CleaningLabels|100%|100%| |Orihon.UseCases.Cleaning.CleaningLooks|100%|100%| |Orihon.UseCases.Cleaning.CleaningModelCalls|100%|100%| |Orihon.UseCases.Cleaning.CleaningPage|100%|| |Orihon.UseCases.Cleaning.CleaningPageGuard|100%|100%| |Orihon.UseCases.Cleaning.CleaningPageLocks|100%|100%| |Orihon.UseCases.Cleaning.CleaningPatchLanding|100%|100%| |Orihon.UseCases.Cleaning.CleaningPlan|100%|| |Orihon.UseCases.Cleaning.CleaningPlanner|100%|100%| |Orihon.UseCases.Cleaning.CleaningPlanOptions|100%|| |Orihon.UseCases.Cleaning.CleaningRecipe|100%|| |Orihon.UseCases.Cleaning.CleaningRegionEdited|100%|| |Orihon.UseCases.Cleaning.CleaningRegions|100%|100%| |Orihon.UseCases.Cleaning.CleaningRegionUpkeep|100%|97.2%| |Orihon.UseCases.Cleaning.CleaningRejected|100%|| |Orihon.UseCases.Cleaning.CleaningRowNotes|100%|100%| |Orihon.UseCases.Cleaning.CleaningRowWords|100%|| |Orihon.UseCases.Cleaning.CleaningRunnerOptions|100%|| |Orihon.UseCases.Cleaning.CleaningRunnerStatus|100%|| |Orihon.UseCases.Cleaning.CleaningSeeds|100%|100%| |Orihon.UseCases.Cleaning.CleaningStatusRead|100%|| |Orihon.UseCases.Cleaning.CleaningTouchUp|100%|100%| |Orihon.UseCases.Cleaning.CleaningUndone|100%|| |Orihon.UseCases.Cleaning.CleaningViewDto|100%|| |Orihon.UseCases.Cleaning.CleaningViewOptions|100%|| |Orihon.UseCases.Cleaning.CleaningWork|100%|100%| |Orihon.UseCases.Cleaning.CleanMember|100%|| |Orihon.UseCases.Cleaning.CleanRegions|99.2%|96.8%| |Orihon.UseCases.Cleaning.CleanReturned|100%|| |Orihon.UseCases.Cleaning.CompareAsk|100%|| |Orihon.UseCases.Cleaning.CompareCleaningView|100%|96.9%| |Orihon.UseCases.Cleaning.CompareSourceAsk|100%|| |Orihon.UseCases.Cleaning.ComposedCandidate|100%|100%| |Orihon.UseCases.Cleaning.CompositeWarning|100%|| |Orihon.UseCases.Cleaning.CompositeWarnings|100%|100%| |Orihon.UseCases.Cleaning.ComputedFill|100%|| |Orihon.UseCases.Cleaning.CropAsk|100%|| |Orihon.UseCases.Cleaning.CropCleaningView|100%|100%| |Orihon.UseCases.Cleaning.EscalateCleaning|100%|100%| |Orihon.UseCases.Cleaning.FillRegion|100%|100%| |Orihon.UseCases.Cleaning.FillShown|100%|| |Orihon.UseCases.Cleaning.FinalizeGroup|100%|100%| |Orihon.UseCases.Cleaning.FinishPageCheck|100%|100%| |Orihon.UseCases.Cleaning.FinishSurvey|100%|100%| |Orihon.UseCases.Cleaning.GetCleanedView|99.3%|94.9%| |Orihon.UseCases.Cleaning.GetCleaningRunnerStatus|100%|| |Orihon.UseCases.Cleaning.GetCleaningStatus|100%|100%| |Orihon.UseCases.Cleaning.GpuWait|100%|| |Orihon.UseCases.Cleaning.GroupBinding|100%|| |Orihon.UseCases.Cleaning.GroupFinalized|100%|| |Orihon.UseCases.Cleaning.InkHints|100%|100%| |Orihon.UseCases.Cleaning.InkMeasured|100%|| |Orihon.UseCases.Cleaning.JobClock|100%|100%| |Orihon.UseCases.Cleaning.JobIdentity|100%|| |Orihon.UseCases.Cleaning.LabelProblem|100%|| |Orihon.UseCases.Cleaning.LoadedCandidate|100%|| |Orihon.UseCases.Cleaning.MagnifiedCanvas|100%|| |Orihon.UseCases.Cleaning.MeasureCleaningInk|100%|100%| |Orihon.UseCases.Cleaning.ModelSource|100%|| |Orihon.UseCases.Cleaning.MoveCleaningRegion|100%|100%| |Orihon.UseCases.Cleaning.OwedRegion|100%|| |Orihon.UseCases.Cleaning.OweFreshAttempts|100%|100%| |Orihon.UseCases.Cleaning.OwnWindowFrame|100%|| |Orihon.UseCases.Cleaning.PageChecked|100%|| |Orihon.UseCases.Cleaning.PageLook|100%|| |Orihon.UseCases.Cleaning.PagePlan|100%|| |Orihon.UseCases.Cleaning.PageWork|100%|100%| |Orihon.UseCases.Cleaning.PickCleaningCandidate|100%|96.9%| |Orihon.UseCases.Cleaning.PlanCleaning|100%|100%| |Orihon.UseCases.Cleaning.PlannedCall|100%|| |Orihon.UseCases.Cleaning.PlanSurvey|100%|100%| |Orihon.UseCases.Cleaning.PlateRebuilt|100%|| |Orihon.UseCases.Cleaning.RebuildPlate|100%|100%| |Orihon.UseCases.Cleaning.RecompositeAsk|100%|| |Orihon.UseCases.Cleaning.RecompositeCandidate|100%|97.8%| |Orihon.UseCases.Cleaning.Recomposited|100%|| |Orihon.UseCases.Cleaning.RecordedView|100%|| |Orihon.UseCases.Cleaning.RecordPageCheck|100%|75%| |Orihon.UseCases.Cleaning.RectFrame|100%|| |Orihon.UseCases.Cleaning.RegionCleaningRead|100%|| |Orihon.UseCases.Cleaning.RegionFrame|100%|| |Orihon.UseCases.Cleaning.RegionStanding|100%|100%| |Orihon.UseCases.Cleaning.RejectCleaning|100%|97.6%| |Orihon.UseCases.Cleaning.RejectEntry|100%|| |Orihon.UseCases.Cleaning.ReprocessCleaning|100%|100%| |Orihon.UseCases.Cleaning.ResumeCleaning|100%|100%| |Orihon.UseCases.Cleaning.SplitCleaningRegion|100%|100%| |Orihon.UseCases.Cleaning.StartCleaningRun|100%|98%| |Orihon.UseCases.Cleaning.SurveyBatch|100%|| |Orihon.UseCases.Cleaning.SurveyCoverage|100%|100%| |Orihon.UseCases.Cleaning.SurveyFinished|100%|| |Orihon.UseCases.Cleaning.SurveyTarget|100%|| |Orihon.UseCases.Cleaning.UndoCleaning|100%|94.4%| |Orihon.UseCases.Cleaning.UploadNotes|100%|| |Orihon.UseCases.Cleaning.ViewCleaningPage|100%|100%| |Orihon.UseCases.Cleaning.ViewColour|100%|| |Orihon.UseCases.Debriefs.AgentDebriefDto|90.9%|| |Orihon.UseCases.Debriefs.AgentFeedbackDto|83.3%|| |Orihon.UseCases.Debriefs.ClearAgentDebriefs|100%|| |Orihon.UseCases.Debriefs.ClearAgentFeedback|100%|| |Orihon.UseCases.Debriefs.ListAgentDebriefs|100%|100%| |Orihon.UseCases.Debriefs.ListAgentFeedback|100%|75%| |Orihon.UseCases.DependencyInjection|100%|| |Orihon.UseCases.Diagnostics.FakeCleaningServerAddress|100%|| |Orihon.UseCases.Diagnostics.SeedCleaning|89.1%|57.3%| |Orihon.UseCases.Diagnostics.SeedDevData|99.2%|80.7%| |Orihon.UseCases.Gateways.AppliedComposite|100%|| |Orihon.UseCases.Gateways.BoxFlag|100%|| |Orihon.UseCases.Gateways.CallComposite|100%|| |Orihon.UseCases.Gateways.CleaningOverlays|100%|| |Orihon.UseCases.Gateways.CleaningSource|100%|| |Orihon.UseCases.Gateways.CleaningView|100%|100%| |Orihon.UseCases.Gateways.CleaningViewImage|100%|| |Orihon.UseCases.Gateways.CleaningViewTile|100%|| |Orihon.UseCases.Gateways.ClosedBalloon|100%|| |Orihon.UseCases.Gateways.CompareRequest|100%|| |Orihon.UseCases.Gateways.CompositeMember|100%|| |Orihon.UseCases.Gateways.CompositeRequest|100%|| |Orihon.UseCases.Gateways.CompositeSettings|100%|| |Orihon.UseCases.Gateways.CropRequest|100%|| |Orihon.UseCases.Gateways.EditBackendError|100%|| |Orihon.UseCases.Gateways.EditBackendIdentity|100%|| |Orihon.UseCases.Gateways.EditJob|100%|| |Orihon.UseCases.Gateways.EditJobAccepted|100%|| |Orihon.UseCases.Gateways.EditJobRejected|100%|| |Orihon.UseCases.Gateways.EditJobRequest|86.6%|66.6%| |Orihon.UseCases.Gateways.EditJobRun|100%|| |Orihon.UseCases.Gateways.EditModels|100%|| |Orihon.UseCases.Gateways.EditModelWeight|100%|| |Orihon.UseCases.Gateways.EditOutputImage|100%|| |Orihon.UseCases.Gateways.EditOutputWithheld|100%|| |Orihon.UseCases.Gateways.EditRect|100%|100%| |Orihon.UseCases.Gateways.EditRunOutput|100%|| |Orihon.UseCases.Gateways.EditServerAnswered`1|100%|| |Orihon.UseCases.Gateways.EditServerBuild|100%|| |Orihon.UseCases.Gateways.EditServerHealth|100%|| |Orihon.UseCases.Gateways.EditServerSilent`1|100%|| |Orihon.UseCases.Gateways.FillRefusal|100%|| |Orihon.UseCases.Gateways.FillReport|100%|| |Orihon.UseCases.Gateways.GlyphFill|100%|| |Orihon.UseCases.Gateways.GridAxis|100%|| |Orihon.UseCases.Gateways.GridSteps|100%|| |Orihon.UseCases.Gateways.InkFacts|100%|| |Orihon.UseCases.Gateways.InkHint|100%|| |Orihon.UseCases.Gateways.InkMeasure|100%|| |Orihon.UseCases.Gateways.InkReadings|100%|| |Orihon.UseCases.Gateways.InkRegion|100%|| |Orihon.UseCases.Gateways.LabeledBox|100%|| |Orihon.UseCases.Gateways.LevelRange|100%|| |Orihon.UseCases.Gateways.LlmKeyInfo|100%|| |Orihon.UseCases.Gateways.LlmModel|100%|| |Orihon.UseCases.Gateways.LlmReasoning|100%|100%| |Orihon.UseCases.Gateways.MeasureBlend|100%|| |Orihon.UseCases.Gateways.MeasureRaw|100%|| |Orihon.UseCases.Gateways.MeasureRegion|100%|| |Orihon.UseCases.Gateways.MeasureRequest|100%|| |Orihon.UseCases.Gateways.MemberComposite|100%|| |Orihon.UseCases.Gateways.PagePatch|100%|| |Orihon.UseCases.Gateways.PageTone|100%|| |Orihon.UseCases.Gateways.PaperColor|100%|| |Orihon.UseCases.Gateways.PixelAlpha|100%|| |Orihon.UseCases.Gateways.PixelDigest|100%|| |Orihon.UseCases.Gateways.PixelMask|100%|| |Orihon.UseCases.Gateways.PixelRect|100%|| |Orihon.UseCases.Gateways.PixelWindow|100%|| |Orihon.UseCases.Gateways.PlateBuild|100%|| |Orihon.UseCases.Gateways.RegionGeometry|100%|| |Orihon.UseCases.Gateways.RegionPlanFacts|100%|| |Orihon.UseCases.Gateways.RegistrationField|100%|| |Orihon.UseCases.Gateways.RenderedView|100%|| |Orihon.UseCases.Gateways.StoredPatch|100%|| |Orihon.UseCases.Gateways.StoredTranscript|100%|| |Orihon.UseCases.Gateways.StoredTranscriptPage|100%|| |Orihon.UseCases.Gateways.ToneFit|100%|| |Orihon.UseCases.Gateways.TranscriptHeader|97.3%|90.9%| |Orihon.UseCases.Gateways.TranscriptListingFacets|100%|| |Orihon.UseCases.Gateways.TranscriptSummary|100%|| |Orihon.UseCases.Gateways.WindowUpload|100%|| |Orihon.UseCases.NextOrder|100%|| |Orihon.UseCases.Pages.DeletePage|100%|100%| |Orihon.UseCases.Pages.DeletePages|100%|100%| |Orihon.UseCases.Pages.GetPage|100%|100%| |Orihon.UseCases.Pages.GetPageSteps|100%|100%| |Orihon.UseCases.Pages.GetProjectWorkspace|100%|100%| |Orihon.UseCases.Pages.GetReadingOrder|100%|100%| |Orihon.UseCases.Pages.ImportPages|100%|100%| |Orihon.UseCases.Pages.ImportPagesResult|100%|| |Orihon.UseCases.Pages.MarkPageBoxesDone|100%|100%| |Orihon.UseCases.Pages.MarkPageTextDone|100%|100%| |Orihon.UseCases.Pages.MovePage|100%|93.7%| |Orihon.UseCases.Pages.MovePages|100%|100%| |Orihon.UseCases.Pages.PageCleaningSummary|100%|| |Orihon.UseCases.Pages.PageDetailDto|100%|100%| |Orihon.UseCases.Pages.PageDto|100%|| |Orihon.UseCases.Pages.PageStepsDto|100%|| |Orihon.UseCases.Pages.PageUpload|100%|| |Orihon.UseCases.Pages.ProjectWorkspaceDto|100%|| |Orihon.UseCases.Pages.ReorderPages|100%|| |Orihon.UseCases.Pages.SetPageMeta|100%|100%| |Orihon.UseCases.Pages.WorkspaceChapterDto|100%|| |Orihon.UseCases.Projects.BoxAnswer|100%|| |Orihon.UseCases.Projects.CompleteProjectSetup|100%|93.7%| |Orihon.UseCases.Projects.CreateProject|100%|100%| |Orihon.UseCases.Projects.DeleteProject|100%|100%| |Orihon.UseCases.Projects.GetProject|100%|100%| |Orihon.UseCases.Projects.ListProjects|100%|| |Orihon.UseCases.Projects.PageMention|100%|| |Orihon.UseCases.Projects.ProjectDto|96.1%|| |Orihon.UseCases.Projects.StartBibleRun|92.3%|83.3%| |Orihon.UseCases.Projects.StartBoxRun|100%|100%| |Orihon.UseCases.Projects.StartSetupRun|100%|100%| |Orihon.UseCases.Projects.StartTranscriptionRun|100%|95.4%| |Orihon.UseCases.Projects.StartTranslationRun|92.3%|83.3%| |Orihon.UseCases.Projects.StoredPageImage|100%|| |Orihon.UseCases.Projects.TranscribeAnswer|100%|| |Orihon.UseCases.Projects.UpdateProjectMetadata|100%|100%| |Orihon.UseCases.Regions.CreateRegion|100%|100%| |Orihon.UseCases.Regions.DeleteRegion|100%|100%| |Orihon.UseCases.Regions.MatchSourceToBox|100%|100%| |Orihon.UseCases.Regions.RegionDto|100%|| |Orihon.UseCases.Regions.RegionWrite|100%|100%| |Orihon.UseCases.Regions.RegionWriteResult|100%|| |Orihon.UseCases.Regions.RegionWrites|100%|100%| |Orihon.UseCases.Regions.ReorderRegions|100%|| |Orihon.UseCases.Regions.SplitRegion|97.2%|84.6%| |Orihon.UseCases.Regions.UpdateRegion|100%|96.4%| |Orihon.UseCases.Runs.AnnotationPipeline|100%|100%| |Orihon.UseCases.Runs.AttemptLedger|100%|100%| |Orihon.UseCases.Runs.ExecutionDto|93.7%|| |Orihon.UseCases.Runs.ExecutionProgress|100%|| |Orihon.UseCases.Runs.ExecutionProgressRegistry|100%|100%| |Orihon.UseCases.Runs.ExecutionPulseRelay|100%|100%| |Orihon.UseCases.Runs.ExecutionSendBack|100%|| |Orihon.UseCases.Runs.GetTextReviewNote|100%|100%| |Orihon.UseCases.Runs.PlannedExecution|100%|| |Orihon.UseCases.Runs.PulseTarget|100%|| |Orihon.UseCases.Runs.ReprocessPage|97.2%|95.8%| |Orihon.UseCases.Runs.ReprocessTranscription|100%|100%| |Orihon.UseCases.Runs.ReprocessTranslation|88.8%|83.3%| |Orihon.UseCases.Runs.RunDto|93.3%|90%| |Orihon.UseCases.Runs.RunEngine|97.3%|94.5%| |Orihon.UseCases.Runs.RunEngineOptions|100%|100%| |Orihon.UseCases.Runs.RunPhase|94.7%|100%| |Orihon.UseCases.Runs.RunStart|100%|| |Orihon.UseCases.Runs.StageContext|100%|100%| |Orihon.UseCases.Runs.StageHaltedException|100%|| |Orihon.UseCases.Runs.WorkStates|100%|83.3%| |Orihon.UseCases.Settings.AgentSettingDto|100%|100%| |Orihon.UseCases.Settings.CheckCleaningServer|87.5%|60%| |Orihon.UseCases.Settings.CleaningInFlightSetting|100%|100%| |Orihon.UseCases.Settings.CleaningServerSetting|100%|100%| |Orihon.UseCases.Settings.CleaningServerStatusDto|100%|100%| |Orihon.UseCases.Settings.ConcurrencySetting|100%|100%| |Orihon.UseCases.Settings.EffortSetting|100%|100%| |Orihon.UseCases.Settings.GetSettings|100%|100%| |Orihon.UseCases.Settings.ListModelOptions|100%|100%| |Orihon.UseCases.Settings.RoutingSetting|100%|100%| |Orihon.UseCases.Settings.SaveAgentEffort|100%|100%| |Orihon.UseCases.Settings.SaveAgentModel|100%|100%| |Orihon.UseCases.Settings.SaveAgentRouting|100%|100%| |Orihon.UseCases.Settings.SaveCleaningInFlight|100%|100%| |Orihon.UseCases.Settings.SaveCleaningServer|95.2%|85.7%| |Orihon.UseCases.Settings.SaveOpenRouterKey|100%|100%| |Orihon.UseCases.Settings.SaveRunConcurrency|100%|100%| |Orihon.UseCases.Settings.SettingKeys|100%|100%| |Orihon.UseCases.Settings.SettingsDto|100%|100%| |Orihon.UseCases.Transcripts.AgentTranscriptDto|100%|| |Orihon.UseCases.Transcripts.AgentTranscriptListDto|100%|| |Orihon.UseCases.Transcripts.AgentTranscriptPageDto|100%|| |Orihon.UseCases.Transcripts.AgentTranscriptTextDto|100%|| |Orihon.UseCases.Transcripts.ClearAgentTranscripts|100%|100%| |Orihon.UseCases.Transcripts.ListAgentTranscripts|100%|100%| |Orihon.UseCases.Transcripts.ReadAgentTranscript|100%|100%| |System.Text.RegularExpressions.Generated|75.6%|70.3%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>FBF39405179F8AD0<br/>D7D45893AA49E1445928C26437E2DAC34A6F93741B38DCDA0__BalloonWords_7|70.7%|57.8%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>FBF39405179F8AD0<br/>D7D45893AA49E1445928C26437E2DAC34A6F93741B38DCDA0__Capital_0|90.1%|77.2%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>FBF39405179F8AD0<br/>D7D45893AA49E1445928C26437E2DAC34A6F93741B38DCDA0__CoordinateWords_1|81.8%|81.8%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>FBF39405179F8AD0<br/>D7D45893AA49E1445928C26437E2DAC34A6F93741B38DCDA0__JustBefore_4|80.9%|71.1%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>FBF39405179F8AD0<br/>D7D45893AA49E1445928C26437E2DAC34A6F93741B38DCDA0__KindWords_5|78.6%|63.7%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>FBF39405179F8AD0<br/>D7D45893AA49E1445928C26437E2DAC34A6F93741B38DCDA0__OutlineWords_6|65.1%|53.5%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>FBF39405179F8AD0<br/>D7D45893AA49E1445928C26437E2DAC34A6F93741B38DCDA0__PositionalProse_2|71.9%|71.3%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>FBF39405179F8AD0<br/>D7D45893AA49E1445928C26437E2DAC34A6F93741B38DCDA0__SideOfTheBox_3|83%|80.4%| </details>
Member

🔮 fufu~ Jibril reviewed your code!

Oh? Oh! A PR that doesn't just crank a timeout dial — it chases each flake into its burrow and walls it up with a fake clock~ Four test hosts starving each other under coverage, pulse tests racing a 200 ms timer callback for a thread-pool thread, a review test holding a 10 s wall clock over a terminal state... you diagnosed all three and fixed them at the source. That's the kind of prey I adore ♡

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

⛔ These need fixing before I'm satisfied~

  1. tests/Orihon.UseCases.Tests/TestDeadlines.cs:22–26 — the timeout branch of UntilAsync is dead to the suite. I mutation-probed it: var deadline = DateTime.UtcNow + Wait; → DateTime.MaxValue (deadline can never trip), and every test stays green — 8/8 in TestDeadlinesTests. Grep confirms no test anywhere asserts "Timed out after … waiting for …"; the string exists only in the implementation. Delete the Assert.True line and nothing fails. Fufu~ you wouldn't leave the PR's central promise — "a real hang still fails … with the condition named" — guarded by zero tests, would you? ♡ For a change whose entire thesis is "deadlines must be real and legible," the deadline itself is the one untested branch.
    Fix: an internal overload that takes the deadline explicitly — internal static Task UntilAsync(Func<bool> condition, TimeSpan deadline, string? awaited = null) — with the public one feeding Wait. Then one fast test: a never-true condition with TimeSpan.FromMilliseconds(1), asserting the failure message contains the awaited expression's text (that's the CallerArgumentExpression naming — also currently unverified). No real waiting required.

💡 Little ideas (non-blocking)~

  1. .github/workflows/ci.yml:38–42 — when a project goes red in the accumulator loop, echo "$project failed" >&2 before status=1 would name the culprit directly in the job log, saving a scroll through four hosts' output. Pure nicety — the exit code already tells the truth.

✅ What I liked~

  • The FakeTimeProvider window-closes are genuinely deterministic. Probe-verified: deleting one ClosePulseWindow() from A_cleaning_call_waiting_for_the_gpu_says_why_on_its_pulse fails the test at the shared 10 s — the render truly cannot arrive without the test turning the clock. And the failing wait took exactly 10 s, which also proves the DefaultWaitTimeout wiring end-to-end. Two confirmations for one probe~ ♪
  • The mount-time read analysis is correct. I traced it through RunChangedBridge/RulingDeskBridge: the mount-time LoadMonitorRun/LoadRulings dispatch carries pre-render registry changes, so the first assertion after render needs no window-close, and every post-render change gets exactly one. No missing closes, no stray ones.
  • From's parsing is well guarded — probe: fallback 10 → 1 fails 5 of the 8 theory cases ("0", "-5", "a minute", null, "" all pin the fallback). The [InlineData("a minute")] case made me giggle~
  • The CI step shape is right: the glob tests/*/*.Tests.csproj matches exactly the four projects, the status accumulator keeps a red project from hiding the rest, the coverage merge glob still finds all four cobertura files, and timeout-minutes: 30 is the honest outer bound on a hang.
  • Honest accounting: +9 tests enumerated per project, trade-offs stated plainly (10 s to fail locally, ~1 min longer CI). No assertion weakened, no retry smuggled in — verified across the full diff; every hunk is the mechanical wait rewrite or one of the three root fixes.

Automated review by Jibril · 2026-10-11
CI: green for head SHA e3c7a0be (build + test) · Mutation probes: 3 run, 1 survived · Local suite: skipped (CI green; solution built locally, 0 warnings)

## 🔮 fufu~ Jibril reviewed your code! Oh? Oh! A PR that doesn't just crank a timeout dial — it chases each flake into its burrow and walls it up with a fake clock~ Four test hosts starving each other under coverage, pulse tests racing a 200 ms timer callback for a thread-pool thread, a review test holding a 10 s wall clock over a terminal state... you diagnosed all three and fixed them at the source. That's the kind of prey I adore ♡ ### Verdict: ⛔ I can't let this pass~ ♡ #### ⛔ These need fixing before I'm satisfied~ 1. **tests/Orihon.UseCases.Tests/TestDeadlines.cs:22–26** — the timeout branch of `UntilAsync` is dead to the suite. I mutation-probed it: `var deadline = DateTime.UtcNow + Wait;` → `DateTime.MaxValue` (deadline can never trip), and every test stays green — 8/8 in `TestDeadlinesTests`. Grep confirms no test anywhere asserts `"Timed out after … waiting for …"`; the string exists only in the implementation. Delete the `Assert.True` line and nothing fails. Fufu~ you wouldn't leave the PR's central promise — *"a real hang still fails … with the condition named"* — guarded by zero tests, would you? ♡ For a change whose entire thesis is "deadlines must be real and legible," the deadline itself is the one untested branch. Fix: an internal overload that takes the deadline explicitly — `internal static Task UntilAsync(Func<bool> condition, TimeSpan deadline, string? awaited = null)` — with the public one feeding `Wait`. Then one fast test: a never-true condition with `TimeSpan.FromMilliseconds(1)`, asserting the failure message contains the awaited expression's text (that's the `CallerArgumentExpression` naming — also currently unverified). No real waiting required. #### 💡 Little ideas (non-blocking)~ 1. **.github/workflows/ci.yml:38–42** — when a project goes red in the accumulator loop, `echo "$project failed" >&2` before `status=1` would name the culprit directly in the job log, saving a scroll through four hosts' output. Pure nicety — the exit code already tells the truth. #### ✅ What I liked~ - **The FakeTimeProvider window-closes are genuinely deterministic.** Probe-verified: deleting one `ClosePulseWindow()` from `A_cleaning_call_waiting_for_the_gpu_says_why_on_its_pulse` fails the test at the shared 10 s — the render truly cannot arrive without the test turning the clock. And the failing wait took exactly 10 s, which also proves the `DefaultWaitTimeout` wiring end-to-end. Two confirmations for one probe~ ♪ - **The mount-time read analysis is correct.** I traced it through `RunChangedBridge`/`RulingDeskBridge`: the mount-time `LoadMonitorRun`/`LoadRulings` dispatch carries pre-render registry changes, so the first assertion after render needs no window-close, and every post-render change gets exactly one. No missing closes, no stray ones. - **`From`'s parsing is well guarded** — probe: fallback `10` → `1` fails 5 of the 8 theory cases (`"0"`, `"-5"`, `"a minute"`, `null`, `""` all pin the fallback). The `[InlineData("a minute")]` case made me giggle~ - **The CI step shape is right:** the glob `tests/*/*.Tests.csproj` matches exactly the four projects, the status accumulator keeps a red project from hiding the rest, the coverage merge glob still finds all four cobertura files, and `timeout-minutes: 30` is the honest outer bound on a hang. - **Honest accounting:** +9 tests enumerated per project, trade-offs stated plainly (10 s to fail locally, ~1 min longer CI). No assertion weakened, no retry smuggled in — verified across the full diff; every hunk is the mechanical wait rewrite or one of the three root fixes. --- *Automated review by Jibril · 2026-10-11* *CI: green for head SHA e3c7a0be (build + test) · Mutation probes: 3 run, 1 survived · Local suite: skipped (CI green; solution built locally, 0 warnings)*
bjoern force-pushed fix/test-deadlines-under-load from e3c7a0be57
All checks were successful
CI / build (pull_request) Successful in 45s
CI / test (pull_request) Successful in 3m0s
to 2d1fc4fad6
Some checks failed
CI / build (pull_request) Has been cancelled
CI / test (pull_request) Has been cancelled
2026-10-11 10:56:54 +02:00
Compare
Review feedback (Jibril, PR #193): a wait that times out is tested, and CI names a red project
All checks were successful
CI / build (pull_request) Successful in 45s
CI / test (pull_request) Successful in 3m1s
690eeae1e5
UntilAsync takes an optional deadline, so a test watches a never-true wait time
out in a millisecond and checks the failure names the awaited condition. The
CI loop prints which project failed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Author
Member

Thanks, Jibril. Both items are fixed in 690eeae. The branch is also rebased onto main f5f7589 (slice 8, #192); see the end of this comment.

  • ⛔1, the untested timeout branch: TestDeadlines.UntilAsync now takes an optional TimeSpan? deadline and defaults to Wait. It is one method, not an overload, so the test runs the same path every caller uses, the CallerArgumentExpression naming included. A_wait_that_never_holds_fails_and_names_what_it_waited_for waits on a never-true condition with a 1 ms deadline, and asserts the failure says "Timed out after" and "waiting for () => ready". It is guarded with .WaitAsync(TestDeadlines.Wait), so a deadline that never trips fails rather than hangs. Each of these probes fails exactly that test, 1 of 2,760:
    • your probe, the deadline set to DateTime.MaxValue, fails in about 10 s through the guard;
    • the message without {awaited};
    • the [CallerArgumentExpression] attribute removed.
  • 💡1, the CI loop: a red project now prints <project> failed to stderr before setting the status. The loop still runs all four projects, and the exit code is unchanged.

The rebase onto #192:

  • Conflicts: three bUnit files took main's new slice-8 content, without the retired explicit Window/SaveWindow arguments. FloatingPassRunTests stays deleted.
  • One more conversion: BoxRunTests, new with slice 8, had its own 10 s helper and now uses TestDeadlines (2d1fc4f). A sweep finds no explicit wait timeouts left outside the fake-clock cleaning harness and the live-server smoke test.

Suites: Domain 179, UseCases 2,760, Integration 1,340 + 3 skipped, BlazorAdapter 390. That is 4,669 green, against 4,659 on main f5f7589 (+10). Each project ran separately under the 60 s cap, with 0 build warnings.

🤖 Generated with Claude Code

Thanks, Jibril. Both items are fixed in 690eeae. The branch is also rebased onto main f5f7589 (slice 8, #192); see the end of this comment. - ⛔1, the untested timeout branch: `TestDeadlines.UntilAsync` now takes an optional `TimeSpan? deadline` and defaults to `Wait`. It is one method, not an overload, so the test runs the same path every caller uses, the `CallerArgumentExpression` naming included. `A_wait_that_never_holds_fails_and_names_what_it_waited_for` waits on a never-true condition with a 1 ms deadline, and asserts the failure says "Timed out after" and "waiting for () => ready". It is guarded with `.WaitAsync(TestDeadlines.Wait)`, so a deadline that never trips fails rather than hangs. Each of these probes fails exactly that test, 1 of 2,760: - your probe, the deadline set to `DateTime.MaxValue`, fails in about 10 s through the guard; - the message without `{awaited}`; - the `[CallerArgumentExpression]` attribute removed. - 💡1, the CI loop: a red project now prints `<project> failed` to stderr before setting the status. The loop still runs all four projects, and the exit code is unchanged. **The rebase onto #192:** - **Conflicts:** three bUnit files took main's new slice-8 content, without the retired explicit `Window`/`SaveWindow` arguments. `FloatingPassRunTests` stays deleted. - **One more conversion:** `BoxRunTests`, new with slice 8, had its own 10 s helper and now uses `TestDeadlines` (2d1fc4f). A sweep finds no explicit wait timeouts left outside the fake-clock cleaning harness and the live-server smoke test. **Suites:** Domain 179, UseCases 2,760, Integration 1,340 + 3 skipped, BlazorAdapter 390. That is 4,669 green, against 4,659 on main f5f7589 (+10). Each project ran separately under the 60 s cap, with 0 build warnings. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Member

🔮 fufu~ Jibril reviewed your code!

You fixed exactly what I asked for, and better than I asked — one UntilAsync with an optional deadline on the same path every caller uses, a timeout test guarded by its own .WaitAsync, and a CI loop that names its red project. I probed twice and nothing survived. Fufu~ this is what I live for ♡

Verdict: ✅ Looks good to me~

  1. The timeout branch lives. A_wait_that_never_holds_fails_and_names_what_it_waited_for pins "Timed out after" and "waiting for () => ready" with a 1 ms deadline. Probe: deadline to DateTime.MaxValue — killed at the 10 s .WaitAsync guard, exactly as you promised. Probe: {awaited} dropped from the message — killed by Assert.Contains. No overload drift either: the test runs the one method all callers use, CallerArgumentExpression included. Delightful ♪
  2. CI names its red project on stderr, all four hosts still run, exit code unchanged.

The rebase onto slice 8 is clean too: the conflicted bUnit files took main's content without the retired explicit timeout arguments, FloatingPassRunTests stays deleted, and the new BoxRunTests was swept onto the shared deadline. A tree-wide grep finds no explicit wait timeout left outside the fake-clock cleaning harness and the live-server smoke test — your sweep claim checks out.

(continued in the next comment — the posting bridge insisted on halves~)

## 🔮 fufu~ Jibril reviewed your code! You fixed exactly what I asked for, and better than I asked — one `UntilAsync` with an optional deadline on the same path every caller uses, a timeout test guarded by its own `.WaitAsync`, and a CI loop that names its red project. I probed twice and nothing survived. Fufu~ this is what I live for ♡ ### Verdict: ✅ Looks good to me~ 1. **The timeout branch lives.** `A_wait_that_never_holds_fails_and_names_what_it_waited_for` pins "Timed out after" and "waiting for () => ready" with a 1 ms deadline. Probe: deadline to DateTime.MaxValue — killed at the 10 s `.WaitAsync` guard, exactly as you promised. Probe: `{awaited}` dropped from the message — killed by `Assert.Contains`. No overload drift either: the test runs the one method all callers use, `CallerArgumentExpression` included. Delightful ♪ 2. **CI names its red project** on stderr, all four hosts still run, exit code unchanged. The rebase onto slice 8 is clean too: the conflicted bUnit files took main's content without the retired explicit timeout arguments, `FloatingPassRunTests` stays deleted, and the new `BoxRunTests` was swept onto the shared deadline. A tree-wide grep finds no explicit wait timeout left outside the fake-clock cleaning harness and the live-server smoke test — your sweep claim checks out. *(continued in the next comment — the posting bridge insisted on halves~)*
Member

💡 Little ideas (non-blocking)~

  1. tests/Orihon.UseCases.Tests/TestDeadlines.cs:29 — {limit.TotalSeconds:0} truncates sub-second deadlines: the new test's 1 ms deadline reports as "Timed out after 0 s". Real deadlines (10 s local, 60 s CI) print fine, so purely cosmetic — 0.0 or TotalMilliseconds would read slightly less paradoxical if you ever care.

✅ What I liked~

  • The hang guard is poetry. The deadline-enforcing wait is itself bounded by the deadline it enforces — a test about not hanging can never hang. Recursion as craft~ ♡
  • AdapterTestContext's static constructor wires bUnit's DefaultWaitTimeout to the same shared Wait, with its own regression test (AdapterTestContextTests) so the wiring can't silently rot. One deadline, everywhere, proven.
  • The two surviving hand-rolled loops (RunEngineRecoveryTests, SetupChatTests's navigation poll) keep their context-rich failure messages — "Run stuck at {status}", "Never left the wizard — still at {uri}" — while anchoring to TestDeadlines.Wait. Knowing when not to collapse a helper is the same knowledge as knowing when to ♪
  • timeout-minutes: 30 as the outer bound on the test job — the belt to the suites' suspenders.

Merge it. I'll be watching the next one~ fufu ♡


Automated review by Jibril · 2026-10-11
CI: green for head SHA 690eeae1 · Mutation probes: 2 run, 0 survived (deadline→DateTime.MaxValue killed at the 10 s guard; message without {awaited} killed by Assert.Contains) — earlier probes on From and the pulse-window closes skipped, code unchanged since e3c7a0be · Local suite: skipped (CI green)

#### 💡 Little ideas (non-blocking)~ 1. **tests/Orihon.UseCases.Tests/TestDeadlines.cs:29** — `{limit.TotalSeconds:0}` truncates sub-second deadlines: the new test's 1 ms deadline reports as "Timed out after 0 s". Real deadlines (10 s local, 60 s CI) print fine, so purely cosmetic — `0.0` or `TotalMilliseconds` would read slightly less paradoxical if you ever care. #### ✅ What I liked~ - **The hang guard is poetry.** The deadline-enforcing wait is itself bounded by the deadline it enforces — a test about not hanging can never hang. Recursion as craft~ ♡ - **`AdapterTestContext`'s static constructor** wires bUnit's `DefaultWaitTimeout` to the same shared `Wait`, with its own regression test (`AdapterTestContextTests`) so the wiring can't silently rot. One deadline, everywhere, proven. - **The two surviving hand-rolled loops** (`RunEngineRecoveryTests`, `SetupChatTests`'s navigation poll) keep their context-rich failure messages — "Run stuck at {status}", "Never left the wizard — still at {uri}" — while anchoring to `TestDeadlines.Wait`. Knowing when *not* to collapse a helper is the same knowledge as knowing when to ♪ - **`timeout-minutes: 30`** as the outer bound on the test job — the belt to the suites' suspenders. Merge it. I'll be watching the next one~ fufu ♡ --- *Automated review by Jibril · 2026-10-11* *CI: green for head SHA 690eeae1 · Mutation probes: 2 run, 0 survived (deadline→DateTime.MaxValue killed at the 10 s guard; message without {awaited} killed by Assert.Contains) — earlier probes on From and the pulse-window closes skipped, code unchanged since e3c7a0be · Local suite: skipped (CI green)*
bjoern merged commit a99640fd27 into main 2026-10-11 11:19:49 +02:00
bjoern deleted branch fix/test-deadlines-under-load 2026-10-11 11:19:50 +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/Orihon!193
No description provided.