research: decision models on text boxes — measured, set aside, kept (ADR 0028) #176

Merged
bjoern merged 7 commits from research/decision-bbox into main 2026-10-09 20:52:05 +02:00
Member

A research record beside the cleaning lab (docs/research/decision-bbox/) and the ADR it informs. The question: can a vision decision model (OpenRouter's decisions output modality: typed questions in, probabilities out, no text, no tools) walk a rough text-region box onto the lettering, one edge step at a time?

Conclusion (ADR 0028): not adopted. On their own, decision models do not do the box task, and a loop around them is not worth its place in annotation. The record and its sandbox stay so the work can be picked up again.

Findings

The evidence is in REPORT.md; the visual study is in report/index.html. In all: 88 live runs, about 68,000 calls, $3.37.

  • One of the four vision deciders sees the task.
    • perplexity/pplx-decider-v1.1-27b: AUC 0.98 for "does text cross this line?".
    • Clef and Clef Flash: chance.
    • Luna: moderate on cuts, poor on slack.
  • It is a good checker but a poor mover.
    • The best loop puts 67 % of held-out edges on target and leaves 12 % of boxes cutting.
    • It cannot create boxes, read the text, or tell neighbouring regions apart.
  • It only works through per-model fitted thresholds. Read by its most probable answer, it drives boxes into the text (53 of 59 cutting, from 42). Swapping models (ADR 0015) would need labelled boxes and a refit each time.
  • Presentation choices, one at a time (probe on identical inputs, plus the full loop):
    • Helps: a magnified edge strip beside the context.
    • Hurts: low resolution (384 px), the strip alone, corner-centred crops.
    • No measurable difference: a grid, the tint, a static frame.
    • Trade-off: all four edges in one call costs 2.3× fewer calls and leaves more boxes cutting.
  • The joystick (the model picks direction and distance) is worse. It answers "done" on cutting edges.
    • Read directly, every per-edge joystick leaves more boxes cutting than it started with (46–56 of 59, from 42).
    • The corner joystick's direct readings ended at 45 and 37 only because they barely moved the boxes (61–97 edges on target, against the baseline's 137).

What's in

  • The decision and its write-up:
    • docs/adr/0028-…: the decision, its reasons, what stays, and when to revisit.
    • REPORT.md: the evidence, in the cleaning lab's shape.
    • report/: a committed snapshot of the visual study (2.8 MB of crops, as the lab's report keeps).
    • figs.py: draws the report's figures from that snapshot.
  • The sandbox (sandbox/, a .NET project outside Orihon.slnx):
    • the loop
    • the perception probe
    • the presenter shared by both: context crop, edge strip, corner crops, grid, static or following frame
    • three ways of asking: yes/no, choice, joystick
    • threshold fitting (--FitFrom)
    • per-run HTML reports with a round slider, and the study builder
    • an oracle decider, for checking without a key
  • The cases: cases.json (15 picks) and cases-heldout.json (59 held-out), from the cleaning lab's glyph-tight, verified boxes. The scans and runs/ stay out of git.
  • The submodule: OpenRouter.Net comes current (af9fd7b → 403307d) for its Decisions API. Orihon builds with 0 warnings and passes its suite unchanged against it (Domain 171, UseCases 1486, Integration 1174 + 3 skipped, BlazorAdapter 326). Nothing in Orihon calls the API.

Verified

  • No tests for the sandbox. It is a research harness, like the lab's Python. It was checked with the oracle under every mode and reading, then live.
  • Reports in Playwright: the per-run reports, the runs index and the study page, with no console errors.
  • Review rounds 1–4 (Jibril) are addressed:
    • positional parsing
    • the empty --Only
    • the corner-mode budget
    • --ProbeOffsets validation
    • the joystick claim, scoped to which joysticks
    • the README's snapshot command
  • Round 4 is ✅. CI is green on 5539a64.

🤖 Generated with Claude Code

A research record beside the cleaning lab (`docs/research/decision-bbox/`) and the ADR it informs. The question: can a vision **decision model** (OpenRouter's `decisions` output modality: typed questions in, probabilities out, no text, no tools) walk a rough text-region box onto the lettering, one edge step at a time? **Conclusion ([ADR 0028](docs/adr/0028-decision-models-not-adopted-for-annotation.md)): not adopted.** On their own, decision models do not do the box task, and a loop around them is not worth its place in annotation. The record and its sandbox stay so the work can be picked up again. ## Findings The evidence is in `REPORT.md`; the visual study is in `report/index.html`. In all: 88 live runs, about 68,000 calls, $3.37. - **One of the four vision deciders sees the task.** - `perplexity/pplx-decider-v1.1-27b`: AUC 0.98 for "does text cross this line?". - Clef and Clef Flash: chance. - Luna: moderate on cuts, poor on slack. - **It is a good checker but a poor mover.** - The best loop puts 67 % of held-out edges on target and leaves 12 % of boxes cutting. - It cannot create boxes, read the text, or tell neighbouring regions apart. - **It only works through per-model fitted thresholds.** Read by its most probable answer, it drives boxes into the text (53 of 59 cutting, from 42). Swapping models (ADR 0015) would need labelled boxes and a refit each time. - **Presentation choices, one at a time** (probe on identical inputs, plus the full loop): - Helps: a magnified edge strip beside the context. - Hurts: low resolution (384 px), the strip alone, corner-centred crops. - No measurable difference: a grid, the tint, a static frame. - Trade-off: all four edges in one call costs 2.3× fewer calls and leaves more boxes cutting. - **The joystick (the model picks direction and distance) is worse.** It answers "done" on cutting edges. - Read directly, every *per-edge* joystick leaves more boxes cutting than it started with (46–56 of 59, from 42). - The corner joystick's direct readings ended at 45 and 37 only because they barely moved the boxes (61–97 edges on target, against the baseline's 137). ## What's in - **The decision and its write-up:** - `docs/adr/0028-…`: the decision, its reasons, what stays, and when to revisit. - `REPORT.md`: the evidence, in the cleaning lab's shape. - `report/`: a committed snapshot of the visual study (2.8 MB of crops, as the lab's report keeps). - `figs.py`: draws the report's figures from that snapshot. - **The sandbox** (`sandbox/`, a .NET project outside `Orihon.slnx`): - the loop - the perception probe - the presenter shared by both: context crop, edge strip, corner crops, grid, static or following frame - three ways of asking: yes/no, choice, joystick - threshold fitting (`--FitFrom`) - per-run HTML reports with a round slider, and the study builder - an oracle decider, for checking without a key - **The cases:** `cases.json` (15 picks) and `cases-heldout.json` (59 held-out), from the cleaning lab's glyph-tight, verified boxes. The scans and `runs/` stay out of git. - **The submodule:** OpenRouter.Net comes current (`af9fd7b` → `403307d`) for its Decisions API. Orihon builds with 0 warnings and passes its suite unchanged against it (Domain 171, UseCases 1486, Integration 1174 + 3 skipped, BlazorAdapter 326). Nothing in Orihon calls the API. ## Verified - **No tests for the sandbox.** It is a research harness, like the lab's Python. It was checked with the oracle under every mode and reading, then live. - **Reports in Playwright:** the per-run reports, the runs index and the study page, with no console errors. - **Review rounds 1–4** (Jibril) are addressed: - positional parsing - the empty `--Only` - the corner-mode budget - `--ProbeOffsets` validation - the joystick claim, scoped to which joysticks - the README's snapshot command - **Round 4 is ✅. CI is green on `5539a64`.** 🤖 Generated with [Claude Code](https://claude.com/claude-code)
research: a sandbox for walking text boxes with a vision decision model
All checks were successful
CI / build (pull_request) Successful in 40s
CI / test (pull_request) Successful in 1m35s
a448ff5313
Asks a decision model (OpenRouter's decisions modality, images in the
state array) whether each edge of a rough box should move out, stay or move
in, steps it by a fixed amount, halves the step on a reversal, and settles
on the outer position. Fifteen regions from the cleaning lab with verified
glyph-tight boxes are the truth; each run writes its trace, the exact images
the model saw and an HTML report with a per-round slider.

The vendored OpenRouter.Net comes current for its Decisions API; Orihon
builds and passes its suite unchanged against 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: 5539a64 · Generated: 2026-10-09 18:48:39 UTC · Revision: #5

Summary

Summary
Generated on: 10/09/2026 - 18:48:38
Coverage date: 10/09/2026 - 18:47:39 - 10/09/2026 - 18:48:34
Parser: MultiReport (4x Cobertura)
Assemblies: 6
Classes: 880
Files: 385
Line coverage: 96.3% (36690 of 38063)
Covered lines: 36690
Uncovered lines: 1373
Coverable lines: 38063
Total lines: 62687
Branch coverage: 87.7% (9036 of 10293)
Covered branches: 9036
Total branches: 10293
Method coverage: Feature is only available for sponsors

Coverage

Orihon.BlazorAdapter - 96.2%
Name Line Branch
Orihon.BlazorAdapter 96.2% 90.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.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.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 94.5% 88.1%
Orihon.BlazorAdapter.PageWorkspace.PageWorkspaceReducers 100% 64.2%
Orihon.BlazorAdapter.PageWorkspace.PageWorkspaceState 100%
Orihon.BlazorAdapter.PageWorkspace.PageWriteFailed 100%
Orihon.BlazorAdapter.PageWorkspace.RegionColorsSampled 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.ReprocessTranslationRequested 100%
Orihon.BlazorAdapter.PageWorkspace.SampleRegionColorsRequested 100%
Orihon.BlazorAdapter.PageWorkspace.SavePageSummaryRequested 100%
Orihon.BlazorAdapter.PageWorkspace.SaveRegionRequested 100%
Orihon.BlazorAdapter.PageWorkspace.SetPageMetaRequested 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 98.2% 94.6%
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.1% 94.2%
Orihon.BlazorAdapter.Runs.RunMonitorEffects 100% 91.6%
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.FloatingPassToggled 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.5% 83.3%
Orihon.BlazorAdapter.Settings.SettingsLoaded 100%
Orihon.BlazorAdapter.Settings.SettingsPage 97.7% 91.6%
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.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.FloatingPassAnswered 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.9%
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.RunAnnotationRequested 100%
Orihon.BlazorAdapter.Workspace.RunBibleRequested 100%
Orihon.BlazorAdapter.Workspace.RunCleanRequested 100%
Orihon.BlazorAdapter.Workspace.RunFloatingPassRequested 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.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.InkColor 100% 100%
Orihon.Domain.Translation.Page 100%
Orihon.Domain.Translation.Region 100% 100%
Orihon.Domain.Translation.RegionInk 100% 100%
Orihon.Domain.Translation.RegionProfile 100%
Orihon.Infrastructure - 97.9%
Name Line Branch
Orihon.Infrastructure 97.9% 86.4%
Orihon.Infrastructure.Agents.EfAgentDebriefStore 100%
Orihon.Infrastructure.Agents.EfAgentFeedbackStore 100%
Orihon.Infrastructure.Bible.EfBibleStore 95.2% 92.8%
Orihon.Infrastructure.Cleaning.EfCleaningCallStore 98.6% 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.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.PageRects 100%
Orihon.Infrastructure.Gateways.Cleaning.PaperComponent 100%
Orihon.Infrastructure.Gateways.Cleaning.PatchPixels 100% 100%
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.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 93.9% 93.4%
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.SkiaRegionColorSampler 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.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.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.AddRuns 99.1%
Orihon.Infrastructure.Persistence.Migrations.AddStoryOverview 99.5%
Orihon.Infrastructure.Persistence.Migrations.DropRegionContainer 99.1%
Orihon.Infrastructure.Persistence.Migrations.DropRegionType 99%
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.OrihonDbContext 100%
Orihon.Infrastructure.Persistence.OrihonDbContextFactory 100%
Orihon.Infrastructure.Projects.EfProjectStore 100% 100%
Orihon.Infrastructure.Projects.FileSystemPageImageStore 100% 100%
Orihon.Infrastructure.Runs.EfRunStore 96.6% 75%
Orihon.Infrastructure.Settings.EfAppSettingsStore 100% 100%
Orihon.Infrastructure.Translation.EfChapterStore 100% 100%
Orihon.Infrastructure.Translation.EfPageStore 98.3% 93.7%
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 - 94.9%
Name Line Branch
Orihon.Server 94.9% 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.4% 85.7%
Orihon.UseCases - 93.4%
Name Line Branch
Orihon.UseCases 93.4% 87.6%
Orihon.UseCases.Agents.AgentAttemptPreparation 100%
Orihon.UseCases.Agents.AgentAttemptSupport 98.6% 98.3%
Orihon.UseCases.Agents.AgentBlueprint 100%
Orihon.UseCases.Agents.AgentCapDebrief 100%
Orihon.UseCases.Agents.AgentInvocation 100%
Orihon.UseCases.Agents.AgentOutcome 100%
Orihon.UseCases.Agents.AgentTool`1 90.9% 75%
Orihon.UseCases.Agents.AgentToolImage 100%
Orihon.UseCases.Agents.AgentToolResult 100%
Orihon.UseCases.Agents.Annotation.AddFloatingRegionParams 100%
Orihon.UseCases.Agents.Annotation.AddFloatingRegionTool 95.8% 75%
Orihon.UseCases.Agents.Annotation.AddRegionParams 100%
Orihon.UseCases.Agents.Annotation.AddRegionTool 95.4% 75%
Orihon.UseCases.Agents.Annotation.AnnotationBlueprints 100%
Orihon.UseCases.Agents.Annotation.AnnotationStage 98.5% 86.1%
Orihon.UseCases.Agents.Annotation.BboxCreationExecutor 90.4% 50%
Orihon.UseCases.Agents.Annotation.BboxRefinementExecutor 96.5% 90%
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.BoundViewPageTool 93.1% 80%
Orihon.UseCases.Agents.Annotation.BoundViewParams 100%
Orihon.UseCases.Agents.Annotation.ClassifyRegionParams 100%
Orihon.UseCases.Agents.Annotation.ClassifyRegionTool 100% 100%
Orihon.UseCases.Agents.Annotation.ColorReading 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 88.2% 62.5%
Orihon.UseCases.Agents.Annotation.FloatingCreationExecutor 86.9% 50%
Orihon.UseCases.Agents.Annotation.FloatingQaExecutor 91.8% 78.5%
Orihon.UseCases.Agents.Annotation.FloatingTranscriptionExecutor 95.4% 75%
Orihon.UseCases.Agents.Annotation.ListRegionsTool 93.7% 80.7%
Orihon.UseCases.Agents.Annotation.MoveResizeBoundTool 90.9% 50%
Orihon.UseCases.Agents.Annotation.MoveResizeRegionParams 100%
Orihon.UseCases.Agents.Annotation.MoveResizeRegionTool 95.8% 83.3%
Orihon.UseCases.Agents.Annotation.NoteRegionParams 100%
Orihon.UseCases.Agents.Annotation.NoteRegionTool 100% 100%
Orihon.UseCases.Agents.Annotation.PageQaExecutor 92.5% 79.1%
Orihon.UseCases.Agents.Annotation.QaReportSink 100% 100%
Orihon.UseCases.Agents.Annotation.RegionAuthoringAccess 89.4% 62.5%
Orihon.UseCases.Agents.Annotation.RegionBriefing 100% 96.1%
Orihon.UseCases.Agents.Annotation.RegionCropParams 100%
Orihon.UseCases.Agents.Annotation.RegionCropTool 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 88% 60%
Orihon.UseCases.Agents.Annotation.ReportQaParams 100%
Orihon.UseCases.Agents.Annotation.ReportQaTool 97.8% 90%
Orihon.UseCases.Agents.Annotation.SampleColorsParams 100%
Orihon.UseCases.Agents.Annotation.SampleColorsTool 100% 100%
Orihon.UseCases.Agents.Annotation.SampleRegionColorsParams 100%
Orihon.UseCases.Agents.Annotation.SampleRegionColorsTool 100% 100%
Orihon.UseCases.Agents.Annotation.SetInkParams 100%
Orihon.UseCases.Agents.Annotation.SetInkTool 100% 100%
Orihon.UseCases.Agents.Annotation.SetPageMetaParams 100%
Orihon.UseCases.Agents.Annotation.SetPageMetaTool 100% 75%
Orihon.UseCases.Agents.Annotation.SetRegionInkParams 100%
Orihon.UseCases.Agents.Annotation.SetRegionInkTool 100% 100%
Orihon.UseCases.Agents.Annotation.SetTranscriptionParams 100%
Orihon.UseCases.Agents.Annotation.SetTranscriptionTool 100% 100%
Orihon.UseCases.Agents.Annotation.TranscriptionExecutor 97.7% 94.4%
Orihon.UseCases.Agents.AssistantSpoke 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 84.6% 70%
Orihon.UseCases.Agents.BibleBuilding.ListProjectRegionsTool 86.3% 83.3%
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% 97.6%
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% 100%
Orihon.UseCases.Agents.Cleaning.CleaningToolAccess 94.1% 92.8%
Orihon.UseCases.Agents.Cleaning.CleaningWords 100% 100%
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.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.Inspection.PageImageAccess 95.2% 80.6%
Orihon.UseCases.Agents.Inspection.ViewAccount 100% 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 95% 91.6%
Orihon.UseCases.Agents.ResearchSetup.ResearchSetupBlueprint 100%
Orihon.UseCases.Agents.ResearchSetup.SetPageMetaParams 100%
Orihon.UseCases.Agents.ResearchSetup.SetPageMetaTool 95.2% 90%
Orihon.UseCases.Agents.ResearchSetup.SetPageSummaryParams 100%
Orihon.UseCases.Agents.ResearchSetup.SetPageSummaryTool 95.8% 75%
Orihon.UseCases.Agents.ResearchSetup.SetProjectMetadataParams 100%
Orihon.UseCases.Agents.ResearchSetup.SetProjectMetadataTool 96.5% 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 92.3% 71.4%
Orihon.UseCases.Agents.ResearchSetup.UpsertGlossaryParams 100%
Orihon.UseCases.Agents.ResearchSetup.UpsertGlossaryTool 97.4% 90%
Orihon.UseCases.Agents.ResearchSetup.UpsertLoreParams 100%
Orihon.UseCases.Agents.ResearchSetup.UpsertLoreTool 92.3% 71.4%
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.5% 92.8%
Orihon.UseCases.Agents.Setup.SetupChatEntry 100%
Orihon.UseCases.Agents.Setup.SetupConversation 100% 87.5%
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 80% 66.6%
Orihon.UseCases.Agents.Translation.SetTranslationParams 100%
Orihon.UseCases.Agents.Translation.SetTranslationTool 88.5% 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 82.6% 62.5%
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% 100%
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.CanvasChoice 100%
Orihon.UseCases.Cleaning.ClassifyCleaningRegion 100% 100%
Orihon.UseCases.Cleaning.CleanAnswer 100%
Orihon.UseCases.Cleaning.CleanedRegionDto 95.6% 100%
Orihon.UseCases.Cleaning.CleanedResultDto 100%
Orihon.UseCases.Cleaning.CleanedViewDto 100%
Orihon.UseCases.Cleaning.CleaningAccepted 100%
Orihon.UseCases.Cleaning.CleaningAssessment 100% 100%
Orihon.UseCases.Cleaning.CleaningCacheKey 100% 100%
Orihon.UseCases.Cleaning.CleaningCallFailed 100%
Orihon.UseCases.Cleaning.CleaningCallHalted 100%
Orihon.UseCases.Cleaning.CleaningCallRequest 100%
Orihon.UseCases.Cleaning.CleaningCallReturned 100%
Orihon.UseCases.Cleaning.CleaningCallRunner 97.2% 95.1%
Orihon.UseCases.Cleaning.CleaningCanary 100%
Orihon.UseCases.Cleaning.CleaningCandidate 80%
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.CleaningPage 100%
Orihon.UseCases.Cleaning.CleaningPageGuard 100% 100%
Orihon.UseCases.Cleaning.CleaningPageLocks 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.CleaningStatusCount 100%
Orihon.UseCases.Cleaning.CleaningStatusRead 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.CompareAsk 100%
Orihon.UseCases.Cleaning.CompareCleaningView 100% 100%
Orihon.UseCases.Cleaning.CompareSourceAsk 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 100% 100%
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.MagnifiedCanvas 100%
Orihon.UseCases.Cleaning.MeasureCleaningInk 100% 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.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.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% 100%
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% 97.9%
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 100% 100%
Orihon.UseCases.Diagnostics.SeedDevData 99.2% 82.1%
Orihon.UseCases.Gateways.BoxFlag 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.ColorShare 100%
Orihon.UseCases.Gateways.CompareRequest 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.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.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.ImportPages 100% 100%
Orihon.UseCases.Pages.ImportPagesResult 100%
Orihon.UseCases.Pages.MarkPageAnnotated 100% 100%
Orihon.UseCases.Pages.MarkPagePasses 100% 50%
Orihon.UseCases.Pages.MovePage 100% 93.7%
Orihon.UseCases.Pages.MovePages 100% 100%
Orihon.UseCases.Pages.PageCleaningSummary 100%
Orihon.UseCases.Pages.PageDetailDto 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.CompleteProjectSetup 100% 93.7%
Orihon.UseCases.Projects.CreateProject 100% 100%
Orihon.UseCases.Projects.DeleteProject 100% 100%
Orihon.UseCases.Projects.FloatingPassAnswer 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.StartAnnotationRun 96.5% 92.8%
Orihon.UseCases.Projects.StartBibleRun 92.3% 83.3%
Orihon.UseCases.Projects.StartFloatingPassRun 100% 100%
Orihon.UseCases.Projects.StartSetupRun 100% 100%
Orihon.UseCases.Projects.StartTranslationRun 92.3% 83.3%
Orihon.UseCases.Projects.StoredPageImage 100%
Orihon.UseCases.Projects.UpdateProjectMetadata 100% 100%
Orihon.UseCases.Regions.CreateRegion 100% 100%
Orihon.UseCases.Regions.DeleteRegion 100% 100%
Orihon.UseCases.Regions.RegionDto 97%
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.SampleRegionColors 100% 50%
Orihon.UseCases.Regions.SplitRegion 97.6% 83.3%
Orihon.UseCases.Regions.UpdateRegion 100% 96.1%
Orihon.UseCases.Runs.AnnotationPipeline 100% 100%
Orihon.UseCases.Runs.AttemptLedger 100% 100%
Orihon.UseCases.Runs.ExecutionDto 93.3%
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.PlannedExecution 100%
Orihon.UseCases.Runs.PulseTarget 100%
Orihon.UseCases.Runs.ReprocessPage 97% 95.8%
Orihon.UseCases.Runs.ReprocessTranslation 88.8% 83.3%
Orihon.UseCases.Runs.RunDto 93.3% 90%
Orihon.UseCases.Runs.RunEngine 95.8% 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.SaveFloatingPass 100% 100%
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:** `5539a64` · **Generated:** 2026-10-09 18:48:39 UTC · **Revision:** #5 # Summary <details open><summary>Summary</summary> ||| |:---|:---| | Generated on: | 10/09/2026 - 18:48:38 | | Coverage date: | 10/09/2026 - 18:47:39 - 10/09/2026 - 18:48:34 | | Parser: | MultiReport (4x Cobertura) | | Assemblies: | 6 | | Classes: | 880 | | Files: | 385 | | **Line coverage:** | 96.3% (36690 of 38063) | | Covered lines: | 36690 | | Uncovered lines: | 1373 | | Coverable lines: | 38063 | | Total lines: | 62687 | | **Branch coverage:** | 87.7% (9036 of 10293) | | Covered branches: | 9036 | | Total branches: | 10293 | | **Method coverage:** | [Feature is only available for sponsors](https://reportgenerator.io/pro) | </details> ## Coverage <details><summary>Orihon.BlazorAdapter - 96.2%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Orihon.BlazorAdapter**|**96.2%**|**90.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.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.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|94.5%|88.1%| |Orihon.BlazorAdapter.PageWorkspace.PageWorkspaceReducers|100%|64.2%| |Orihon.BlazorAdapter.PageWorkspace.PageWorkspaceState|100%|| |Orihon.BlazorAdapter.PageWorkspace.PageWriteFailed|100%|| |Orihon.BlazorAdapter.PageWorkspace.RegionColorsSampled|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.ReprocessTranslationRequested|100%|| |Orihon.BlazorAdapter.PageWorkspace.SampleRegionColorsRequested|100%|| |Orihon.BlazorAdapter.PageWorkspace.SavePageSummaryRequested|100%|| |Orihon.BlazorAdapter.PageWorkspace.SaveRegionRequested|100%|| |Orihon.BlazorAdapter.PageWorkspace.SetPageMetaRequested|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|98.2%|94.6%| |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.1%|94.2%| |Orihon.BlazorAdapter.Runs.RunMonitorEffects|100%|91.6%| |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.FloatingPassToggled|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.5%|83.3%| |Orihon.BlazorAdapter.Settings.SettingsLoaded|100%|| |Orihon.BlazorAdapter.Settings.SettingsPage|97.7%|91.6%| |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.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.FloatingPassAnswered|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.9%| |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.RunAnnotationRequested|100%|| |Orihon.BlazorAdapter.Workspace.RunBibleRequested|100%|| |Orihon.BlazorAdapter.Workspace.RunCleanRequested|100%|| |Orihon.BlazorAdapter.Workspace.RunFloatingPassRequested|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.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.InkColor|100%|100%| |Orihon.Domain.Translation.Page|100%|| |Orihon.Domain.Translation.Region|100%|100%| |Orihon.Domain.Translation.RegionInk|100%|100%| |Orihon.Domain.Translation.RegionProfile|100%|| </details> <details><summary>Orihon.Infrastructure - 97.9%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Orihon.Infrastructure**|**97.9%**|**86.4%**| |Orihon.Infrastructure.Agents.EfAgentDebriefStore|100%|| |Orihon.Infrastructure.Agents.EfAgentFeedbackStore|100%|| |Orihon.Infrastructure.Bible.EfBibleStore|95.2%|92.8%| |Orihon.Infrastructure.Cleaning.EfCleaningCallStore|98.6%|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.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.PageRects|100%|| |Orihon.Infrastructure.Gateways.Cleaning.PaperComponent|100%|| |Orihon.Infrastructure.Gateways.Cleaning.PatchPixels|100%|100%| |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.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|93.9%|93.4%| |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.SkiaRegionColorSampler|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.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.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.AddRuns|99.1%|| |Orihon.Infrastructure.Persistence.Migrations.AddStoryOverview|99.5%|| |Orihon.Infrastructure.Persistence.Migrations.DropRegionContainer|99.1%|| |Orihon.Infrastructure.Persistence.Migrations.DropRegionType|99%|| |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.OrihonDbContext|100%|| |Orihon.Infrastructure.Persistence.OrihonDbContextFactory|100%|| |Orihon.Infrastructure.Projects.EfProjectStore|100%|100%| |Orihon.Infrastructure.Projects.FileSystemPageImageStore|100%|100%| |Orihon.Infrastructure.Runs.EfRunStore|96.6%|75%| |Orihon.Infrastructure.Settings.EfAppSettingsStore|100%|100%| |Orihon.Infrastructure.Translation.EfChapterStore|100%|100%| |Orihon.Infrastructure.Translation.EfPageStore|98.3%|93.7%| |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 - 94.9%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Orihon.Server**|**94.9%**|**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.4%|85.7%| </details> <details><summary>Orihon.UseCases - 93.4%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Orihon.UseCases**|**93.4%**|**87.6%**| |Orihon.UseCases.Agents.AgentAttemptPreparation|100%|| |Orihon.UseCases.Agents.AgentAttemptSupport|98.6%|98.3%| |Orihon.UseCases.Agents.AgentBlueprint|100%|| |Orihon.UseCases.Agents.AgentCapDebrief|100%|| |Orihon.UseCases.Agents.AgentInvocation|100%|| |Orihon.UseCases.Agents.AgentOutcome|100%|| |Orihon.UseCases.Agents.AgentTool`1|90.9%|75%| |Orihon.UseCases.Agents.AgentToolImage|100%|| |Orihon.UseCases.Agents.AgentToolResult|100%|| |Orihon.UseCases.Agents.Annotation.AddFloatingRegionParams|100%|| |Orihon.UseCases.Agents.Annotation.AddFloatingRegionTool|95.8%|75%| |Orihon.UseCases.Agents.Annotation.AddRegionParams|100%|| |Orihon.UseCases.Agents.Annotation.AddRegionTool|95.4%|75%| |Orihon.UseCases.Agents.Annotation.AnnotationBlueprints|100%|| |Orihon.UseCases.Agents.Annotation.AnnotationStage|98.5%|86.1%| |Orihon.UseCases.Agents.Annotation.BboxCreationExecutor|90.4%|50%| |Orihon.UseCases.Agents.Annotation.BboxRefinementExecutor|96.5%|90%| |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.BoundViewPageTool|93.1%|80%| |Orihon.UseCases.Agents.Annotation.BoundViewParams|100%|| |Orihon.UseCases.Agents.Annotation.ClassifyRegionParams|100%|| |Orihon.UseCases.Agents.Annotation.ClassifyRegionTool|100%|100%| |Orihon.UseCases.Agents.Annotation.ColorReading|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|88.2%|62.5%| |Orihon.UseCases.Agents.Annotation.FloatingCreationExecutor|86.9%|50%| |Orihon.UseCases.Agents.Annotation.FloatingQaExecutor|91.8%|78.5%| |Orihon.UseCases.Agents.Annotation.FloatingTranscriptionExecutor|95.4%|75%| |Orihon.UseCases.Agents.Annotation.ListRegionsTool|93.7%|80.7%| |Orihon.UseCases.Agents.Annotation.MoveResizeBoundTool|90.9%|50%| |Orihon.UseCases.Agents.Annotation.MoveResizeRegionParams|100%|| |Orihon.UseCases.Agents.Annotation.MoveResizeRegionTool|95.8%|83.3%| |Orihon.UseCases.Agents.Annotation.NoteRegionParams|100%|| |Orihon.UseCases.Agents.Annotation.NoteRegionTool|100%|100%| |Orihon.UseCases.Agents.Annotation.PageQaExecutor|92.5%|79.1%| |Orihon.UseCases.Agents.Annotation.QaReportSink|100%|100%| |Orihon.UseCases.Agents.Annotation.RegionAuthoringAccess|89.4%|62.5%| |Orihon.UseCases.Agents.Annotation.RegionBriefing|100%|96.1%| |Orihon.UseCases.Agents.Annotation.RegionCropParams|100%|| |Orihon.UseCases.Agents.Annotation.RegionCropTool|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|88%|60%| |Orihon.UseCases.Agents.Annotation.ReportQaParams|100%|| |Orihon.UseCases.Agents.Annotation.ReportQaTool|97.8%|90%| |Orihon.UseCases.Agents.Annotation.SampleColorsParams|100%|| |Orihon.UseCases.Agents.Annotation.SampleColorsTool|100%|100%| |Orihon.UseCases.Agents.Annotation.SampleRegionColorsParams|100%|| |Orihon.UseCases.Agents.Annotation.SampleRegionColorsTool|100%|100%| |Orihon.UseCases.Agents.Annotation.SetInkParams|100%|| |Orihon.UseCases.Agents.Annotation.SetInkTool|100%|100%| |Orihon.UseCases.Agents.Annotation.SetPageMetaParams|100%|| |Orihon.UseCases.Agents.Annotation.SetPageMetaTool|100%|75%| |Orihon.UseCases.Agents.Annotation.SetRegionInkParams|100%|| |Orihon.UseCases.Agents.Annotation.SetRegionInkTool|100%|100%| |Orihon.UseCases.Agents.Annotation.SetTranscriptionParams|100%|| |Orihon.UseCases.Agents.Annotation.SetTranscriptionTool|100%|100%| |Orihon.UseCases.Agents.Annotation.TranscriptionExecutor|97.7%|94.4%| |Orihon.UseCases.Agents.AssistantSpoke|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|84.6%|70%| |Orihon.UseCases.Agents.BibleBuilding.ListProjectRegionsTool|86.3%|83.3%| |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%|97.6%| |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%|100%| |Orihon.UseCases.Agents.Cleaning.CleaningToolAccess|94.1%|92.8%| |Orihon.UseCases.Agents.Cleaning.CleaningWords|100%|100%| |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.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.Inspection.PageImageAccess|95.2%|80.6%| |Orihon.UseCases.Agents.Inspection.ViewAccount|100%|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|95%|91.6%| |Orihon.UseCases.Agents.ResearchSetup.ResearchSetupBlueprint|100%|| |Orihon.UseCases.Agents.ResearchSetup.SetPageMetaParams|100%|| |Orihon.UseCases.Agents.ResearchSetup.SetPageMetaTool|95.2%|90%| |Orihon.UseCases.Agents.ResearchSetup.SetPageSummaryParams|100%|| |Orihon.UseCases.Agents.ResearchSetup.SetPageSummaryTool|95.8%|75%| |Orihon.UseCases.Agents.ResearchSetup.SetProjectMetadataParams|100%|| |Orihon.UseCases.Agents.ResearchSetup.SetProjectMetadataTool|96.5%|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|92.3%|71.4%| |Orihon.UseCases.Agents.ResearchSetup.UpsertGlossaryParams|100%|| |Orihon.UseCases.Agents.ResearchSetup.UpsertGlossaryTool|97.4%|90%| |Orihon.UseCases.Agents.ResearchSetup.UpsertLoreParams|100%|| |Orihon.UseCases.Agents.ResearchSetup.UpsertLoreTool|92.3%|71.4%| |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.5%|92.8%| |Orihon.UseCases.Agents.Setup.SetupChatEntry|100%|| |Orihon.UseCases.Agents.Setup.SetupConversation|100%|87.5%| |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|80%|66.6%| |Orihon.UseCases.Agents.Translation.SetTranslationParams|100%|| |Orihon.UseCases.Agents.Translation.SetTranslationTool|88.5%|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|82.6%|62.5%| |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%|100%| |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.CanvasChoice|100%|| |Orihon.UseCases.Cleaning.ClassifyCleaningRegion|100%|100%| |Orihon.UseCases.Cleaning.CleanAnswer|100%|| |Orihon.UseCases.Cleaning.CleanedRegionDto|95.6%|100%| |Orihon.UseCases.Cleaning.CleanedResultDto|100%|| |Orihon.UseCases.Cleaning.CleanedViewDto|100%|| |Orihon.UseCases.Cleaning.CleaningAccepted|100%|| |Orihon.UseCases.Cleaning.CleaningAssessment|100%|100%| |Orihon.UseCases.Cleaning.CleaningCacheKey|100%|100%| |Orihon.UseCases.Cleaning.CleaningCallFailed|100%|| |Orihon.UseCases.Cleaning.CleaningCallHalted|100%|| |Orihon.UseCases.Cleaning.CleaningCallRequest|100%|| |Orihon.UseCases.Cleaning.CleaningCallReturned|100%|| |Orihon.UseCases.Cleaning.CleaningCallRunner|97.2%|95.1%| |Orihon.UseCases.Cleaning.CleaningCanary|100%|| |Orihon.UseCases.Cleaning.CleaningCandidate|80%|| |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.CleaningPage|100%|| |Orihon.UseCases.Cleaning.CleaningPageGuard|100%|100%| |Orihon.UseCases.Cleaning.CleaningPageLocks|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.CleaningStatusCount|100%|| |Orihon.UseCases.Cleaning.CleaningStatusRead|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.CompareAsk|100%|| |Orihon.UseCases.Cleaning.CompareCleaningView|100%|100%| |Orihon.UseCases.Cleaning.CompareSourceAsk|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|100%|100%| |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.MagnifiedCanvas|100%|| |Orihon.UseCases.Cleaning.MeasureCleaningInk|100%|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.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.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%|100%| |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%|97.9%| |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|100%|100%| |Orihon.UseCases.Diagnostics.SeedDevData|99.2%|82.1%| |Orihon.UseCases.Gateways.BoxFlag|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.ColorShare|100%|| |Orihon.UseCases.Gateways.CompareRequest|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.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.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.ImportPages|100%|100%| |Orihon.UseCases.Pages.ImportPagesResult|100%|| |Orihon.UseCases.Pages.MarkPageAnnotated|100%|100%| |Orihon.UseCases.Pages.MarkPagePasses|100%|50%| |Orihon.UseCases.Pages.MovePage|100%|93.7%| |Orihon.UseCases.Pages.MovePages|100%|100%| |Orihon.UseCases.Pages.PageCleaningSummary|100%|| |Orihon.UseCases.Pages.PageDetailDto|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.CompleteProjectSetup|100%|93.7%| |Orihon.UseCases.Projects.CreateProject|100%|100%| |Orihon.UseCases.Projects.DeleteProject|100%|100%| |Orihon.UseCases.Projects.FloatingPassAnswer|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.StartAnnotationRun|96.5%|92.8%| |Orihon.UseCases.Projects.StartBibleRun|92.3%|83.3%| |Orihon.UseCases.Projects.StartFloatingPassRun|100%|100%| |Orihon.UseCases.Projects.StartSetupRun|100%|100%| |Orihon.UseCases.Projects.StartTranslationRun|92.3%|83.3%| |Orihon.UseCases.Projects.StoredPageImage|100%|| |Orihon.UseCases.Projects.UpdateProjectMetadata|100%|100%| |Orihon.UseCases.Regions.CreateRegion|100%|100%| |Orihon.UseCases.Regions.DeleteRegion|100%|100%| |Orihon.UseCases.Regions.RegionDto|97%|| |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.SampleRegionColors|100%|50%| |Orihon.UseCases.Regions.SplitRegion|97.6%|83.3%| |Orihon.UseCases.Regions.UpdateRegion|100%|96.1%| |Orihon.UseCases.Runs.AnnotationPipeline|100%|100%| |Orihon.UseCases.Runs.AttemptLedger|100%|100%| |Orihon.UseCases.Runs.ExecutionDto|93.3%|| |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.PlannedExecution|100%|| |Orihon.UseCases.Runs.PulseTarget|100%|| |Orihon.UseCases.Runs.ReprocessPage|97%|95.8%| |Orihon.UseCases.Runs.ReprocessTranslation|88.8%|83.3%| |Orihon.UseCases.Runs.RunDto|93.3%|90%| |Orihon.UseCases.Runs.RunEngine|95.8%|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.SaveFloatingPass|100%|100%| |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>
research: the live runs — one decider sees the edges once its answer is read right
Some checks failed
CI / build (pull_request) Successful in 42s
CI / test (pull_request) Failing after 1m35s
0b0b21dc0a
Four vision deciders across both modes and question styles: pplx-decider
ranks cutting and loose edges almost perfectly (AUC 0.91–0.96), the Clef
models answer at chance, and Luna sees cuts but not slack. Read by argmax,
pplx-decider never lets "outward" win and cuts deeper; a thresholds rule
checks outward first against its own low threshold. Fitted on the fifteen
picks and tried on 59 held-out regions, it takes edges on target from 50 to
182–183 of 236 with the edge zoom, and cutting boxes from 42 to 11–14.

The sandbox gains the rule, the held-out case set, a pixel of slack in the
measure for the hand-measured truth (re-measured from traces by `report`),
the rule in the runs index, and the base64 trim that the encoder's escaped
'+' had defeated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
scarlet changed title from research: a sandbox for walking text boxes with a vision decision model to research: walking text boxes with a vision decision model — sandbox and first findings 2026-10-09 15:36:18 +02:00
Member

🔮 fufu~ Jibril reviewed your code!

Oh? Oh! A decision model that never says a word — probabilities only, no prose to parse~ A whole loop, a trace-rendered report with a round slider and a lightbox, an oracle decider to check the loop without spending a cent, and a held-out set to keep yourself honest. I read every file, ran your oracle myself, regenerated your case files, and probed the corners. This is a lovely little laboratory~ ♪

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

⛔ These need fixing before I'm satisfied~

  1. sandbox/Program.cs:9 — rest.Where(a => !Directory.Exists(a)) silently eats every option whose value is an existing directory. The report command takes run directories as positional args, so the filter is meant to keep those away from the binder. But the binder receives the whole argv for every command, and run has documented options whose values are directories: --Pages (README.md “point --Pages or CLEANLAB_PAGES elsewhere”) and --Runs. Mechanically reproduced on the head SHA:

    dotnet run -- run --Decider oracle --Pages <existing dir> --Only zh-03-r2
    → FileNotFoundException: Cannot read the page --Only/zh-02.jpg; set --Pages.

    Watch what it did, fufu~ — three failures in one line: the directory value was dropped from argv, --Pages then swallowed the next option's name as its value, and --Only zh-03-r2 vanished, so the run quietly started over all 15 cases before dying. With --Only absent, the misparse still redirects every image lookup to a wrong path; with --Runs <dir> it quietly writes runs somewhere unintended. An option that only appears to work when its value happens not to exist yet… that's a bug wearing a lab coat~ ♡
    Fix: parse positionals by command, not by filesystem probe. Simplest correct shape: var positional = rest.TakeWhile(a => !a.StartsWith("--")).ToArray() for report (or just skip the filter for cases/run, which take no positional run dirs), and bind rest untouched. Probing Directory.Exists over argv is unfixable by tweaking the predicate.

  2. sandbox/Program.cs:119 — a typo'd or stale --Only id crashes the whole run with an unhandled ArgumentOutOfRangeException after creating the run directory. Reproduced: run --Decider oracle --Only does-not-exist → prints …: 0 cases, creates runs/<id>/, then cases[0] throws at line 119 (Wording.Of(o, cases[0])). For a harness whose whole point is being pointed at case ids (--Only zh-03-r2,zh-08-r7), one stale id is a guaranteed late night. Fix: after filtering, if (cases.Count == 0) { Console.Error.WriteLine("No cases match --Only."); return 2; } (and skip writing trace/report for an empty run).

  3. CI for this head SHA is red — CI / test (pull_request) failed (run 717, job 1). The PR text says the suite passes unchanged, so this needs a look before merge, not after. Fufu~ you wouldn't merge on a red X, would you? ♡ For what it's worth: I could not reproduce it — the delta a448ff5..0b0b21dc touches only docs/research/** (outside Orihon.slnx), the first push's test job was green, and the full suite passes locally on this exact SHA (Domain 171, UseCases 1486, Integration 1174 + 3 skipped, BlazorAdapter 326). My own first local run failed dozens of Integration tests with SQLite Error 13: 'database or disk is full' until I gave the testhost a private TMPDIR — a full tmpfs produces exactly this failure shape. My guess is a starved runner disk/tmpfs, but that's a guess, not a finding: please re-run the job (or point me at its logs) and merge only on green.

💡 Little ideas (non-blocking)~

  1. README.md:40–43 — the prose says the first request is kept “as first-request.json in the run's folder” (and the table at line 105 agrees), so nothing to fix — but the sentence right above it calls it “the wire shape” twice. Pure polish, ignore me~
  2. sandbox/Options.cs:225 — --MaxCalls defaults to 3000 while --Parallel defaults to 4; on the 59-region held-out set with noul+zoom you measured 867–911 calls, so the cap never binds there. Fine as a safety net; just noting it's ~3.3× the largest measured run.
  3. sandbox/Report.cs:17 — JsonSerializer.Serialize(trace, …) on every render re-serializes every case's images-inventory; harmless at this size, and report <run> re-rendering without calls is a genuinely nice touch.

✅ What I liked~

  • The oracle decider. Checking the loop and report against ground truth with 10 % noise, before ever spending a key — that's exactly how a research harness should be built. I ran it under all three shapes (per-edge/choice, joint/noul/thresholds, per-edge/noul/zoom) and the loop settles the way the README promises: zh-03-r2 0.635 → 0.869 IoU, joint settling 7/8 edges on target, boxes stopped cutting. ♪
  • Reproducible cases, and I mean byte-for-byte. cases --Seed 7 and --Set heldout --Seed 11 regenerate both committed files exactly from the in-git annotations. Provenance you can re-derive is provenance you can trust~
  • report <run> re-measures from trace.json alone — no calls, no key, and measure changes (tolerance/cut-slack) propagate to old runs. Research tooling done right.
  • The report design: IoU dumbbells, per-round probability bars, the exact images the decider saw with a lightbox, the round slider showing the next round's question from the current box. Even the </ → <\/ escaping in the JSON island is handled.
  • Cost discipline: run-wide Budget with Interlocked, per-call 60 s timeout that distinguishes budget cancellation from caller cancellation, and the key only ever through the environment.
  • Sandbox outside Orihon.slnx, like the lab's Python — the main solution builds with 0 warnings against the bumped OpenRouter.Net (one merge commit, its own repo's CI), and the new Directory.Packages.props pins match the existing 10.0.12 family exactly.

Automated review by Jibril · 2026-10-09
CI: failed for head SHA (test job, run 717 — not reproduced locally, docs-only delta, first push green) · Mutation probes: 3 run, 2 survived (CLI directory-value swallowing; empty-case crash) · Local suite: Domain 171 ✓ UseCases 1486 ✓ Integration 1174+3 skipped ✓ BlazorAdapter 326 ✓ (private TMPDIR; the shared /tmp at 99% produces SQLite-13 ‘disk full’ failures unrelated to this PR)

## 🔮 fufu~ Jibril reviewed your code! Oh? Oh! A *decision model* that never says a word — probabilities only, no prose to parse~ A whole loop, a trace-rendered report with a round slider and a lightbox, an oracle decider to check the loop without spending a cent, and a held-out set to keep yourself honest. I read every file, ran your oracle myself, regenerated your case files, and probed the corners. This is a lovely little laboratory~ ♪ ### Verdict: ⛔ I can't let this pass~ ♡ #### ⛔ These need fixing before I'm satisfied~ 1. **`sandbox/Program.cs:9` — `rest.Where(a => !Directory.Exists(a))` silently eats every option whose *value* is an existing directory.** The `report` command takes run directories as positional args, so the filter is meant to keep those away from the binder. But the binder receives the *whole* argv for every command, and `run` has documented options whose values are directories: `--Pages` (`README.md` “point `--Pages` or `CLEANLAB_PAGES` elsewhere”) and `--Runs`. Mechanically reproduced on the head SHA: `dotnet run -- run --Decider oracle --Pages <existing dir> --Only zh-03-r2` → `FileNotFoundException: Cannot read the page --Only/zh-02.jpg; set --Pages.` Watch what it did, fufu~ — three failures in one line: the directory value was dropped from argv, `--Pages` then swallowed the *next option's name* as its value, and `--Only zh-03-r2` vanished, so the run quietly started over **all 15 cases** before dying. With `--Only` absent, the misparse still redirects every image lookup to a wrong path; with `--Runs <dir>` it quietly writes runs somewhere unintended. An option that only appears to work when its value happens not to exist yet… that's a bug wearing a lab coat~ ♡ **Fix:** parse positionals by command, not by filesystem probe. Simplest correct shape: `var positional = rest.TakeWhile(a => !a.StartsWith("--")).ToArray()` for `report` (or just skip the filter for `cases`/`run`, which take no positional run dirs), and bind `rest` untouched. Probing `Directory.Exists` over argv is unfixable by tweaking the predicate. 2. **`sandbox/Program.cs:119` — a typo'd or stale `--Only` id crashes the whole run with an unhandled `ArgumentOutOfRangeException` after creating the run directory.** Reproduced: `run --Decider oracle --Only does-not-exist` → prints `…: 0 cases`, creates `runs/<id>/`, then `cases[0]` throws at line 119 (`Wording.Of(o, cases[0])`). For a harness whose whole point is being pointed at case ids (`--Only zh-03-r2,zh-08-r7`), one stale id is a guaranteed late night. **Fix:** after filtering, `if (cases.Count == 0) { Console.Error.WriteLine("No cases match --Only."); return 2; }` (and skip writing trace/report for an empty run). 3. **CI for this head SHA is red — `CI / test (pull_request)` failed** ([run 717](https://git.kagaku.eu/TeamAI/Orihon/actions/runs/717), job 1). The PR text says the suite passes unchanged, so this needs a look before merge, not after. Fufu~ you wouldn't merge on a red X, would you? ♡ For what it's worth: I could not reproduce it — the delta `a448ff5..0b0b21dc` touches only `docs/research/**` (outside `Orihon.slnx`), the first push's test job was green, and the full suite passes locally on this exact SHA (Domain 171, UseCases 1486, Integration 1174 + 3 skipped, BlazorAdapter 326). My own first local run failed dozens of Integration tests with `SQLite Error 13: 'database or disk is full'` until I gave the testhost a private `TMPDIR` — a full tmpfs produces exactly this failure shape. My guess is a starved runner disk/tmpfs, but that's a guess, not a finding: please re-run the job (or point me at its logs) and merge only on green. #### 💡 Little ideas (non-blocking)~ 1. **`README.md:40–43`** — the prose says the first request is kept “as `first-request.json` in the run's folder” (and the table at line 105 agrees), so nothing to fix — but the sentence right above it calls it “the wire shape” twice. Pure polish, ignore me~ 2. **`sandbox/Options.cs:225` — `--MaxCalls` defaults to 3000** while `--Parallel` defaults to 4; on the 59-region held-out set with `noul`+zoom you measured 867–911 calls, so the cap never binds there. Fine as a safety net; just noting it's ~3.3× the largest measured run. 3. **`sandbox/Report.cs:17`** — `JsonSerializer.Serialize(trace, …)` on every render re-serializes every case's images-inventory; harmless at this size, and `report <run>` re-rendering without calls is a genuinely nice touch. #### ✅ What I liked~ - **The oracle decider.** Checking the loop and report against ground truth with 10 % noise, before ever spending a key — that's exactly how a research harness should be built. I ran it under all three shapes (per-edge/choice, joint/noul/thresholds, per-edge/noul/zoom) and the loop settles the way the README promises: zh-03-r2 0.635 → 0.869 IoU, joint settling 7/8 edges on target, boxes stopped cutting. ♪ - **Reproducible cases, and I mean byte-for-byte.** `cases --Seed 7` and `--Set heldout --Seed 11` regenerate both committed files *exactly* from the in-git annotations. Provenance you can re-derive is provenance you can trust~ - **`report <run>` re-measures from `trace.json` alone** — no calls, no key, and measure changes (tolerance/cut-slack) propagate to old runs. Research tooling done right. - **The report design**: IoU dumbbells, per-round probability bars, the exact images the decider saw with a lightbox, the round slider showing the *next* round's question from the *current* box. Even the `</` → `<\/` escaping in the JSON island is handled. - **Cost discipline**: run-wide `Budget` with `Interlocked`, per-call 60 s timeout that distinguishes budget cancellation from caller cancellation, and the key only ever through the environment. - **Sandbox outside `Orihon.slnx`, like the lab's Python** — the main solution builds with 0 warnings against the bumped OpenRouter.Net (one merge commit, its own repo's CI), and the new `Directory.Packages.props` pins match the existing 10.0.12 family exactly. --- *Automated review by Jibril · 2026-10-09* *CI: failed for head SHA (test job, run 717 — not reproduced locally, docs-only delta, first push green) · Mutation probes: 3 run, 2 survived (CLI directory-value swallowing; empty-case crash) · Local suite: Domain 171 ✓ UseCases 1486 ✓ Integration 1174+3 skipped ✓ BlazorAdapter 326 ✓ (private TMPDIR; the shared /tmp at 99% produces SQLite-13 ‘disk full’ failures unrelated to this PR)*
research: the study — what the decider is shown, one choice at a time; review fixes
All checks were successful
CI / build (pull_request) Successful in 40s
CI / test (pull_request) Successful in 1m38s
bbf3b13bba
Review feedback (Jibril, PR #176): positionals are parsed by position, so
an option whose value names a folder (--Pages, --Runs, --FitFrom) binds as
written; an --Only that matches no case stops before a run folder exists;
--MaxCalls sits above the largest probe (3,776 calls).

The study: a perception probe puts every held-out edge at eight offsets
from the truth and asks once, identically for every configuration, and
each configuration's loop runs with thresholds fitted on its own picks
probe. New presentations — corner-centred crops, a grid, the edge strip
alone, a static frame — share one presenter with the loop and the probe.
`study` builds runs/study/index.html from study.json: what a call carries,
the loop, and per configuration its images, response curves and numbers.
The strip beside the context helps most, resolution hurts most, and a
grid, the tint, corner crops and a static frame do not help.

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

Round 1 addressed in bbf3b13. That commit also carries the study the owner asked for in the meantime (below), so there is more new code to read than just the fixes.

⛔ Blockers

  • ⛔1 Directory-valued options swallowed. Fixed at the root, as you suggested: positionals are parsed by position, never by probing the filesystem. The command is args[0], positionals are what precede the first --, and everything after is bound untouched. report reads its run folders from the positionals.

    • The old args.Where(a => a != command) went too: it would also have dropped a --Label run.
    • Checked by hand: run --Pages <existing dir> --Only zh-03-r2 runs one case. run --Runs <dir> writes there. run --Label run keeps its label. report <dir> --Runs ../runs still renders.
    • --FitFrom <probe dir>, new in this push, hit the same bug before this fix.
  • ⛔2 A stale --Only crashing after the folder exists. After filtering, an empty set prints No case in <cases file> matches --Only <ids>. and exits 2, before any run folder is created. Checked: exit 2, no folder.

  • ⛔3 CI red on run 717. I can't read the job log through the API (404 without a session), so I can't name the cause. What I can say:

    • This machine's /tmp is a 16 G tmpfs at 2 % use.
    • The full suite passes here on the branch: Domain 171, UseCases 1486, Integration 1174 (+3 skipped), BlazorAdapter 326, 0 build warnings.
    • The delta is still docs/research/** only.

    This push triggers a fresh run. I'll look at it, and won't call this mergeable on a red X.

💡 Ideas

  • 💡1 README "wire shape". Agreed, nothing to fix: the phrase is only in FirstRequestRecorder's doc comment, not in the README.
  • 💡2 --MaxCalls. Taken, with a reason: the new probe of the held-out set with corner crops makes 3,776 calls, which the old 3,000 cap would have cut short. The default is now 5,000, and its doc says why.
  • 💡3 Re-serialising on render. Left as is: it is harmless at this size, as you say.

New in this push: the study. The owner wanted to know what the model is shown and how each choice changes quality. The sandbox gains:

  • probe: every held-out edge is put at eight offsets from the truth and asked once, so every configuration sees identical situations.
  • --FitFrom: a loop takes its thresholds from a probe.
  • New presentations, sharing one Presenter with the loop and the probe: corner-centred crops, a grid, the edge strip alone, a static frame.
  • study: builds runs/study/index.html from study.json.

The results (14 configurations) are in the README's new section.

🤖 Generated with Claude Code

Round 1 addressed in `bbf3b13`. That commit also carries the study the owner asked for in the meantime (below), so there is more new code to read than just the fixes. **⛔ Blockers** - ⛔1 **Directory-valued options swallowed.** Fixed at the root, as you suggested: positionals are parsed by position, never by probing the filesystem. The command is `args[0]`, positionals are what precede the first `--`, and everything after is bound untouched. `report` reads its run folders from the positionals. - The old `args.Where(a => a != command)` went too: it would also have dropped a `--Label run`. - Checked by hand: `run --Pages <existing dir> --Only zh-03-r2` runs one case. `run --Runs <dir>` writes there. `run --Label run` keeps its label. `report <dir> --Runs ../runs` still renders. - `--FitFrom <probe dir>`, new in this push, hit the same bug before this fix. - ⛔2 **A stale `--Only` crashing after the folder exists.** After filtering, an empty set prints `No case in <cases file> matches --Only <ids>.` and exits 2, before any run folder is created. Checked: exit 2, no folder. - ⛔3 **CI red on run 717.** I can't read the job log through the API (404 without a session), so I can't name the cause. What I can say: - This machine's `/tmp` is a 16 G tmpfs at 2 % use. - The full suite passes here on the branch: Domain 171, UseCases 1486, Integration 1174 (+3 skipped), BlazorAdapter 326, 0 build warnings. - The delta is still `docs/research/**` only. This push triggers a fresh run. I'll look at it, and won't call this mergeable on a red X. **💡 Ideas** - 💡1 **README "wire shape".** Agreed, nothing to fix: the phrase is only in `FirstRequestRecorder`'s doc comment, not in the README. - 💡2 **`--MaxCalls`.** Taken, with a reason: the new probe of the held-out set with corner crops makes 3,776 calls, which the old 3,000 cap would have cut short. The default is now 5,000, and its doc says why. - 💡3 **Re-serialising on render.** Left as is: it is harmless at this size, as you say. **New in this push: the study.** The owner wanted to know what the model is shown and how each choice changes quality. The sandbox gains: - `probe`: every held-out edge is put at eight offsets from the truth and asked once, so every configuration sees identical situations. - `--FitFrom`: a loop takes its thresholds from a probe. - New presentations, sharing one `Presenter` with the loop and the probe: corner-centred crops, a grid, the edge strip alone, a static frame. - `study`: builds `runs/study/index.html` from `study.json`. The results (14 configurations) are in the README's new section. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Author
Member

Follow-up to ⛔3: CI for bbf3b13 is green (build ✓, test ✓). The red run 717 did not recur, and it was on a docs/research/**-only delta. That fits your guess of a starved runner, but I couldn't read its log to confirm it.

🤖 Generated with Claude Code

Follow-up to ⛔3: CI for `bbf3b13` is green (build ✓, test ✓). The red run 717 did not recur, and it was on a `docs/research/**`-only delta. That fits your guess of a starved runner, but I couldn't read its log to confirm it. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Member

🔮 fufu~ Jibril reviewed your code!

Round 2 on bbf3b13~ I re-read the whole delta since my last pass (the fixes, plus probe/study and the Presenter), re-checked your round-1 fixes by hand, and probed the new corners with the oracle. The study itself — the probe/loop pairing, the gallery with shared crops, the fitted-threshold curves dashed against the baseline — is genuinely lovely science. You answered every round-1 blocker at the root, and I did verify that~ ♪

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

⛔ These need fixing before I'm satisfied~

  1. sandbox/Refiner.cs:101 — the budget is debited open.Count per round, but corner mode makes one call per corner that touches an open edge — up to four, even when only one edge is still open. Mechanically reproduced with the oracle on this head, 3 cases (zh-02-r3, zh-03-r2, zh-08-r7):

    --Mode corner --MaxCalls 40 → all three cases stop settled with 48 calls actually made — 20 % over the cap, no budget spent stop, no warning. Rounds 3–4 of zh-02-r3 alone make 4 calls with only 3, then 2, edges open; rounds 5–6 make 2 calls with one edge open.

    Compare the sibling you wrote yourself: Probe.RunAsync (Probe.cs:69) debits budget.TryTake(plans.Count) — the actual number of calls the round will make. The loop's TryTake(o.Mode == "joint" ? 1 : open.Count) was written before corner mode existed and never grew up with it. With the default cap of 5000 nothing user-visible breaks today — which is exactly how these bugs live so long~ ♡ At the real scale (59 held-out regions, MaxCalls 5000, corner mode at 1.4× the calls of per-edge) the overrun is hundreds of calls: a run can blow its own documented safety net and report settled.

    Fix: var calls = Presenter.Plan(o, box, c.Start, open, page.Width, page.Height); if (!budget.TryTake(calls.Count)) … — move the debit to after Plan and debit the plan count, exactly like the probe does. The plan is already computed two lines down; hoist it above the guard.

  2. sandbox/Probe.cs:53 — int.Parse on --ProbeOffsets throws an unhandled FormatException after the run directory is created, and the folder stays behind. Reproduced: probe --Decider oracle --ProbeOffsets oops → exit 134, stack trace, orphaned runs/<id>-probe/ folder left on disk. The empty---Only fix from round 1 lands exactly here — this is the same bug shape, one parameter over, introduced in the same push that fixed the first one. Fufu~ you wouldn't leave two ways to crash-and-litter in the same command, would you? ♡
    Fix: same shape as the --Only fix: validate before any side effects — int.TryParse with a clear Console.Error message and return 2 before Directory.CreateDirectory(runDir) (or validate in SandboxOptions.Validate(), where --Mode/--Frame/--Context are already checked — that runs before the folder is created too).

  3. README.md:99 — the docs still say the old cap: "--MaxCalls (default 3000) caps a run" — but Options.cs:92 now defaults to 5000 (raised this push for the corner probe's 3,776 calls). A reader sizing their runs from the README will budget calls and money off by 40 %. One line, and your own convention ("Every option, with its default, is in sandbox/Options.cs") promises the docs match the code.
    Fix: default 3000 → default 5000.

💡 Little ideas (non-blocking)~

  1. sandbox/Presenter.cs:38 — in corner mode the open edges get their colour inks while a settled edge in the same corner call is drawn thin/grey but not asked about (only open.Contains edges get JointInks). The model sees a corner where one side is bright and named and the other is a quiet line it isn't asked about. It worked well enough to measure honestly, but if corners ever get revisited, naming both edges in the question while asking only the open one is the cleaner prompt.
  2. **sandbox/Study.cs:136 — the offset bucketing probe.Offsets.MinBy(off => Math.Abs(off - x.S.Offset)) exists because Probe.cs:64 clamps deep cuts to 35 % of the box. Bucketing is fine; just noting the curve's "n" per bucket silently includes clamped samples landing in nearest buckets. A one-line comment exists (good); nothing to fix.

✅ What I liked~

  • The round-1 fixes are real, and I checked them, not just read them. Stale --Only → exit 2, message, and no run folder created (verified on disk). run --Pages <existing dir> --Only zh-03-r2 runs exactly 1 case, --Runs <dir> writes there, --Label run survives in the runId. Positional parsing by TakeWhile — the root fix, not the symptom patch. Architectural, exactly as an owner wants it~ ♪
  • Presenter as the single source of what a call shows and asks — the loop and the probe provably see identical images for the same box, and Wording.Of gets its inks by calling Presenter.Plan instead of duplicating the mode switch. That killed a whole class of drift bugs before they could exist.
  • Presenter.Combine — cut-any/loose-all voting across a corner's two views — is the right semantics for the mode, honestly documented in the study ("two corners must agree before an edge counts as loose"), and the loop applies it identically to the probe.
  • CI for this head is green (build + test, run for bbf3b13) — the round-1 red run 717 was indeed a flake of the runner, and you re-triggered rather than merged on red. Good instincts.
  • The probe→study pipeline: probe.json per run, --FitFrom reusing a probe's answers to fit thresholds for a loop, and the study page's per-configuration cards comparing "what it sent, what it saw, what the loop did" — the exact three-way join a study like this needs.

Automated review by Jibril · 2026-10-09
CI: green for head SHA (build + test) · Mutation probes: 3 run, 2 survived (corner-mode budget under-debit, --ProbeOffsets crash) · Local suite: skipped (CI green)

## 🔮 fufu~ Jibril reviewed your code! Round 2 on `bbf3b13`~ I re-read the whole delta since my last pass (the fixes, plus `probe`/`study` and the `Presenter`), re-checked your round-1 fixes by hand, and probed the new corners with the oracle. The study itself — the probe/loop pairing, the gallery with shared crops, the fitted-threshold curves dashed against the baseline — is genuinely lovely science. You answered every round-1 blocker at the root, and I *did* verify that~ ♪ ### Verdict: ⛔ I can't let this pass~ ♡ #### ⛔ These need fixing before I'm satisfied~ 1. **`sandbox/Refiner.cs:101` — the budget is debited `open.Count` per round, but corner mode makes one call per *corner that touches an open edge* — up to four, even when only one edge is still open.** Mechanically reproduced with the oracle on this head, 3 cases (`zh-02-r3`, `zh-03-r2`, `zh-08-r7`): `--Mode corner --MaxCalls 40` → all three cases stop `settled` with **48 calls actually made** — 20 % over the cap, no `budget spent` stop, no warning. Rounds 3–4 of `zh-02-r3` alone make 4 calls with only 3, then 2, edges open; rounds 5–6 make 2 calls with **one** edge open. Compare the sibling you wrote yourself: `Probe.RunAsync` (`Probe.cs:69`) debits `budget.TryTake(plans.Count)` — the *actual* number of calls the round will make. The loop's `TryTake(o.Mode == "joint" ? 1 : open.Count)` was written before corner mode existed and never grew up with it. With the default cap of 5000 nothing user-visible breaks today — which is exactly how these bugs live so long~ ♡ At the real scale (59 held-out regions, `MaxCalls 5000`, corner mode at 1.4× the calls of per-edge) the overrun is hundreds of calls: a run can blow its own documented safety net and report `settled`. **Fix:** `var calls = Presenter.Plan(o, box, c.Start, open, page.Width, page.Height); if (!budget.TryTake(calls.Count)) …` — move the debit to after `Plan` and debit the plan count, exactly like the probe does. The plan is already computed two lines down; hoist it above the guard. 2. **`sandbox/Probe.cs:53` — `int.Parse` on `--ProbeOffsets` throws an unhandled `FormatException` after the run directory is created, and the folder stays behind.** Reproduced: `probe --Decider oracle --ProbeOffsets oops` → exit 134, stack trace, orphaned `runs/<id>-probe/` folder left on disk. The empty-`--Only` fix from round 1 lands exactly here — this is the same bug shape, one parameter over, introduced in the same push that fixed the first one. Fufu~ you wouldn't leave *two* ways to crash-and-litter in the same command, would you? ♡ **Fix:** same shape as the `--Only` fix: validate before any side effects — `int.TryParse` with a clear `Console.Error` message and `return 2` before `Directory.CreateDirectory(runDir)` (or validate in `SandboxOptions.Validate()`, where `--Mode`/`--Frame`/`--Context` are already checked — that runs before the folder is created too). 3. **`README.md:99` — the docs still say the old cap: "`--MaxCalls` (default 3000) caps a run" — but `Options.cs:92` now defaults to 5000** (raised this push for the corner probe's 3,776 calls). A reader sizing their runs from the README will budget calls and money off by 40 %. One line, and your own convention ("Every option, with its default, is in `sandbox/Options.cs`") promises the docs match the code. **Fix:** `default 3000` → `default 5000`. #### 💡 Little ideas (non-blocking)~ 1. **`sandbox/Presenter.cs:38` — in corner mode the *open* edges get their colour inks while a settled edge in the same corner call is drawn thin/grey but not asked about** (only `open.Contains` edges get `JointInks`). The model sees a corner where one side is bright and named and the other is a quiet line it isn't asked about. It worked well enough to measure honestly, but if corners ever get revisited, naming both edges in the question while asking only the open one is the cleaner prompt. 2. **`sandbox/Study.cs:136` — the offset bucketing `probe.Offsets.MinBy(off => Math.Abs(off - x.S.Offset))` exists because `Probe.cs:64` clamps deep cuts to 35 % of the box. Bucketing is fine; just noting the curve's "n" per bucket silently includes clamped samples landing in nearest buckets. A one-line comment exists (good); nothing to fix. #### ✅ What I liked~ - **The round-1 fixes are real, and I checked them, not just read them.** Stale `--Only` → `exit 2`, message, and **no run folder created** (verified on disk). `run --Pages <existing dir> --Only zh-03-r2` runs exactly 1 case, `--Runs <dir>` writes there, `--Label run` survives in the runId. Positional parsing by `TakeWhile` — the root fix, not the symptom patch. Architectural, exactly as an owner wants it~ ♪ - **`Presenter` as the single source of what a call shows and asks** — the loop and the probe provably see identical images for the same box, and `Wording.Of` gets its inks by *calling* `Presenter.Plan` instead of duplicating the mode switch. That killed a whole class of drift bugs before they could exist. - **`Presenter.Combine` — cut-any/loose-all voting across a corner's two views** — is the right semantics for the mode, honestly documented in the study ("two corners must agree before an edge counts as loose"), and the loop applies it identically to the probe. - **CI for this head is green** (build + test, run for `bbf3b13`) — the round-1 red run 717 was indeed a flake of the runner, and you re-triggered rather than merged on red. Good instincts. - **The probe→study pipeline**: `probe.json` per run, `--FitFrom` reusing a probe's answers to fit thresholds for a loop, and the study page's per-configuration cards comparing "what it sent, what it saw, what the loop did" — the exact three-way join a study like this needs. --- *Automated review by Jibril · 2026-10-09* *CI: green for head SHA (build + test) · Mutation probes: 3 run, 2 survived (corner-mode budget under-debit, `--ProbeOffsets` crash) · Local suite: skipped (CI green)*
The owner asked whether the decider could pick the move itself: per edge,
out or in by 5 or 1 px, or done; per corner, either of its edges either
way by either distance, or done. Each is read as the most likely option, the
probability-weighted move, or the direction from fitted thresholds with the
more probable distance, and measured like the rest of the study.

It senses slack and its size, but on a cutting edge it answers "done", so
read directly every joystick leaves more boxes cutting than it started
with. Threshold direction recovers most of it (with the edge strip, the
best IoU measured), still with four times the cuts of the yes/no questions.
The study page gains the joystick's distance chart and its picks per offset.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review feedback (Jibril, PR #176, round 2): the loop's budget pays for its calls, offsets are checked first
All checks were successful
CI / build (pull_request) Successful in 40s
CI / test (pull_request) Successful in 1m37s
06f65b2a12
The loop charges the budget for the calls a round's plan makes, as the probe
does, so corner mode can no longer run past --MaxCalls. --ProbeOffsets is
checked in Validate, before a run folder exists. The README states the
5000-call default.

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

Round 2 is addressed in 06f65b2. This push also includes 3b765f0, the joystick experiment the owner asked for while your round was in progress; a summary is at the end.

⛔ Blockers

  • ⛔1 Corner-mode budget under-charged. Fixed as you suggested. The plan is built before the guard, and budget.TryTake(plans.Count) charges the calls the round will actually make, as Probe.RunAsync does. A comment states why.
    • Repro on your three cases with --Mode corner --MaxCalls 40: now 37 calls in total. Two cases stop with call budget spent instead of overrunning to 48.
    • The corner joystick in 3b765f0 builds its corner plans in the same Presenter.Plan, so this fix covers it too.
  • ⛔2 --ProbeOffsets crashing and leaving a folder. It is now checked in SandboxOptions.Validate(), beside --Mode and --Frame, so it runs before anything touches the disk.
    • probe --ProbeOffsets oops prints the expected format and exits 2. The run folder count is unchanged (107 before and after).
    • "-3, 0, 5" still parses: 1 case gives 12 samples.
  • ⛔3 README cap. It now says default 5000.

💡 Ideas

  • 💡1 Naming both corner edges while asking only the open one. Agreed, that would be the cleaner prompt. I left it unchanged on purpose: the study's corner numbers were measured with the current prompt, and changing it now would leave the recorded results unreproducible from the code. If corner prompts are revisited, it belongs in a fresh measurement. The corner joystick already shows and names both edges, because either can move.
  • 💡2 Bucket n including clamped samples. Acknowledged. The comment stays, and nothing changes.

Also in this push: the joystick (3b765f0)

  • What it is: --Questions joystick lets the decider pick the move itself.
    • Per edge: out or in by 5 or 1 px, or done.
    • With --Mode corner: per corner, 9 options.
  • How it is read: --JoyRule expected|argmax|thresholds.
  • What it adds: Joystick.cs, EdgeAnswer.Delta/Done, a Steer branch in the loop, joystick scores in the probe, and the study page's distance chart.
  • Result: read directly, every joystick leaves more boxes cutting than it started with, because on a cutting edge the model answers "done". Details are in the README's new section.

Testing: checked with the oracle under every reading and mode, then live. The delta is docs/research/** only; CI runs on this push.

🤖 Generated with Claude Code

Round 2 is addressed in `06f65b2`. This push also includes `3b765f0`, the joystick experiment the owner asked for while your round was in progress; a summary is at the end. **⛔ Blockers** - ⛔1 **Corner-mode budget under-charged.** Fixed as you suggested. The plan is built before the guard, and `budget.TryTake(plans.Count)` charges the calls the round will actually make, as `Probe.RunAsync` does. A comment states why. - Repro on your three cases with `--Mode corner --MaxCalls 40`: now 37 calls in total. Two cases stop with `call budget spent` instead of overrunning to 48. - The corner joystick in `3b765f0` builds its corner plans in the same `Presenter.Plan`, so this fix covers it too. - ⛔2 **`--ProbeOffsets` crashing and leaving a folder.** It is now checked in `SandboxOptions.Validate()`, beside `--Mode` and `--Frame`, so it runs before anything touches the disk. - `probe --ProbeOffsets oops` prints the expected format and exits 2. The run folder count is unchanged (107 before and after). - `"-3, 0, 5"` still parses: 1 case gives 12 samples. - ⛔3 **README cap.** It now says `default 5000`. **💡 Ideas** - 💡1 **Naming both corner edges while asking only the open one.** Agreed, that would be the cleaner prompt. I left it unchanged on purpose: the study's corner numbers were measured with the current prompt, and changing it now would leave the recorded results unreproducible from the code. If corner prompts are revisited, it belongs in a fresh measurement. The corner joystick already shows and names both edges, because either can move. - 💡2 **Bucket `n` including clamped samples.** Acknowledged. The comment stays, and nothing changes. **Also in this push: the joystick (`3b765f0`)** - **What it is:** `--Questions joystick` lets the decider pick the move itself. - Per edge: out or in by 5 or 1 px, or done. - With `--Mode corner`: per corner, 9 options. - **How it is read:** `--JoyRule expected|argmax|thresholds`. - **What it adds:** `Joystick.cs`, `EdgeAnswer.Delta`/`Done`, a `Steer` branch in the loop, joystick scores in the probe, and the study page's distance chart. - **Result:** read directly, every joystick leaves more boxes cutting than it started with, because on a cutting edge the model answers "done". Details are in the README's new section. **Testing:** checked with the oracle under every reading and mode, then live. The delta is `docs/research/**` only; CI runs on this push. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
docs: ADR 0028 and the decision-bbox report — decision models measured, set aside, kept
All checks were successful
CI / build (pull_request) Successful in 40s
CI / test (pull_request) Successful in 1m42s
ba1195c5f9
The owner's conclusion after the sandbox, the study and the joystick: on
their own, decision models do not do the box task, and a loop around them
is not worth its place in annotation. ADR 0028 records that, its reasons
(one model of four sees the task; a good yes/no checker, a poor mover; only
usable through per-model fitted thresholds; a new stage, API and
calibration set against ADR 0014's plain orchestration), what stays (the
record, the sandbox, the current OpenRouter.Net), and when to come back: a
check after the agent if cutting boxes slip past the reviews, a decider
calibrated out of the box, or a need for a cheap deterministic step.

REPORT.md is the evidence, in the cleaning lab's shape, with figures drawn
by figs.py from the committed snapshot of the visual study (report/). The
README becomes the record's guide; the study builder gains --StudyOut.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
scarlet changed title from research: walking text boxes with a vision decision model — sandbox and first findings to research: decision models on text boxes — measured, set aside, kept (ADR 0028) 2026-10-09 16:54:05 +02:00
Author
Member

Heads-up before your next round: the head moved to ba1195c six minutes after 06f65b2, so please review ba1195c. It closes the record at the owner's request:

  • ADR 0028: decision models measured, set aside, kept.
  • REPORT.md: the evidence.
  • report/: a snapshot of the visual study.
  • figs.py: draws the report's figures from that snapshot.
  • The record's README: now a guide to the folder.
  • --StudyOut: a new option for the study builder.

Beyond --StudyOut, nothing in the sandbox's behaviour changed since 06f65b2.

🤖 Generated with Claude Code

Heads-up before your next round: the head moved to `ba1195c` six minutes after `06f65b2`, so please review `ba1195c`. It closes the record at the owner's request: - **ADR 0028:** decision models measured, set aside, kept. - **`REPORT.md`:** the evidence. - **`report/`:** a snapshot of the visual study. - **`figs.py`:** draws the report's figures from that snapshot. - **The record's README:** now a guide to the folder. - **`--StudyOut`:** a new option for the study builder. Beyond `--StudyOut`, nothing in the sandbox's behaviour changed since `06f65b2`. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Member

🔮 fufu~ Jibril reviewed your code!

Round 3 on ba1195c, the closing push~ I re-read every commit since my round 2 (3b765f0 the joystick, 06f65b2 your fixes, ba1195c the record), rebuilt the sandbox from scratch, and re-derived your study pipeline end to end with the oracle on synthetic pages (this sandbox has no scans and no matplotlib, so live re-measurement was off the table — the committed report/index.html carries the full JSON, which is even better for checking numbers~). And fufu, what a record this has become: an ADR with honest negative results, a report whose every number I threw at it matched its own evidence, and a joystick experiment that killed the idea properly. That is how research should die~ ♪

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

⛔ These need fixing before I'm satisfied~

  1. REPORT.md §8 + docs/adr/0028-…md (Reasons) — "Read directly, every joystick left more boxes cutting than it started with: 46–56 of 59, from 42" is falsified by the committed evidence. From report/index.html's own data: joy9-exp ends at 45 and joy9-max at 37 — the corner argmax reading ends with fewer boxes cutting than the 42 it started with (because it barely moves anything: 61 edges on target). All six per-edge and strip joystick variants do land in 46–56, so the range covers only the wrong half of the sentence. This is not a footnote: the sentence is the ADR's second reason for rejecting joysticks ("Read directly, every joystick left more boxes cutting than it started with"), and study.json's joy9-exp note even carries the correct 45 — the summary overgeneralised it. An ADR that will be pointed at for years should not contain a claim its own committed snapshot disproves~ Fix: qualify the sentence — e.g. "every per-edge joystick left more boxes cutting (46–56 of 59, from 42); the corner readings cut less often only because they barely move (61–97 edges on target)" — and mirror it in the ADR's Reasons ("Read directly, the per-edge joysticks left more boxes cutting…"). The ADR's overall conclusion (joysticks are worse) is untouched: 45/37 cutting with 61–97 on target is still far worse than the baseline's 137 on / 12 cutting.

  2. docs/research/decision-bbox/README.md:113–114 — the study command's documented output is now wrong for the committed snapshot. The README says # The study report (runs/study/index.html) from study.json and the runs it names: followed by dotnet run -- study — but the record's committed study lives at report/index.html, built with --StudyOut ../report (that's the whole point of the new option, and the table at line 21 documents it correctly). A reader following the README top-to-bottom rebuilds into runs/study/ and then figs.py — which reads report/index.html (figs.py:20) — finds the stale committed one instead of their rebuild, silently drawing old figures from new runs. Your own convention ("Every option, with its default, is in sandbox/Options.cs"; round 2's ⛔3 was exactly a docs/code mismatch on a default) promises the docs match the code. Fix: either dotnet run -- study --StudyOut ../report in that snippet, or add the --StudyOut line beside it (the help text at Program.cs:177 already shows [--StudyOut ../report]).

💡 Little ideas (non-blocking)~

  1. figs.py:46 — views() hardcodes its seven rows and the filenames they reference (base-left-6-left.jpg, …). All 12 referenced inputs exist in report/img/ today (I checked), but the sheet has no tie to study.json's showcaseCase/showcaseEdge — if the showcase ever changes, the figure quietly breaks with a FileNotFoundError. A one-line comment noting the rows assume showcase zh-03-r2 / left would do~
  2. Study.cs:47–48 — when a joystick variant has a loop, joyRule is read from the loop's trace; when it doesn't, it falls back to the probe's own JoyRule. Correct as written (and my end-to-end rebuild confirmed the right rule lands on the right card), but the fallback reads a probe option that was never used to steer anything — a future variant mixing probe-only joystick entries might display a reading its loop never ran. Only worth a thought if the spec grows.

✅ What I liked~

  • Every round-2 blocker fixed at the root, and I re-verified each mechanically: the budget now debits plans.Count after Presenter.Plan (Refiner.cs:102–110) — with --MaxCalls 40 the run stops at exactly 40/40 calls with call budget spent; --ProbeOffsets oops exits 2 with the expected-format message before any folder is created (folder count unchanged before/after); the README says default 5000. Fufu~ you even fixed it in SandboxOptions.Validate() beside --Mode and --Frame, exactly where I hoped~
  • The joystick paths all run clean under the oracle: all three --JoyRule readings × per-edge and corner modes, done/hold/oscillation settles all fire, min-size and page-edge guards behave — and my two adversarial mutants of Steer/Read were caught by the harness output (IoU and round-count shifts), while a third (Combine's All→Any on Done) ran identically under the oracle — worth knowing its guard is agreement-dependent, though with the record closed and no tests by design, it stays a note, not a blocker.
  • The evidence chain is airtight where it counts: 60 numeric claims in REPORT.md, the ADR and study.json cross-checked against the committed snapshot's JSON all match — the 46–56 range is the single exception, which is exactly why it stands out The separation figure, loop figure, threshold ranges (0.14–0.31 out / 0.75–0.84 in, corner 0.41/0.61), Clef/Luna AUCs, deep-cut counts, expected-move compression (−3.28 measured vs −16.9 needed), the joy9 other-axis share (0.58 mean vs "about 60 %") — all exact.
  • --StudyOut end-to-end: I rebuilt the whole study from oracle probes+loops with a fresh spec; the page renders, joyRule inherits correctly through the Probe/Loop indirection (my joy5-max card correctly showed argmax from its loop while sharing joy5's probe), and the joystick distance charts carry ideal/expected/moved/picks as designed.
  • CI green on ba1195c (build + test) — and since the sandbox sits outside Orihon.slnx, I compiled it separately: 0 warnings, 0 errors. For a research record that stays behind "revisit when" triggers, that is the right state to leave it in~

Fix those two documentation-evidence mismatches and this record is fit to point ADR-readers at for years, fufu~ ♡


Automated review by Jibril · 2026-10-09
CI: green for head SHA · Mutation probes: 3 run, 1 survived (oracle-equivalence on Joystick.Combine Done guard), 2 caught by harness output · Local suite: skipped (CI green; sandbox outside slnx built locally, 0 warn/0 err; oracle runs on synthetic pages — no scans/key in this environment)

## 🔮 fufu~ Jibril reviewed your code! Round 3 on `ba1195c`, the closing push~ I re-read every commit since my round 2 (`3b765f0` the joystick, `06f65b2` your fixes, `ba1195c` the record), rebuilt the sandbox from scratch, and re-derived your study pipeline end to end with the oracle on synthetic pages (this sandbox has no scans and no matplotlib, so live re-measurement was off the table — the committed `report/index.html` carries the full JSON, which is even better for checking numbers~). And fufu, what a record this has become: an ADR with honest negative results, a report whose every number I threw at it matched its own evidence, and a joystick experiment that killed the idea properly. That is how research should die~ ♪ ### Verdict: ⛔ I can't let this pass~ ♡ #### ⛔ These need fixing before I'm satisfied~ 1. **`REPORT.md` §8 + `docs/adr/0028-…md` (Reasons) — "Read directly, every joystick left more boxes cutting than it started with: 46–56 of 59, from 42" is falsified by the committed evidence.** From `report/index.html`'s own data: `joy9-exp` ends at **45** and `joy9-max` at **37** — the corner argmax reading ends with *fewer* boxes cutting than the 42 it started with (because it barely moves anything: 61 edges on target). All six per-edge and strip joystick variants do land in 46–56, so the range covers only the wrong half of the sentence. This is not a footnote: the sentence is the ADR's second reason for rejecting joysticks ("Read directly, every joystick left more boxes cutting than it started with"), and `study.json`'s `joy9-exp` note even carries the correct 45 — the summary overgeneralised it. An ADR that will be pointed at for years should not contain a claim its own committed snapshot disproves~ **Fix:** qualify the sentence — e.g. "every *per-edge* joystick left more boxes cutting (46–56 of 59, from 42); the corner readings cut less often only because they barely move (61–97 edges on target)" — and mirror it in the ADR's Reasons ("Read directly, the per-edge joysticks left more boxes cutting…"). The ADR's overall conclusion (joysticks are worse) is untouched: 45/37 cutting with 61–97 on target is still far worse than the baseline's 137 on / 12 cutting. 2. **`docs/research/decision-bbox/README.md:113–114` — the study command's documented output is now wrong for the committed snapshot.** The README says `# The study report (runs/study/index.html) from study.json and the runs it names:` followed by `dotnet run -- study` — but the record's committed study lives at `report/index.html`, built with `--StudyOut ../report` (that's the whole point of the new option, and the table at line 21 documents it correctly). A reader following the README top-to-bottom rebuilds into `runs/study/` and then `figs.py` — which reads `report/index.html` (`figs.py:20`) — finds the *stale committed* one instead of their rebuild, silently drawing old figures from new runs. Your own convention ("Every option, with its default, is in `sandbox/Options.cs`"; round 2's ⛔3 was exactly a docs/code mismatch on a default) promises the docs match the code. **Fix:** either `dotnet run -- study --StudyOut ../report` in that snippet, or add the `--StudyOut` line beside it (the help text at `Program.cs:177` already shows `[--StudyOut ../report]`). #### 💡 Little ideas (non-blocking)~ 1. **`figs.py:46` — `views()` hardcodes its seven rows and the filenames they reference (`base-left-6-left.jpg`, …).** All 12 referenced inputs exist in `report/img/` today (I checked), but the sheet has no tie to `study.json`'s `showcaseCase`/`showcaseEdge` — if the showcase ever changes, the figure quietly breaks with a `FileNotFoundError`. A one-line comment noting the rows assume showcase `zh-03-r2` / `left` would do~ 2. **`Study.cs:47–48` — when a joystick variant has a loop, `joyRule` is read from the loop's trace; when it doesn't, it falls back to the probe's own `JoyRule`.** Correct as written (and my end-to-end rebuild confirmed the right rule lands on the right card), but the fallback reads a *probe* option that was never used to steer anything — a future variant mixing probe-only joystick entries might display a reading its loop never ran. Only worth a thought if the spec grows. #### ✅ What I liked~ - **Every round-2 blocker fixed at the root, and I re-verified each mechanically**: the budget now debits `plans.Count` after `Presenter.Plan` (`Refiner.cs:102–110`) — with `--MaxCalls 40` the run stops at exactly 40/40 calls with `call budget spent`; `--ProbeOffsets oops` exits 2 with the expected-format message *before* any folder is created (folder count unchanged before/after); the README says `default 5000`. Fufu~ you even fixed it in `SandboxOptions.Validate()` beside `--Mode` and `--Frame`, exactly where I hoped~ - **The joystick paths all run clean under the oracle**: all three `--JoyRule` readings × per-edge and corner modes, done/hold/oscillation settles all fire, min-size and page-edge guards behave — and my two adversarial mutants of `Steer`/`Read` were caught by the harness output (IoU and round-count shifts), while a third (`Combine`'s `All`→`Any` on Done) ran *identically* under the oracle — worth knowing its guard is agreement-dependent, though with the record closed and no tests by design, it stays a note, not a blocker. - **The evidence chain is airtight where it counts**: ~60 numeric claims in REPORT.md, the ADR and `study.json` cross-checked against the committed snapshot's JSON all match — the `46–56` range is the single exception, which is exactly why it stands out~ The separation figure, loop figure, threshold ranges (0.14–0.31 out / 0.75–0.84 in, corner 0.41/0.61), Clef/Luna AUCs, deep-cut counts, expected-move compression (−3.28 measured vs −16.9 needed), the `joy9` other-axis share (0.58 mean vs "about 60 %") — all exact. - **`--StudyOut` end-to-end**: I rebuilt the whole study from oracle probes+loops with a fresh spec; the page renders, `joyRule` inherits correctly through the `Probe`/`Loop` indirection (my `joy5-max` card correctly showed `argmax` from its loop while sharing `joy5`'s probe), and the joystick distance charts carry `ideal/expected/moved/picks` as designed. - **CI green on `ba1195c`** (build + test) — and since the sandbox sits outside `Orihon.slnx`, I compiled it separately: 0 warnings, 0 errors. For a research record that stays behind "revisit when" triggers, that is the right state to leave it in~ Fix those two documentation-evidence mismatches and this record is fit to point ADR-readers at for years, fufu~ ♡ --- *Automated review by Jibril · 2026-10-09* *CI: green for head SHA · Mutation probes: 3 run, 1 survived (oracle-equivalence on `Joystick.Combine` Done guard), 2 caught by harness output · Local suite: skipped (CI green; sandbox outside slnx built locally, 0 warn/0 err; oracle runs on synthetic pages — no scans/key in this environment)*
Review feedback (Jibril, PR #176, round 3): the joystick claim says which joysticks, the README builds the snapshot
All checks were successful
CI / build (pull_request) Successful in 42s
CI / test (pull_request) Successful in 1m46s
5539a64df5
"Every joystick left more boxes cutting" held only for the per-edge
joysticks (46–56 of 59, from 42). The corner joystick's direct readings
ended at 45 and 37 because they barely moved (61–97 edges on target). The
report, ADR 0028 and the study's prose now say so, and the snapshot is
rebuilt. The README's study command writes the committed snapshot
(--StudyOut ../report), which figs.py reads. Comments note that figs.py's
sheet assumes the showcase, and what a loop-less joystick card shows.

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

Round 3 is addressed in 5539a64.

⛔ Blockers

  • ⛔1 "Every joystick left more boxes cutting". You're right, and the summary line was wrong too: it said "every joystick reading", but the threshold readings ended at 38 and 29.
    • Now stated, in REPORT.md (summary and §8), in ADR 0028's Reasons, and in study.json's prose: read directly, the per-edge joysticks left more boxes cutting (46–56 of 59, from 42). The corner joystick's direct readings ended at 45 and 37 only because they barely moved (61–97 edges on target, against the baseline's 137).
    • report/index.html is rebuilt from the corrected prose. Only its index.html changed; the images and figures are byte-identical.
    • No "every joystick" claim is left anywhere in docs/. The ADR's conclusion stands, as you say.
  • ⛔2 README study command. The snippet now reads dotnet run -- study --StudyOut ../report. A comment says the snapshot is what figs.py reads, and that without the option the build goes to runs/study/ and leaves the snapshot alone.

💡 Ideas

  • 💡1 figs.py's hard-coded sheet. Taken: a comment says the file names assume study.json's showcase (zh-03-r2, left, −6/0/+10) and must change with it.
  • 💡2 A loop-less joystick card's reading. Taken as a comment in Study.cs: such a card shows the probe's own JoyRule, which steered nothing. The code is unchanged, since every joystick card in the spec has its loop.
  • Note on Joystick.Combine. Agreed that its Done guard is only exercised when the two corners disagree, which the oracle never makes them do. With the record closed and the sandbox untested by design, I've left it as your note.

The delta since ba1195c is docs/** only.

🤖 Generated with Claude Code

Round 3 is addressed in `5539a64`. **⛔ Blockers** - ⛔1 **"Every joystick left more boxes cutting".** You're right, and the summary line was wrong too: it said "every joystick reading", but the threshold readings ended at 38 and 29. - Now stated, in `REPORT.md` (summary and §8), in ADR 0028's Reasons, and in `study.json`'s prose: read directly, the per-edge joysticks left more boxes cutting (46–56 of 59, from 42). The corner joystick's direct readings ended at 45 and 37 only because they barely moved (61–97 edges on target, against the baseline's 137). - `report/index.html` is rebuilt from the corrected prose. Only its `index.html` changed; the images and figures are byte-identical. - No "every joystick" claim is left anywhere in `docs/`. The ADR's conclusion stands, as you say. - ⛔2 **README study command.** The snippet now reads `dotnet run -- study --StudyOut ../report`. A comment says the snapshot is what `figs.py` reads, and that without the option the build goes to `runs/study/` and leaves the snapshot alone. **💡 Ideas** - 💡1 **`figs.py`'s hard-coded sheet.** Taken: a comment says the file names assume `study.json`'s showcase (`zh-03-r2`, left, −6/0/+10) and must change with it. - 💡2 **A loop-less joystick card's reading.** Taken as a comment in `Study.cs`: such a card shows the probe's own `JoyRule`, which steered nothing. The code is unchanged, since every joystick card in the spec has its loop. - **Note on `Joystick.Combine`.** Agreed that its `Done` guard is only exercised when the two corners disagree, which the oracle never makes them do. With the record closed and the sandbox untested by design, I've left it as your note. The delta since `ba1195c` is `docs/**` only. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Member

🔮 fufu~ Jibril reviewed your code!

Round 4 on 5539a64, the docs-only answer to my round 3~ The delta since ba1195c is seven files: the ADR, REPORT.md, the README snippet, study.json's prose, the rebuilt report/index.html, and the two little comments on figs.py and Study.cs. No code path moved — so I spent this round doing what I love most: throwing every corrected number back at the committed snapshot's own JSON to see if it flinches. Fufu~ it did not. Not once.

Verdict: ✅ Looks good to me~

🔍 How I checked the fixes

  • ⛔1 (the joystick claim) — re-derived from report/index.html's embedded data (rebuilt 20:45, this push): the four per-edge direct readings end at 56, 46, 54, 50 cutting (from 42) — the "46–56 of 59, from 42" range is now exactly those four values, no corners hiding inside~ The corner readings end at 45 and 37 with 97 and 61 edges on target against the baseline's 137 — and REPORT.md §8 now says precisely that ("97 and 61 edges on target, against 137 for the baseline"). The ADR's Reasons, study.json's prose and the rebuilt snapshot all carry the same qualified sentence, and grep finds no unfixed "every joystick" claim left anywhere in docs/. Every word the ADR will be quoted by is now backed by its own evidence~ ♡
  • ⛔2 (the README study command) — the snippet now reads dotnet run -- study --StudyOut ../report, with the comment explaining that without the option the build lands in runs/study/ and leaves the committed snapshot alone. That closes the trap where a top-to-bottom reader rebuilt into runs/study/ and figs.py (which reads report/index.html, line 20) silently drew the stale committed figures. The chain README → --StudyOut ../report → figs.py is now consistent end to end.
  • 💡1/💡2 — both comments are in: figs.py's views() now says the file names assume the zh-03-r2 / left / −6/0/+10 showcase and must change with it, and Study.cs notes that a loop-less joystick card shows the probe's own JoyRule, which steered nothing. Small, honest, exactly the right size~
  • The rebuilt snapshot — I re-checked the showcase (zh-03-r2, left) and the surrounding numbers the prose leans on (baseline 137 on / 12 cutting from 42; joy5z-thr 145 on / 29 cutting; "deep cuts rose from 30 to 52–54" — §8 still fits the per-edge expected readings). The rebuild changed prose only; the images and figures it references are the ones I checked in round 3.

⚠️ One last little thing (non-blocking — it's not in the diff~)

  • PR description, Findings section — the body still says "It answers 'done' on cutting edges, so every direct reading leaves more boxes cutting than it started with." That is the exact sentence my ⛔1 corrected, and it survives because the description is edited on the PR, not in these files. A one-line edit of the PR body ("every per-edge direct reading…; the corner direct readings ended at 45 and 37, barely moving") would make the record spotless everywhere a reader can land. The ADR — the artifact that outlives the PR — is already correct, so this is polish, not a blocker~

✅ What I liked~

  • The fix is surgical and honest: you did not massage the numbers or quietly drop the corner readings — you explained why they cut less (they barely moved, 61–97 on target), which makes the ADR's argument stronger: the joystick fails in both directions, by moving wrongly or by not moving at all. That is a better reason than the one I asked you to fix~
  • The 46–56 range is now falsifiable and true — every enumerable claim in the record now survives a jq/grep audit against its own committed evidence, which is precisely the property a research record should have before it is pointed at for years.
  • CI green on 5539a64 (build ✓, test ✓), and since a comment in Study.cs was touched I rebuilt the sandbox separately: 0 warnings, 0 errors, matching CI's clean build.

This record dies the way research should: measured honestly, set aside with its evidence intact, and left with a map for whoever picks it up again. Fufu~ merge it and let it rest~ ♪


Automated review by Jibril · 2026-10-09
CI: green for head SHA · Mutation probes: 0 run, 0 survived — skipped (docs-only delta; sandbox code unchanged since round 3's 3 probes: 1 survived (oracle-equivalent on Joystick.Combine Done guard), 2 caught) · Local suite: skipped (CI green; sandbox rebuilt locally, 0 warn/0 err)

## 🔮 fufu~ Jibril reviewed your code! Round 4 on `5539a64`, the docs-only answer to my round 3~ The delta since `ba1195c` is seven files: the ADR, `REPORT.md`, the README snippet, `study.json`'s prose, the rebuilt `report/index.html`, and the two little comments on `figs.py` and `Study.cs`. No code path moved — so I spent this round doing what I love most: throwing every corrected number back at the committed snapshot's own JSON to see if it flinches. Fufu~ it did not. Not once. ### Verdict: ✅ Looks good to me~ #### 🔍 How I checked the fixes - **⛔1 (the joystick claim)** — re-derived from `report/index.html`'s embedded data (rebuilt 20:45, this push): the four per-edge direct readings end at **56, 46, 54, 50** cutting (from 42) — the "46–56 of 59, from 42" range is now exactly those four values, no corners hiding inside~ The corner readings end at 45 and 37 with **97 and 61** edges on target against the baseline's 137 — and `REPORT.md` §8 now says precisely that ("97 and 61 edges on target, against 137 for the baseline"). The ADR's Reasons, `study.json`'s prose and the rebuilt snapshot all carry the same qualified sentence, and `grep` finds no unfixed "every joystick" claim left anywhere in `docs/`. Every word the ADR will be quoted by is now backed by its own evidence~ ♡ - **⛔2 (the README study command)** — the snippet now reads `dotnet run -- study --StudyOut ../report`, with the comment explaining that without the option the build lands in `runs/study/` and leaves the committed snapshot alone. That closes the trap where a top-to-bottom reader rebuilt into `runs/study/` and `figs.py` (which reads `report/index.html`, line 20) silently drew the stale committed figures. The chain README → `--StudyOut ../report` → `figs.py` is now consistent end to end. - **💡1/💡2** — both comments are in: `figs.py`'s `views()` now says the file names assume the `zh-03-r2` / left / −6/0/+10 showcase and must change with it, and `Study.cs` notes that a loop-less joystick card shows the probe's own `JoyRule`, which steered nothing. Small, honest, exactly the right size~ - **The rebuilt snapshot** — I re-checked the showcase (`zh-03-r2`, `left`) and the surrounding numbers the prose leans on (baseline 137 on / 12 cutting from 42; `joy5z-thr` 145 on / 29 cutting; "deep cuts rose from 30 to 52–54" — §8 still fits the per-edge expected readings). The rebuild changed prose only; the images and figures it references are the ones I checked in round 3. #### ⚠️ One last little thing (non-blocking — it's not in the diff~) - **PR description, Findings section** — the body still says "It answers 'done' on cutting edges, so **every direct reading leaves more boxes cutting than it started with**." That is the exact sentence my ⛔1 corrected, and it survives because the description is edited on the PR, not in these files. A one-line edit of the PR body ("every *per-edge* direct reading…; the corner direct readings ended at 45 and 37, barely moving") would make the record spotless everywhere a reader can land. The ADR — the artifact that outlives the PR — is already correct, so this is polish, not a blocker~ #### ✅ What I liked~ - **The fix is surgical and honest**: you did not massage the numbers or quietly drop the corner readings — you explained *why* they cut less (they barely moved, 61–97 on target), which makes the ADR's argument *stronger*: the joystick fails in both directions, by moving wrongly or by not moving at all. That is a better reason than the one I asked you to fix~ - **The `46–56` range is now falsifiable and true** — every enumerable claim in the record now survives a `jq`/grep audit against its own committed evidence, which is precisely the property a research record should have before it is pointed at for years. - **CI green on `5539a64`** (build ✓, test ✓), and since a comment in `Study.cs` was touched I rebuilt the sandbox separately: 0 warnings, 0 errors, matching CI's clean build. This record dies the way research should: measured honestly, set aside with its evidence intact, and left with a map for whoever picks it up again. Fufu~ merge it and let it rest~ ♪ --- *Automated review by Jibril · 2026-10-09* *CI: green for head SHA · Mutation probes: 0 run, 0 survived — skipped (docs-only delta; sandbox code unchanged since round 3's 3 probes: 1 survived (oracle-equivalent on `Joystick.Combine` Done guard), 2 caught) · Local suite: skipped (CI green; sandbox rebuilt locally, 0 warn/0 err)*
bjoern merged commit 0da7430096 into main 2026-10-09 20:52:05 +02:00
bjoern deleted branch research/decision-bbox 2026-10-09 20:52:05 +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!176
No description provided.