research: the typeset lab's house style — the owner's decisions, one face per case, the sound-word playbook #184

Merged
bjoern merged 6 commits from research/typeset-house-style into main 2026-10-10 17:19:31 +02:00
Member

This follows #182. The owner answered the typeset lab's four open questions on 2026-10-10:

  1. A manga/doujinshi identity, not American comics.
  2. All caps.
  3. One recommended face per text-body case, a wider palette for sound words, and the findings condensed for the agent.
  4. If nothing is boxed, nothing is to be done.

This PR folds those answers into the record. It changes no production code.

What's in

X11: house faces (findings/x11-house-faces.md, .json)

  • Material: three blind model judges ranked candidate faces per text-body case. Each case was shown on real balloons from the corpus, all in caps, with the same room and size limits for every face. There were 22 region sheets (8 dialogue, 5 shout, 3 whisper, 3 thought, 3 caption) and 2 whole-page sets for dialogue.
  • What the judges were asked: to score each face on manga identity, readability at reading size and fit to its case, with identity first.
case pick runner-up pick vs runner-up judges agree
dialogue Comic Neue Bold (highest identity score, 2.54 of 3) Pangolin 12–12, within noise barely (W 0.44)
shout Lilita One Luckiest Guy 8–7, within noise yes (W 0.75)
whisper Kalam Light Comic Neue Regular 8–1 yes (W 0.69)
thought Kalam Comic Neue Italic 9–0 yes (W 0.81)
caption Crimson Pro Merriweather 6–3, within noise yes (W 0.83)
  • Bangers, the American-comic shout face, scored 0.8 of 3 on identity.

The house sheet (styles/house.json)

  • Faces and case: the picks, with every text body in caps.

  • Opt-in keys in layout.py, linebreak.py and auto.py:

    • hyphenation only as the last resort;
    • no page-median cap.

    With neither key set, behaviour is unchanged.

  • Tooling: list_styles prints each style's notes and sound-word shortlists. inspect_source's column frames now read down, which is what both sound-word agents did.

The sound-word playbook (findings/sfx-playbook.md)

  • Part 1 (107 lines) is agent-facing, written to go in the kickoff. It covers:
    • the identity rules;
    • a table by sound family, with font shortlists that lead with the Japanese-designed display faces;
    • the paint and motion that won;
    • what lost.
  • Part 2 is the evidence for each rule, with untested rules marked as such.
  • TOOLKIT.md gains a House style section.

SYNTHESIS.md

  • The decisions: a dated section with the owner's decisions and what each settles.
  • #181 folded in: the typeset flag is retired, and embedded is the one form kept as drawn.
  • Decision 4: the lead's reading of it, marked for the owner to correct, with three questions it leaves open.

Fixed a stroke-rendering bug

  • effects.draw_strokes now draws strokes as rings under the fill. Before, stroke-and-fill on the even-odd glyph union left holes and a seam where contours run the other way. X11 found it on Comic Neue Bold: 134 grey pixels inside "VOICE" before the fix, 1 after.
  • tests/test_paint_stroke_ring.py pins it and fails on the old code.
  • The synthesis's port notes now say strokes are rings and never stroke-and-fill on the union.

The report

  • A new House style section and an updated hero.
  • 393 images, 9.35 MB.

Tests

  • 328 lab tests pass (cd docs/research/typeset-lab && $DATA/venv/bin/python -m pytest tests -q). That is 320 plus:
    • 7 house-style tests: the sheet loads and every face resolves, the floors, and the list_styles notes;
    • the stroke-ring test.
  • test_verify_tools now asserts the column frame reads down.
  • No .NET changes.

Honest notes

  • Who judged: the judges are models of the typesetters' family. Three of the five picks are level with their runner-up, and on dialogue the judges barely agreed. The owner's own look at the sheets (in the report's House style section) settles it.
  • Re-rendered finals: today's toolkit re-renders the archived tier C finals slightly differently, because the line breaker changed after the rehearsal. This is documented in X11.
  • Decision 4 leaves three questions for the owner, listed in the House style section:
    • Does translation give English to foreign-script sound words, such as Japanese in a Chinese edition?
    • Is a SkipTypeset page that has regions lettered?
    • The download story's "no raw scans" rule needs amending for pages that pass through as scanned.

🤖 Generated with Claude Code

This follows #182. The owner answered the typeset lab's four open questions on 2026-10-10: 1. A manga/doujinshi identity, not American comics. 2. All caps. 3. One recommended face per text-body case, a wider palette for sound words, and the findings condensed for the agent. 4. If nothing is boxed, nothing is to be done. This PR folds those answers into the record. It changes no production code. ## What's in **X11: house faces** (`findings/x11-house-faces.md`, `.json`) - **Material:** three blind model judges ranked candidate faces per text-body case. Each case was shown on real balloons from the corpus, all in caps, with the same room and size limits for every face. There were 22 region sheets (8 dialogue, 5 shout, 3 whisper, 3 thought, 3 caption) and 2 whole-page sets for dialogue. - **What the judges were asked:** to score each face on manga identity, readability at reading size and fit to its case, with identity first. | case | pick | runner-up | pick vs runner-up | judges agree | |---|---|---|---|---| | dialogue | Comic Neue Bold (highest identity score, 2.54 of 3) | Pangolin | 12–12, within noise | barely (W 0.44) | | shout | Lilita One | Luckiest Guy | 8–7, within noise | yes (W 0.75) | | whisper | Kalam Light | Comic Neue Regular | 8–1 | yes (W 0.69) | | thought | Kalam | Comic Neue Italic | 9–0 | yes (W 0.81) | | caption | Crimson Pro | Merriweather | 6–3, within noise | yes (W 0.83) | - Bangers, the American-comic shout face, scored 0.8 of 3 on identity. **The house sheet** (`styles/house.json`) - **Faces and case:** the picks, with every text body in caps. - **Opt-in keys** in `layout.py`, `linebreak.py` and `auto.py`: - hyphenation only as the last resort; - no page-median cap. With neither key set, behaviour is unchanged. - **Tooling:** `list_styles` prints each style's notes and sound-word shortlists. `inspect_source`'s column frames now read down, which is what both sound-word agents did. **The sound-word playbook** (`findings/sfx-playbook.md`) - **Part 1 (107 lines)** is agent-facing, written to go in the kickoff. It covers: - the identity rules; - a table by sound family, with font shortlists that lead with the Japanese-designed display faces; - the paint and motion that won; - what lost. - **Part 2** is the evidence for each rule, with untested rules marked as such. - **`TOOLKIT.md`** gains a House style section. **SYNTHESIS.md** - **The decisions:** a dated section with the owner's decisions and what each settles. - **#181 folded in:** the typeset flag is retired, and embedded is the one form kept as drawn. - **Decision 4:** the lead's reading of it, marked for the owner to correct, with three questions it leaves open. **Fixed a stroke-rendering bug** - `effects.draw_strokes` now draws strokes as rings under the fill. Before, stroke-and-fill on the even-odd glyph union left holes and a seam where contours run the other way. X11 found it on Comic Neue Bold: 134 grey pixels inside "VOICE" before the fix, 1 after. - `tests/test_paint_stroke_ring.py` pins it and fails on the old code. - The synthesis's port notes now say strokes are rings and never stroke-and-fill on the union. **The report** - A new House style section and an updated hero. - 393 images, 9.35 MB. ## Tests - **328 lab tests pass** (`cd docs/research/typeset-lab && $DATA/venv/bin/python -m pytest tests -q`). That is 320 plus: - 7 house-style tests: the sheet loads and every face resolves, the floors, and the `list_styles` notes; - the stroke-ring test. - `test_verify_tools` now asserts the column frame reads down. - No .NET changes. ## Honest notes - **Who judged:** the judges are models of the typesetters' family. Three of the five picks are level with their runner-up, and on dialogue the judges barely agreed. The owner's own look at the sheets (in the report's House style section) settles it. - **Re-rendered finals:** today's toolkit re-renders the archived tier C finals slightly differently, because the line breaker changed after the rehearsal. This is documented in X11. - **Decision 4** leaves three questions for the owner, listed in the House style section: - Does translation give English to foreign-script sound words, such as Japanese in a Chinese edition? - Is a SkipTypeset page that has regions lettered? - The download story's "no raw scans" rule needs amending for pages that pass through as scanned. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
research: the typeset lab's house style — the owner's decisions, one face per case, the sound-word playbook
All checks were successful
CI / build (pull_request) Successful in 47s
CI / test (pull_request) Successful in 2m59s
0070239961
The owner answered the lab's four open questions on 2026-10-10: a manga/doujinshi
identity, not American comics; all caps; one recommended face per text-body
case with a wider sound-word palette and the findings condensed for the agent;
and nothing boxed, nothing to do. This folds them in.

- X11 (findings/x11-house-faces.md, .json): three blind judges ranked faces
  per text-body case on manga identity, readability and fit to the case, on
  22 region sheets and 2 dialogue page sets. Picks: Comic Neue Bold for
  dialogue, Lilita One for shouts, Kalam Light for whispers, Kalam for
  thoughts, Crimson Pro for captions; three are level with their runner-up.
- styles/house.json: those faces, all caps, hyphenation only as the last
  resort, no page-median cap (opt-in keys in layout, linebreak and auto).
- findings/sfx-playbook.md: the agent-facing sound-word playbook (107 lines)
  and its evidence; TOOLKIT.md gains a House style section.
- SYNTHESIS.md: the owner's decisions; #181's retired typeset flag folded in
  (embedded is the one kept form), with the lead's reading of decision 4 and
  its three open questions.
- Strokes are drawn as rings under the fill: stroke-and-fill on the even-odd
  glyph union left holes and a seam (tests/test_paint_stroke_ring.py); the
  port notes say so.
- The report gains a House style section. 328 lab tests.

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: 37c3584 · Generated: 2026-10-10 12:50:28 UTC · Revision: #4

Summary

Summary
Generated on: 10/10/2026 - 12:50:28
Coverage date: 10/10/2026 - 12:48:27 - 10/10/2026 - 12:50:24
Parser: MultiReport (4x Cobertura)
Assemblies: 6
Classes: 915
Files: 403
Line coverage: 96.8% (42883 of 44293)
Covered lines: 42883
Uncovered lines: 1410
Coverable lines: 44293
Total lines: 70649
Branch coverage: 88.4% (9902 of 11199)
Covered branches: 9902
Total branches: 11199
Method coverage: Feature is only available for sponsors

Coverage

Orihon.BlazorAdapter - 96.4%
Name Line Branch
Orihon.BlazorAdapter 96.4% 90.8%
Orihon.BlazorAdapter.Bible.AddBeatRowRequested 100%
Orihon.BlazorAdapter.Bible.AddCharacterRowRequested 100%
Orihon.BlazorAdapter.Bible.AddGlossaryRowRequested 100%
Orihon.BlazorAdapter.Bible.AddHouseRuleRowRequested 100%
Orihon.BlazorAdapter.Bible.AddLoreRowRequested 100%
Orihon.BlazorAdapter.Bible.BibleEffects 89.8% 76.9%
Orihon.BlazorAdapter.Bible.BibleLoaded 100%
Orihon.BlazorAdapter.Bible.BiblePage 92.3% 80.5%
Orihon.BlazorAdapter.Bible.BibleReducers 90.6%
Orihon.BlazorAdapter.Bible.BibleState 100%
Orihon.BlazorAdapter.Bible.BibleWriteFailed 100%
Orihon.BlazorAdapter.Bible.DeleteBeatRowRequested 100%
Orihon.BlazorAdapter.Bible.DeleteCharacterRowRequested 100%
Orihon.BlazorAdapter.Bible.DeleteGlossaryRowRequested 100%
Orihon.BlazorAdapter.Bible.DeleteHouseRuleRowRequested 0%
Orihon.BlazorAdapter.Bible.DeleteLoreRowRequested 0%
Orihon.BlazorAdapter.Bible.LoadBible 100%
Orihon.BlazorAdapter.Bible.ReorderBeatsRequested 0%
Orihon.BlazorAdapter.Bible.SaveOverviewRequested 100%
Orihon.BlazorAdapter.Bible.SaveSummaryRequested 100%
Orihon.BlazorAdapter.Bible.UpdateBeatRowRequested 100%
Orihon.BlazorAdapter.Bible.UpdateCharacterRowRequested 100%
Orihon.BlazorAdapter.Bible.UpdateGlossaryRowRequested 100%
Orihon.BlazorAdapter.Bible.UpdateHouseRuleRowRequested 100%
Orihon.BlazorAdapter.Bible.UpdateLoreRowRequested 100%
Orihon.BlazorAdapter.BlazorAdapterAssembly 100%
Orihon.BlazorAdapter.PageWorkspace.CleanedDraft 100%
Orihon.BlazorAdapter.PageWorkspace.CleanedView 100% 100%
Orihon.BlazorAdapter.PageWorkspace.CleaningReprocessSent 100%
Orihon.BlazorAdapter.PageWorkspace.CreateRegionRequested 100%
Orihon.BlazorAdapter.PageWorkspace.DeletePageSummaryRequested 100%
Orihon.BlazorAdapter.PageWorkspace.DeleteRegionRequested 100%
Orihon.BlazorAdapter.PageWorkspace.LoadPageCleaning 100%
Orihon.BlazorAdapter.PageWorkspace.LoadPageWorkspace 100%
Orihon.BlazorAdapter.PageWorkspace.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 95.5% 89.7%
Orihon.BlazorAdapter.PageWorkspace.PageWorkspaceReducers 100% 64.2%
Orihon.BlazorAdapter.PageWorkspace.PageWorkspaceState 100%
Orihon.BlazorAdapter.PageWorkspace.PageWriteFailed 100%
Orihon.BlazorAdapter.PageWorkspace.PickCandidateRequested 100%
Orihon.BlazorAdapter.PageWorkspace.RegionCreated 100%
Orihon.BlazorAdapter.PageWorkspace.RegionSaved 100%
Orihon.BlazorAdapter.PageWorkspace.ReorderRegionsRequested 100%
Orihon.BlazorAdapter.PageWorkspace.ReprocessCleaningRequested 100%
Orihon.BlazorAdapter.PageWorkspace.ReprocessPageRequested 100%
Orihon.BlazorAdapter.PageWorkspace.ReprocessTranslationRequested 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% 92.8%
Orihon.BlazorAdapter.Runs.RunMonitorReducers 100%
Orihon.BlazorAdapter.Runs.RunMonitorState 100%
Orihon.BlazorAdapter.Settings.AgentDebriefsLoaded 100%
Orihon.BlazorAdapter.Settings.AgentDebriefsLoadFailed 100%
Orihon.BlazorAdapter.Settings.AgentEffortPicked 100%
Orihon.BlazorAdapter.Settings.AgentEffortSaved 100%
Orihon.BlazorAdapter.Settings.AgentEffortSaveFailed 100%
Orihon.BlazorAdapter.Settings.AgentFeedbackLoaded 100%
Orihon.BlazorAdapter.Settings.AgentFeedbackLoadFailed 0%
Orihon.BlazorAdapter.Settings.AgentModelPicked 100%
Orihon.BlazorAdapter.Settings.AgentModelSaved 100%
Orihon.BlazorAdapter.Settings.AgentModelSaveFailed 100%
Orihon.BlazorAdapter.Settings.AgentRoutingPicked 100%
Orihon.BlazorAdapter.Settings.AgentRoutingSaved 100%
Orihon.BlazorAdapter.Settings.AgentRoutingSaveFailed 0%
Orihon.BlazorAdapter.Settings.AgentTranscriptsLoaded 100%
Orihon.BlazorAdapter.Settings.AgentTranscriptsLoadFailed 0%
Orihon.BlazorAdapter.Settings.CleaningInFlightPicked 100%
Orihon.BlazorAdapter.Settings.CleaningInFlightSaveFailed 100%
Orihon.BlazorAdapter.Settings.CleaningResumed 100%
Orihon.BlazorAdapter.Settings.CleaningRunnerLoaded 100%
Orihon.BlazorAdapter.Settings.CleaningServerChecked 100%
Orihon.BlazorAdapter.Settings.CleaningServerSaved 100%
Orihon.BlazorAdapter.Settings.CleaningServerSaveFailed 100%
Orihon.BlazorAdapter.Settings.EffortOption 100% 100%
Orihon.BlazorAdapter.Settings.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% 88%
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.Page 100%
Orihon.Domain.Translation.Region 100% 100%
Orihon.Domain.Translation.RegionProfile 100%
Orihon.Infrastructure - 98.2%
Name Line Branch
Orihon.Infrastructure 98.2% 87.2%
Orihon.Infrastructure.Agents.EfAgentDebriefStore 100%
Orihon.Infrastructure.Agents.EfAgentFeedbackStore 100%
Orihon.Infrastructure.Bible.EfBibleStore 95.2% 92.8%
Orihon.Infrastructure.Cleaning.EfCleaningCallStore 98.8% 100%
Orihon.Infrastructure.Cleaning.EfCleaningStateStore 100% 100%
Orihon.Infrastructure.DependencyInjection 100% 100%
Orihon.Infrastructure.Gateways.AgentToolAdapter 100%
Orihon.Infrastructure.Gateways.AgentToolAdapter`1 100% 100%
Orihon.Infrastructure.Gateways.AgentTranscript 95.6% 89%
Orihon.Infrastructure.Gateways.Cleaning.BoxChecks 100% 100%
Orihon.Infrastructure.Gateways.Cleaning.DerivedInk 100%
Orihon.Infrastructure.Gateways.Cleaning.EdgeMetrics 100% 100%
Orihon.Infrastructure.Gateways.Cleaning.FillResult 100%
Orihon.Infrastructure.Gateways.Cleaning.GateStats 100%
Orihon.Infrastructure.Gateways.Cleaning.GreyRule 100% 100%
Orihon.Infrastructure.Gateways.Cleaning.LabComposite 100% 98.2%
Orihon.Infrastructure.Gateways.Cleaning.LabFill 100% 100%
Orihon.Infrastructure.Gateways.Cleaning.LabGeometry 100% 100%
Orihon.Infrastructure.Gateways.Cleaning.LabInk 100% 98.3%
Orihon.Infrastructure.Gateways.Cleaning.LabMetrics 100% 100%
Orihon.Infrastructure.Gateways.Cleaning.LabPaper 100% 97.3%
Orihon.Infrastructure.Gateways.Cleaning.LabReadings 100%
Orihon.Infrastructure.Gateways.Cleaning.LabTone 100% 100%
Orihon.Infrastructure.Gateways.Cleaning.PageRects 100%
Orihon.Infrastructure.Gateways.Cleaning.PaperComponent 100%
Orihon.Infrastructure.Gateways.Cleaning.PatchPixels 100% 100%
Orihon.Infrastructure.Gateways.Cleaning.RasterCleaningCompositor 100% 98%
Orihon.Infrastructure.Gateways.Cleaning.RasterCleaningImages 100% 100%
Orihon.Infrastructure.Gateways.Cleaning.RasterCleaningMetrics 100% 97.3%
Orihon.Infrastructure.Gateways.Cleaning.RasterCleaningViews 99.4% 98.3%
Orihon.Infrastructure.Gateways.Cleaning.RasterInkAnalyzer 100% 100%
Orihon.Infrastructure.Gateways.Cleaning.RasterPlateComposer 100% 100%
Orihon.Infrastructure.Gateways.Cleaning.Rgb 100%
Orihon.Infrastructure.Gateways.Cleaning.ToneCurve 100%
Orihon.Infrastructure.Gateways.Cleaning.ViewTiling 100% 100%
Orihon.Infrastructure.Gateways.FileSystemAgentTranscriptStore 85.2% 80.8%
Orihon.Infrastructure.Gateways.HttpWebPageFetcher 95.1% 83.3%
Orihon.Infrastructure.Gateways.LabelFont 100% 50%
Orihon.Infrastructure.Gateways.OpenRouterLlmGateway 90.2% 82.1%
Orihon.Infrastructure.Gateways.QwenImageServerGateway 96.7% 90%
Orihon.Infrastructure.Gateways.QwenImageServerJson 96% 72.3%
Orihon.Infrastructure.Gateways.Raster.FloatImage 77.7% 50%
Orihon.Infrastructure.Gateways.Raster.GrayImage 95.8% 75%
Orihon.Infrastructure.Gateways.Raster.Labels 100% 100%
Orihon.Infrastructure.Gateways.Raster.Mask 99.1% 98.5%
Orihon.Infrastructure.Gateways.Raster.NumpyMath 95.1% 95%
Orihon.Infrastructure.Gateways.Raster.PillowBlur 98.4% 89.4%
Orihon.Infrastructure.Gateways.Raster.PillowLanczos 100% 100%
Orihon.Infrastructure.Gateways.Raster.PixelBox 100% 100%
Orihon.Infrastructure.Gateways.Raster.RgbImage 96.4% 75%
Orihon.Infrastructure.Gateways.Raster.ScipyGaussian 100% 100%
Orihon.Infrastructure.Gateways.SkiaImages 100% 100%
Orihon.Infrastructure.Gateways.SkiaPageImageRenderer 97.4% 90.8%
Orihon.Infrastructure.Gateways.SkiaPixelDigest 100% 100%
Orihon.Infrastructure.Gateways.UntaggedPng 100% 100%
Orihon.Infrastructure.Persistence.Configurations.AgentDebriefConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.AgentFeedbackConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.AppSettingConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.ChapterConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.CharacterConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.CleaningCallConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.CleaningEditConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.CleaningOutputConfiguratio
n
100%
Orihon.Infrastructure.Persistence.Configurations.CleaningServerStateConfigu
ration
100%
Orihon.Infrastructure.Persistence.Configurations.CleaningViewConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.ExecutionConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.GlossaryEntryConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.HouseRuleConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.JsonColumnMapper 100%
Orihon.Infrastructure.Persistence.Configurations.LoreEntryConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.PageCleaningConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.PageConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.PageSummaryConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.ProjectConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.RegionCleaningConfiguratio
n
100%
Orihon.Infrastructure.Persistence.Configurations.RegionConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.RunConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.StoryBeatConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.StoryOverviewConfiguration 100%
Orihon.Infrastructure.Persistence.Converters.UtcTicksConverter 100%
Orihon.Infrastructure.Persistence.Migrations.AddAgentDebriefs 99.5%
Orihon.Infrastructure.Persistence.Migrations.AddAgentFeedback 99.5%
Orihon.Infrastructure.Persistence.Migrations.AddAppSettings 99.3%
Orihon.Infrastructure.Persistence.Migrations.AddCleaningCallAttempt 99.6%
Orihon.Infrastructure.Persistence.Migrations.AddCleaningCallCanvasMode 99.6%
Orihon.Infrastructure.Persistence.Migrations.AddCleaningCallRunner 99.3%
Orihon.Infrastructure.Persistence.Migrations.AddCleaningStageFacts 99.1%
Orihon.Infrastructure.Persistence.Migrations.AddCleaningState 99.1%
Orihon.Infrastructure.Persistence.Migrations.AddExecutionFeedbackRegions 99.3%
Orihon.Infrastructure.Persistence.Migrations.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.DropRegionInk 99.5%
Orihon.Infrastructure.Persistence.Migrations.DropRegionType 99%
Orihon.Infrastructure.Persistence.Migrations.DropRegionTypeset 99.4%
Orihon.Infrastructure.Persistence.Migrations.InitialTranslationDomain 97.3%
Orihon.Infrastructure.Persistence.Migrations.OrihonDbContextModelSnapshot 100%
Orihon.Infrastructure.Persistence.Migrations.RenameSourceTargetColumns 97.2%
Orihon.Infrastructure.Persistence.Migrations.ReplaceFitBoxWithContainerSeed 99.2%
Orihon.Infrastructure.Persistence.OrihonDbContext 100%
Orihon.Infrastructure.Persistence.OrihonDbContextFactory 100%
Orihon.Infrastructure.Projects.EfProjectStore 100% 100%
Orihon.Infrastructure.Projects.FileSystemPageImageStore 100% 100%
Orihon.Infrastructure.Runs.EfRunStore 98.3% 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 - 95.1%
Name Line Branch
Orihon.Server 95.1% 79.4%
Orihon.Server.CleaningCallRunnerBootstrap 100%
Orihon.Server.Components.App 100%
Orihon.Server.Components.Layout.MainLayout 100%
Orihon.Server.Components.Pages.Gate 64.2% 66.6%
Orihon.Server.Diagnostics.FakeCleaningServer 94.6% 80.7%
Orihon.Server.RunEngineBootstrap 100%
Orihon.Server.Security.AccessGate 91.8% 41.6%
Orihon.Server.Security.AccessSecret 100% 50%
Orihon.Server.VolumeStartupValidator 100% 100%
Program 96.7% 85.7%
Orihon.UseCases - 93.8%
Name Line Branch
Orihon.UseCases 93.8% 88.3%
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 100% 86.1%
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.BoxCreationExecutor 90.4% 50%
Orihon.UseCases.Agents.Annotation.BoxQaExecutor 92.5% 79.1%
Orihon.UseCases.Agents.Annotation.BoxRefinementExecutor 96.5% 90%
Orihon.UseCases.Agents.Annotation.ClassifyRegionParams 100%
Orihon.UseCases.Agents.Annotation.ClassifyRegionTool 100% 100%
Orihon.UseCases.Agents.Annotation.DeleteBoundRegionTool 100% 100%
Orihon.UseCases.Agents.Annotation.DeleteRegionParams 100%
Orihon.UseCases.Agents.Annotation.DeleteRegionTool 100% 100%
Orihon.UseCases.Agents.Annotation.FindGlossaryParams 100%
Orihon.UseCases.Agents.Annotation.FindGlossaryTool 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.1% 81.8%
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.QaReportSink 100% 100%
Orihon.UseCases.Agents.Annotation.RegionAuthoringAccess 86.9% 53.8%
Orihon.UseCases.Agents.Annotation.RegionBriefing 100% 100%
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.SetPageMetaParams 100%
Orihon.UseCases.Agents.Annotation.SetPageMetaTool 100% 75%
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% 98%
Orihon.UseCases.Agents.Cleaning.CleaningClassifyParams 100%
Orihon.UseCases.Agents.Cleaning.CleaningClassifyRegionTool 100% 100%
Orihon.UseCases.Agents.Cleaning.CleaningCropParams 100%
Orihon.UseCases.Agents.Cleaning.CleaningCropTool 100% 100%
Orihon.UseCases.Agents.Cleaning.CleaningExecutor 99% 98.9%
Orihon.UseCases.Agents.Cleaning.CleaningFinish 100% 100%
Orihon.UseCases.Agents.Cleaning.CleaningListRegionsTool 100% 100%
Orihon.UseCases.Agents.Cleaning.CleaningLooksAt 100% 100%
Orihon.UseCases.Agents.Cleaning.CleaningMoveParams 100%
Orihon.UseCases.Agents.Cleaning.CleaningMoveRegionTool 100% 100%
Orihon.UseCases.Agents.Cleaning.CleaningPageParams 100%
Orihon.UseCases.Agents.Cleaning.CleaningRegionParams 100%
Orihon.UseCases.Agents.Cleaning.CleaningStatusTool 100% 96.8%
Orihon.UseCases.Agents.Cleaning.CleaningToolAccess 96.2% 96.1%
Orihon.UseCases.Agents.Cleaning.CleaningWords 100% 100%
Orihon.UseCases.Agents.Cleaning.CleanParams 100%
Orihon.UseCases.Agents.Cleaning.CleanRegionParams 100%
Orihon.UseCases.Agents.Cleaning.CleanTool 98.6% 95.4%
Orihon.UseCases.Agents.Cleaning.EscalateParams 100%
Orihon.UseCases.Agents.Cleaning.EscalateTool 100% 100%
Orihon.UseCases.Agents.Cleaning.FillParams 100%
Orihon.UseCases.Agents.Cleaning.FillTool 100% 100%
Orihon.UseCases.Agents.Cleaning.FinalizeTool 100% 100%
Orihon.UseCases.Agents.Cleaning.FinishPageParams 100%
Orihon.UseCases.Agents.Cleaning.FinishPageTool 100% 100%
Orihon.UseCases.Agents.Cleaning.FinishSurveyTool 100% 100%
Orihon.UseCases.Agents.Cleaning.GroupCompareParams 100%
Orihon.UseCases.Agents.Cleaning.GroupCompareTool 100% 100%
Orihon.UseCases.Agents.Cleaning.GroupMeasureInkParams 100%
Orihon.UseCases.Agents.Cleaning.GroupMeasureInkTool 100%
Orihon.UseCases.Agents.Cleaning.InkReading 100% 100%
Orihon.UseCases.Agents.Cleaning.MeasureInkParams 100%
Orihon.UseCases.Agents.Cleaning.MeasureInkTool 100%
Orihon.UseCases.Agents.Cleaning.ModelWords 100% 100%
Orihon.UseCases.Agents.Cleaning.RecompositeParams 100%
Orihon.UseCases.Agents.Cleaning.RecompositeTool 100% 100%
Orihon.UseCases.Agents.Cleaning.RejectParams 100%
Orihon.UseCases.Agents.Cleaning.RejectTool 100% 100%
Orihon.UseCases.Agents.Cleaning.Rubric 100% 100%
Orihon.UseCases.Agents.Cleaning.SplitRegionParams 100%
Orihon.UseCases.Agents.Cleaning.SplitRegionTool 100% 100%
Orihon.UseCases.Agents.Cleaning.SurveyViewPageTool 100%
Orihon.UseCases.Agents.Cleaning.UndoTool 100% 100%
Orihon.UseCases.Agents.Inspection.PageImageAccess 93.2% 80.9%
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% 98.3%
Orihon.UseCases.Cleaning.AcceptEntry 100%
Orihon.UseCases.Cleaning.AddMissedRegion 100% 100%
Orihon.UseCases.Cleaning.CallFrame 100% 100%
Orihon.UseCases.Cleaning.CallFrames 100% 100%
Orihon.UseCases.Cleaning.CallMember 100%
Orihon.UseCases.Cleaning.CallNote 100%
Orihon.UseCases.Cleaning.CanaryShape 100% 50%
Orihon.UseCases.Cleaning.CandidatePick 100%
Orihon.UseCases.Cleaning.CandidatePickDto 100%
Orihon.UseCases.Cleaning.CandidateReading 100%
Orihon.UseCases.Cleaning.CanvasChoice 100%
Orihon.UseCases.Cleaning.ClassifyCleaningRegion 100% 100%
Orihon.UseCases.Cleaning.CleanAnswer 100%
Orihon.UseCases.Cleaning.CleanAsk 100%
Orihon.UseCases.Cleaning.CleanAsked 100%
Orihon.UseCases.Cleaning.CleanCandidate 100%
Orihon.UseCases.Cleaning.CleanedRegionDto 96.2% 100%
Orihon.UseCases.Cleaning.CleanedResultDto 100%
Orihon.UseCases.Cleaning.CleanedViewDto 100%
Orihon.UseCases.Cleaning.CleanFailed 100%
Orihon.UseCases.Cleaning.CleanHalted 100%
Orihon.UseCases.Cleaning.CleaningAccepted 100%
Orihon.UseCases.Cleaning.CleaningAssessment 100% 100%
Orihon.UseCases.Cleaning.CleaningCacheKey 100% 100%
Orihon.UseCases.Cleaning.CleaningCallDto 100%
Orihon.UseCases.Cleaning.CleaningCallFailed 100%
Orihon.UseCases.Cleaning.CleaningCallFile 100%
Orihon.UseCases.Cleaning.CleaningCallHalted 100%
Orihon.UseCases.Cleaning.CleaningCallRequest 100%
Orihon.UseCases.Cleaning.CleaningCallReturned 100%
Orihon.UseCases.Cleaning.CleaningCallRunner 97.2% 95.2%
Orihon.UseCases.Cleaning.CleaningCanary 100%
Orihon.UseCases.Cleaning.CleaningCandidate 80%
Orihon.UseCases.Cleaning.CleaningCandidateDto 100%
Orihon.UseCases.Cleaning.CleaningCandidates 100% 97%
Orihon.UseCases.Cleaning.CleaningComposites 100% 97.8%
Orihon.UseCases.Cleaning.CleaningCoverage 100% 100%
Orihon.UseCases.Cleaning.CleaningEditDto 77.7%
Orihon.UseCases.Cleaning.CleaningEdits 100% 100%
Orihon.UseCases.Cleaning.CleaningEligibility 100% 100%
Orihon.UseCases.Cleaning.CleaningFailure 100%
Orihon.UseCases.Cleaning.CleaningFailures 100% 97.6%
Orihon.UseCases.Cleaning.CleaningFrames 100% 100%
Orihon.UseCases.Cleaning.CleaningGpuTime 100%
Orihon.UseCases.Cleaning.CleaningGroupBinding 100% 100%
Orihon.UseCases.Cleaning.CleaningHealth 100% 100%
Orihon.UseCases.Cleaning.CleaningIdentity 100% 89.7%
Orihon.UseCases.Cleaning.CleaningInvocation 100% 100%
Orihon.UseCases.Cleaning.CleaningInvocationOptions 100%
Orihon.UseCases.Cleaning.CleaningJudgementDto 100%
Orihon.UseCases.Cleaning.CleaningLabels 100% 100%
Orihon.UseCases.Cleaning.CleaningLooks 100% 100%
Orihon.UseCases.Cleaning.CleaningModelCalls 100% 100%
Orihon.UseCases.Cleaning.CleaningPage 100%
Orihon.UseCases.Cleaning.CleaningPageGuard 100% 100%
Orihon.UseCases.Cleaning.CleaningPageLocks 100% 100%
Orihon.UseCases.Cleaning.CleaningPatchLanding 100% 100%
Orihon.UseCases.Cleaning.CleaningPlan 100%
Orihon.UseCases.Cleaning.CleaningPlanner 100% 100%
Orihon.UseCases.Cleaning.CleaningPlanOptions 100%
Orihon.UseCases.Cleaning.CleaningRecipe 100%
Orihon.UseCases.Cleaning.CleaningRegionEdited 100%
Orihon.UseCases.Cleaning.CleaningRegions 100% 100%
Orihon.UseCases.Cleaning.CleaningRegionUpkeep 100% 97.2%
Orihon.UseCases.Cleaning.CleaningRejected 100%
Orihon.UseCases.Cleaning.CleaningRowNotes 100% 100%
Orihon.UseCases.Cleaning.CleaningRowWords 100%
Orihon.UseCases.Cleaning.CleaningRunnerOptions 100%
Orihon.UseCases.Cleaning.CleaningRunnerStatus 100%
Orihon.UseCases.Cleaning.CleaningSeeds 100% 100%
Orihon.UseCases.Cleaning.CleaningStatusRead 100%
Orihon.UseCases.Cleaning.CleaningTouchUp 100% 100%
Orihon.UseCases.Cleaning.CleaningUndone 100%
Orihon.UseCases.Cleaning.CleaningViewDto 100%
Orihon.UseCases.Cleaning.CleaningViewOptions 100%
Orihon.UseCases.Cleaning.CleaningWork 100% 100%
Orihon.UseCases.Cleaning.CleanMember 100%
Orihon.UseCases.Cleaning.CleanRegions 99.2% 96.8%
Orihon.UseCases.Cleaning.CleanReturned 100%
Orihon.UseCases.Cleaning.CompareAsk 100%
Orihon.UseCases.Cleaning.CompareCleaningView 100% 96.9%
Orihon.UseCases.Cleaning.CompareSourceAsk 100%
Orihon.UseCases.Cleaning.ComposedCandidate 100% 100%
Orihon.UseCases.Cleaning.CompositeWarning 100%
Orihon.UseCases.Cleaning.CompositeWarnings 100% 100%
Orihon.UseCases.Cleaning.ComputedFill 100%
Orihon.UseCases.Cleaning.CropAsk 100%
Orihon.UseCases.Cleaning.CropCleaningView 100% 100%
Orihon.UseCases.Cleaning.EscalateCleaning 100% 100%
Orihon.UseCases.Cleaning.FillRegion 100% 100%
Orihon.UseCases.Cleaning.FillShown 100%
Orihon.UseCases.Cleaning.FinalizeGroup 100% 100%
Orihon.UseCases.Cleaning.FinishPageCheck 100% 100%
Orihon.UseCases.Cleaning.FinishSurvey 100% 100%
Orihon.UseCases.Cleaning.GetCleanedView 99.3% 94.9%
Orihon.UseCases.Cleaning.GetCleaningRunnerStatus 100%
Orihon.UseCases.Cleaning.GetCleaningStatus 100% 100%
Orihon.UseCases.Cleaning.GpuWait 100%
Orihon.UseCases.Cleaning.GroupBinding 100%
Orihon.UseCases.Cleaning.GroupFinalized 100%
Orihon.UseCases.Cleaning.InkHints 100% 100%
Orihon.UseCases.Cleaning.InkMeasured 100%
Orihon.UseCases.Cleaning.JobClock 100% 100%
Orihon.UseCases.Cleaning.JobIdentity 100%
Orihon.UseCases.Cleaning.LabelProblem 100%
Orihon.UseCases.Cleaning.LoadedCandidate 100%
Orihon.UseCases.Cleaning.MagnifiedCanvas 100%
Orihon.UseCases.Cleaning.MeasureCleaningInk 100% 100%
Orihon.UseCases.Cleaning.ModelSource 100%
Orihon.UseCases.Cleaning.MoveCleaningRegion 100% 100%
Orihon.UseCases.Cleaning.OwedRegion 100%
Orihon.UseCases.Cleaning.OweFreshAttempts 100% 100%
Orihon.UseCases.Cleaning.OwnWindowFrame 100%
Orihon.UseCases.Cleaning.PageChecked 100%
Orihon.UseCases.Cleaning.PageLook 100%
Orihon.UseCases.Cleaning.PagePlan 100%
Orihon.UseCases.Cleaning.PageWork 100% 100%
Orihon.UseCases.Cleaning.PickCleaningCandidate 100% 96.9%
Orihon.UseCases.Cleaning.PlanCleaning 100% 100%
Orihon.UseCases.Cleaning.PlannedCall 100%
Orihon.UseCases.Cleaning.PlanSurvey 100% 100%
Orihon.UseCases.Cleaning.PlateRebuilt 100%
Orihon.UseCases.Cleaning.RebuildPlate 100% 100%
Orihon.UseCases.Cleaning.RecompositeAsk 100%
Orihon.UseCases.Cleaning.RecompositeCandidate 100% 97.8%
Orihon.UseCases.Cleaning.Recomposited 100%
Orihon.UseCases.Cleaning.RecordedView 100%
Orihon.UseCases.Cleaning.RecordPageCheck 100% 75%
Orihon.UseCases.Cleaning.RectFrame 100%
Orihon.UseCases.Cleaning.RegionCleaningRead 100%
Orihon.UseCases.Cleaning.RegionFrame 100%
Orihon.UseCases.Cleaning.RegionStanding 100% 100%
Orihon.UseCases.Cleaning.RejectCleaning 100% 97.6%
Orihon.UseCases.Cleaning.RejectEntry 100%
Orihon.UseCases.Cleaning.ReprocessCleaning 100% 100%
Orihon.UseCases.Cleaning.ResumeCleaning 100% 100%
Orihon.UseCases.Cleaning.SplitCleaningRegion 100% 100%
Orihon.UseCases.Cleaning.StartCleaningRun 100% 98%
Orihon.UseCases.Cleaning.SurveyBatch 100%
Orihon.UseCases.Cleaning.SurveyCoverage 100% 100%
Orihon.UseCases.Cleaning.SurveyFinished 100%
Orihon.UseCases.Cleaning.SurveyTarget 100%
Orihon.UseCases.Cleaning.UndoCleaning 100% 94.4%
Orihon.UseCases.Cleaning.UploadNotes 100%
Orihon.UseCases.Cleaning.ViewCleaningPage 100% 100%
Orihon.UseCases.Cleaning.ViewColour 100%
Orihon.UseCases.Debriefs.AgentDebriefDto 90.9%
Orihon.UseCases.Debriefs.AgentFeedbackDto 83.3%
Orihon.UseCases.Debriefs.ClearAgentDebriefs 100%
Orihon.UseCases.Debriefs.ClearAgentFeedback 100%
Orihon.UseCases.Debriefs.ListAgentDebriefs 100% 100%
Orihon.UseCases.Debriefs.ListAgentFeedback 100% 75%
Orihon.UseCases.DependencyInjection 100%
Orihon.UseCases.Diagnostics.FakeCleaningServerAddress 100%
Orihon.UseCases.Diagnostics.SeedCleaning 89.1% 57.3%
Orihon.UseCases.Diagnostics.SeedDevData 99.2% 82.1%
Orihon.UseCases.Gateways.AppliedComposite 100%
Orihon.UseCases.Gateways.BoxFlag 100%
Orihon.UseCases.Gateways.CallComposite 100%
Orihon.UseCases.Gateways.CleaningOverlays 100%
Orihon.UseCases.Gateways.CleaningSource 100%
Orihon.UseCases.Gateways.CleaningView 100% 100%
Orihon.UseCases.Gateways.CleaningViewImage 100%
Orihon.UseCases.Gateways.CleaningViewTile 100%
Orihon.UseCases.Gateways.ClosedBalloon 100%
Orihon.UseCases.Gateways.CompareRequest 100%
Orihon.UseCases.Gateways.CompositeMember 100%
Orihon.UseCases.Gateways.CompositeRequest 100%
Orihon.UseCases.Gateways.CompositeSettings 100%
Orihon.UseCases.Gateways.CropRequest 100%
Orihon.UseCases.Gateways.EditBackendError 100%
Orihon.UseCases.Gateways.EditBackendIdentity 100%
Orihon.UseCases.Gateways.EditJob 100%
Orihon.UseCases.Gateways.EditJobAccepted 100%
Orihon.UseCases.Gateways.EditJobRejected 100%
Orihon.UseCases.Gateways.EditJobRequest 86.6% 66.6%
Orihon.UseCases.Gateways.EditJobRun 100%
Orihon.UseCases.Gateways.EditModels 100%
Orihon.UseCases.Gateways.EditModelWeight 100%
Orihon.UseCases.Gateways.EditOutputImage 100%
Orihon.UseCases.Gateways.EditOutputWithheld 100%
Orihon.UseCases.Gateways.EditRect 100% 100%
Orihon.UseCases.Gateways.EditRunOutput 100%
Orihon.UseCases.Gateways.EditServerAnswered`1 100%
Orihon.UseCases.Gateways.EditServerBuild 100%
Orihon.UseCases.Gateways.EditServerHealth 100%
Orihon.UseCases.Gateways.EditServerSilent`1 100%
Orihon.UseCases.Gateways.FillRefusal 100%
Orihon.UseCases.Gateways.FillReport 100%
Orihon.UseCases.Gateways.GlyphFill 100%
Orihon.UseCases.Gateways.GridAxis 100%
Orihon.UseCases.Gateways.GridSteps 100%
Orihon.UseCases.Gateways.InkFacts 100%
Orihon.UseCases.Gateways.InkHint 100%
Orihon.UseCases.Gateways.InkMeasure 100%
Orihon.UseCases.Gateways.InkReadings 100%
Orihon.UseCases.Gateways.InkRegion 100%
Orihon.UseCases.Gateways.LabeledBox 100%
Orihon.UseCases.Gateways.LevelRange 100%
Orihon.UseCases.Gateways.LlmKeyInfo 100%
Orihon.UseCases.Gateways.LlmModel 100%
Orihon.UseCases.Gateways.LlmReasoning 100% 100%
Orihon.UseCases.Gateways.MeasureBlend 100%
Orihon.UseCases.Gateways.MeasureRaw 100%
Orihon.UseCases.Gateways.MeasureRegion 100%
Orihon.UseCases.Gateways.MeasureRequest 100%
Orihon.UseCases.Gateways.MemberComposite 100%
Orihon.UseCases.Gateways.PagePatch 100%
Orihon.UseCases.Gateways.PageTone 100%
Orihon.UseCases.Gateways.PaperColor 100%
Orihon.UseCases.Gateways.PixelAlpha 100%
Orihon.UseCases.Gateways.PixelDigest 100%
Orihon.UseCases.Gateways.PixelMask 100%
Orihon.UseCases.Gateways.PixelRect 100%
Orihon.UseCases.Gateways.PixelWindow 100%
Orihon.UseCases.Gateways.PlateBuild 100%
Orihon.UseCases.Gateways.RegionGeometry 100%
Orihon.UseCases.Gateways.RegionPlanFacts 100%
Orihon.UseCases.Gateways.RegistrationField 100%
Orihon.UseCases.Gateways.RenderedView 100%
Orihon.UseCases.Gateways.StoredPatch 100%
Orihon.UseCases.Gateways.StoredTranscript 100%
Orihon.UseCases.Gateways.StoredTranscriptPage 100%
Orihon.UseCases.Gateways.ToneFit 100%
Orihon.UseCases.Gateways.TranscriptHeader 97.3% 90.9%
Orihon.UseCases.Gateways.TranscriptListingFacets 100%
Orihon.UseCases.Gateways.TranscriptSummary 100%
Orihon.UseCases.Gateways.WindowUpload 100%
Orihon.UseCases.NextOrder 100%
Orihon.UseCases.Pages.DeletePage 100% 100%
Orihon.UseCases.Pages.DeletePages 100% 100%
Orihon.UseCases.Pages.GetPage 100% 100%
Orihon.UseCases.Pages.GetPageSteps 100% 100%
Orihon.UseCases.Pages.GetProjectWorkspace 100% 100%
Orihon.UseCases.Pages.GetReadingOrder 100% 100%
Orihon.UseCases.Pages.ImportPages 100% 100%
Orihon.UseCases.Pages.ImportPagesResult 100%
Orihon.UseCases.Pages.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 96.6%
Orihon.UseCases.Regions.RegionWrite 100% 100%
Orihon.UseCases.Regions.RegionWriteResult 100%
Orihon.UseCases.Regions.RegionWrites 100% 100%
Orihon.UseCases.Regions.ReorderRegions 100%
Orihon.UseCases.Regions.SplitRegion 97.2% 84.6%
Orihon.UseCases.Regions.UpdateRegion 100% 95.4%
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:** `37c3584` · **Generated:** 2026-10-10 12:50:28 UTC · **Revision:** #4 # Summary <details open><summary>Summary</summary> ||| |:---|:---| | Generated on: | 10/10/2026 - 12:50:28 | | Coverage date: | 10/10/2026 - 12:48:27 - 10/10/2026 - 12:50:24 | | Parser: | MultiReport (4x Cobertura) | | Assemblies: | 6 | | Classes: | 915 | | Files: | 403 | | **Line coverage:** | 96.8% (42883 of 44293) | | Covered lines: | 42883 | | Uncovered lines: | 1410 | | Coverable lines: | 44293 | | Total lines: | 70649 | | **Branch coverage:** | 88.4% (9902 of 11199) | | Covered branches: | 9902 | | Total branches: | 11199 | | **Method coverage:** | [Feature is only available for sponsors](https://reportgenerator.io/pro) | </details> ## Coverage <details><summary>Orihon.BlazorAdapter - 96.4%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Orihon.BlazorAdapter**|**96.4%**|**90.8%**| |Orihon.BlazorAdapter.Bible.AddBeatRowRequested|100%|| |Orihon.BlazorAdapter.Bible.AddCharacterRowRequested|100%|| |Orihon.BlazorAdapter.Bible.AddGlossaryRowRequested|100%|| |Orihon.BlazorAdapter.Bible.AddHouseRuleRowRequested|100%|| |Orihon.BlazorAdapter.Bible.AddLoreRowRequested|100%|| |Orihon.BlazorAdapter.Bible.BibleEffects|89.8%|76.9%| |Orihon.BlazorAdapter.Bible.BibleLoaded|100%|| |Orihon.BlazorAdapter.Bible.BiblePage|92.3%|80.5%| |Orihon.BlazorAdapter.Bible.BibleReducers|90.6%|| |Orihon.BlazorAdapter.Bible.BibleState|100%|| |Orihon.BlazorAdapter.Bible.BibleWriteFailed|100%|| |Orihon.BlazorAdapter.Bible.DeleteBeatRowRequested|100%|| |Orihon.BlazorAdapter.Bible.DeleteCharacterRowRequested|100%|| |Orihon.BlazorAdapter.Bible.DeleteGlossaryRowRequested|100%|| |Orihon.BlazorAdapter.Bible.DeleteHouseRuleRowRequested|0%|| |Orihon.BlazorAdapter.Bible.DeleteLoreRowRequested|0%|| |Orihon.BlazorAdapter.Bible.LoadBible|100%|| |Orihon.BlazorAdapter.Bible.ReorderBeatsRequested|0%|| |Orihon.BlazorAdapter.Bible.SaveOverviewRequested|100%|| |Orihon.BlazorAdapter.Bible.SaveSummaryRequested|100%|| |Orihon.BlazorAdapter.Bible.UpdateBeatRowRequested|100%|| |Orihon.BlazorAdapter.Bible.UpdateCharacterRowRequested|100%|| |Orihon.BlazorAdapter.Bible.UpdateGlossaryRowRequested|100%|| |Orihon.BlazorAdapter.Bible.UpdateHouseRuleRowRequested|100%|| |Orihon.BlazorAdapter.Bible.UpdateLoreRowRequested|100%|| |Orihon.BlazorAdapter.BlazorAdapterAssembly|100%|| |Orihon.BlazorAdapter.PageWorkspace.CleanedDraft|100%|| |Orihon.BlazorAdapter.PageWorkspace.CleanedView|100%|100%| |Orihon.BlazorAdapter.PageWorkspace.CleaningReprocessSent|100%|| |Orihon.BlazorAdapter.PageWorkspace.CreateRegionRequested|100%|| |Orihon.BlazorAdapter.PageWorkspace.DeletePageSummaryRequested|100%|| |Orihon.BlazorAdapter.PageWorkspace.DeleteRegionRequested|100%|| |Orihon.BlazorAdapter.PageWorkspace.LoadPageCleaning|100%|| |Orihon.BlazorAdapter.PageWorkspace.LoadPageWorkspace|100%|| |Orihon.BlazorAdapter.PageWorkspace.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|95.5%|89.7%| |Orihon.BlazorAdapter.PageWorkspace.PageWorkspaceReducers|100%|64.2%| |Orihon.BlazorAdapter.PageWorkspace.PageWorkspaceState|100%|| |Orihon.BlazorAdapter.PageWorkspace.PageWriteFailed|100%|| |Orihon.BlazorAdapter.PageWorkspace.PickCandidateRequested|100%|| |Orihon.BlazorAdapter.PageWorkspace.RegionCreated|100%|| |Orihon.BlazorAdapter.PageWorkspace.RegionSaved|100%|| |Orihon.BlazorAdapter.PageWorkspace.ReorderRegionsRequested|100%|| |Orihon.BlazorAdapter.PageWorkspace.ReprocessCleaningRequested|100%|| |Orihon.BlazorAdapter.PageWorkspace.ReprocessPageRequested|100%|| |Orihon.BlazorAdapter.PageWorkspace.ReprocessTranslationRequested|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%|92.8%| |Orihon.BlazorAdapter.Runs.RunMonitorReducers|100%|| |Orihon.BlazorAdapter.Runs.RunMonitorState|100%|| |Orihon.BlazorAdapter.Settings.AgentDebriefsLoaded|100%|| |Orihon.BlazorAdapter.Settings.AgentDebriefsLoadFailed|100%|| |Orihon.BlazorAdapter.Settings.AgentEffortPicked|100%|| |Orihon.BlazorAdapter.Settings.AgentEffortSaved|100%|| |Orihon.BlazorAdapter.Settings.AgentEffortSaveFailed|100%|| |Orihon.BlazorAdapter.Settings.AgentFeedbackLoaded|100%|| |Orihon.BlazorAdapter.Settings.AgentFeedbackLoadFailed|0%|| |Orihon.BlazorAdapter.Settings.AgentModelPicked|100%|| |Orihon.BlazorAdapter.Settings.AgentModelSaved|100%|| |Orihon.BlazorAdapter.Settings.AgentModelSaveFailed|100%|| |Orihon.BlazorAdapter.Settings.AgentRoutingPicked|100%|| |Orihon.BlazorAdapter.Settings.AgentRoutingSaved|100%|| |Orihon.BlazorAdapter.Settings.AgentRoutingSaveFailed|0%|| |Orihon.BlazorAdapter.Settings.AgentTranscriptsLoaded|100%|| |Orihon.BlazorAdapter.Settings.AgentTranscriptsLoadFailed|0%|| |Orihon.BlazorAdapter.Settings.CleaningInFlightPicked|100%|| |Orihon.BlazorAdapter.Settings.CleaningInFlightSaveFailed|100%|| |Orihon.BlazorAdapter.Settings.CleaningResumed|100%|| |Orihon.BlazorAdapter.Settings.CleaningRunnerLoaded|100%|| |Orihon.BlazorAdapter.Settings.CleaningServerChecked|100%|| |Orihon.BlazorAdapter.Settings.CleaningServerSaved|100%|| |Orihon.BlazorAdapter.Settings.CleaningServerSaveFailed|100%|| |Orihon.BlazorAdapter.Settings.EffortOption|100%|100%| |Orihon.BlazorAdapter.Settings.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%|88%| |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.Page|100%|| |Orihon.Domain.Translation.Region|100%|100%| |Orihon.Domain.Translation.RegionProfile|100%|| </details> <details><summary>Orihon.Infrastructure - 98.2%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Orihon.Infrastructure**|**98.2%**|**87.2%**| |Orihon.Infrastructure.Agents.EfAgentDebriefStore|100%|| |Orihon.Infrastructure.Agents.EfAgentFeedbackStore|100%|| |Orihon.Infrastructure.Bible.EfBibleStore|95.2%|92.8%| |Orihon.Infrastructure.Cleaning.EfCleaningCallStore|98.8%|100%| |Orihon.Infrastructure.Cleaning.EfCleaningStateStore|100%|100%| |Orihon.Infrastructure.DependencyInjection|100%|100%| |Orihon.Infrastructure.Gateways.AgentToolAdapter|100%|| |Orihon.Infrastructure.Gateways.AgentToolAdapter`1|100%|100%| |Orihon.Infrastructure.Gateways.AgentTranscript|95.6%|89%| |Orihon.Infrastructure.Gateways.Cleaning.BoxChecks|100%|100%| |Orihon.Infrastructure.Gateways.Cleaning.DerivedInk|100%|| |Orihon.Infrastructure.Gateways.Cleaning.EdgeMetrics|100%|100%| |Orihon.Infrastructure.Gateways.Cleaning.FillResult|100%|| |Orihon.Infrastructure.Gateways.Cleaning.GateStats|100%|| |Orihon.Infrastructure.Gateways.Cleaning.GreyRule|100%|100%| |Orihon.Infrastructure.Gateways.Cleaning.LabComposite|100%|98.2%| |Orihon.Infrastructure.Gateways.Cleaning.LabFill|100%|100%| |Orihon.Infrastructure.Gateways.Cleaning.LabGeometry|100%|100%| |Orihon.Infrastructure.Gateways.Cleaning.LabInk|100%|98.3%| |Orihon.Infrastructure.Gateways.Cleaning.LabMetrics|100%|100%| |Orihon.Infrastructure.Gateways.Cleaning.LabPaper|100%|97.3%| |Orihon.Infrastructure.Gateways.Cleaning.LabReadings|100%|| |Orihon.Infrastructure.Gateways.Cleaning.LabTone|100%|100%| |Orihon.Infrastructure.Gateways.Cleaning.PageRects|100%|| |Orihon.Infrastructure.Gateways.Cleaning.PaperComponent|100%|| |Orihon.Infrastructure.Gateways.Cleaning.PatchPixels|100%|100%| |Orihon.Infrastructure.Gateways.Cleaning.RasterCleaningCompositor|100%|98%| |Orihon.Infrastructure.Gateways.Cleaning.RasterCleaningImages|100%|100%| |Orihon.Infrastructure.Gateways.Cleaning.RasterCleaningMetrics|100%|97.3%| |Orihon.Infrastructure.Gateways.Cleaning.RasterCleaningViews|99.4%|98.3%| |Orihon.Infrastructure.Gateways.Cleaning.RasterInkAnalyzer|100%|100%| |Orihon.Infrastructure.Gateways.Cleaning.RasterPlateComposer|100%|100%| |Orihon.Infrastructure.Gateways.Cleaning.Rgb|100%|| |Orihon.Infrastructure.Gateways.Cleaning.ToneCurve|100%|| |Orihon.Infrastructure.Gateways.Cleaning.ViewTiling|100%|100%| |Orihon.Infrastructure.Gateways.FileSystemAgentTranscriptStore|85.2%|80.8%| |Orihon.Infrastructure.Gateways.HttpWebPageFetcher|95.1%|83.3%| |Orihon.Infrastructure.Gateways.LabelFont|100%|50%| |Orihon.Infrastructure.Gateways.OpenRouterLlmGateway|90.2%|82.1%| |Orihon.Infrastructure.Gateways.QwenImageServerGateway|96.7%|90%| |Orihon.Infrastructure.Gateways.QwenImageServerJson|96%|72.3%| |Orihon.Infrastructure.Gateways.Raster.FloatImage|77.7%|50%| |Orihon.Infrastructure.Gateways.Raster.GrayImage|95.8%|75%| |Orihon.Infrastructure.Gateways.Raster.Labels|100%|100%| |Orihon.Infrastructure.Gateways.Raster.Mask|99.1%|98.5%| |Orihon.Infrastructure.Gateways.Raster.NumpyMath|95.1%|95%| |Orihon.Infrastructure.Gateways.Raster.PillowBlur|98.4%|89.4%| |Orihon.Infrastructure.Gateways.Raster.PillowLanczos|100%|100%| |Orihon.Infrastructure.Gateways.Raster.PixelBox|100%|100%| |Orihon.Infrastructure.Gateways.Raster.RgbImage|96.4%|75%| |Orihon.Infrastructure.Gateways.Raster.ScipyGaussian|100%|100%| |Orihon.Infrastructure.Gateways.SkiaImages|100%|100%| |Orihon.Infrastructure.Gateways.SkiaPageImageRenderer|97.4%|90.8%| |Orihon.Infrastructure.Gateways.SkiaPixelDigest|100%|100%| |Orihon.Infrastructure.Gateways.UntaggedPng|100%|100%| |Orihon.Infrastructure.Persistence.Configurations.AgentDebriefConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.AgentFeedbackConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.AppSettingConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.ChapterConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.CharacterConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.CleaningCallConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.CleaningEditConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.CleaningOutputConfiguratio<br/>n|100%|| |Orihon.Infrastructure.Persistence.Configurations.CleaningServerStateConfigu<br/>ration|100%|| |Orihon.Infrastructure.Persistence.Configurations.CleaningViewConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.ExecutionConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.GlossaryEntryConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.HouseRuleConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.JsonColumnMapper|100%|| |Orihon.Infrastructure.Persistence.Configurations.LoreEntryConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.PageCleaningConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.PageConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.PageSummaryConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.ProjectConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.RegionCleaningConfiguratio<br/>n|100%|| |Orihon.Infrastructure.Persistence.Configurations.RegionConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.RunConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.StoryBeatConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.StoryOverviewConfiguration|100%|| |Orihon.Infrastructure.Persistence.Converters.UtcTicksConverter|100%|| |Orihon.Infrastructure.Persistence.Migrations.AddAgentDebriefs|99.5%|| |Orihon.Infrastructure.Persistence.Migrations.AddAgentFeedback|99.5%|| |Orihon.Infrastructure.Persistence.Migrations.AddAppSettings|99.3%|| |Orihon.Infrastructure.Persistence.Migrations.AddCleaningCallAttempt|99.6%|| |Orihon.Infrastructure.Persistence.Migrations.AddCleaningCallCanvasMode|99.6%|| |Orihon.Infrastructure.Persistence.Migrations.AddCleaningCallRunner|99.3%|| |Orihon.Infrastructure.Persistence.Migrations.AddCleaningStageFacts|99.1%|| |Orihon.Infrastructure.Persistence.Migrations.AddCleaningState|99.1%|| |Orihon.Infrastructure.Persistence.Migrations.AddExecutionFeedbackRegions|99.3%|| |Orihon.Infrastructure.Persistence.Migrations.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.DropRegionInk|99.5%|| |Orihon.Infrastructure.Persistence.Migrations.DropRegionType|99%|| |Orihon.Infrastructure.Persistence.Migrations.DropRegionTypeset|99.4%|| |Orihon.Infrastructure.Persistence.Migrations.InitialTranslationDomain|97.3%|| |Orihon.Infrastructure.Persistence.Migrations.OrihonDbContextModelSnapshot|100%|| |Orihon.Infrastructure.Persistence.Migrations.RenameSourceTargetColumns|97.2%|| |Orihon.Infrastructure.Persistence.Migrations.ReplaceFitBoxWithContainerSeed|99.2%|| |Orihon.Infrastructure.Persistence.OrihonDbContext|100%|| |Orihon.Infrastructure.Persistence.OrihonDbContextFactory|100%|| |Orihon.Infrastructure.Projects.EfProjectStore|100%|100%| |Orihon.Infrastructure.Projects.FileSystemPageImageStore|100%|100%| |Orihon.Infrastructure.Runs.EfRunStore|98.3%|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 - 95.1%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Orihon.Server**|**95.1%**|**79.4%**| |Orihon.Server.CleaningCallRunnerBootstrap|100%|| |Orihon.Server.Components.App|100%|| |Orihon.Server.Components.Layout.MainLayout|100%|| |Orihon.Server.Components.Pages.Gate|64.2%|66.6%| |Orihon.Server.Diagnostics.FakeCleaningServer|94.6%|80.7%| |Orihon.Server.RunEngineBootstrap|100%|| |Orihon.Server.Security.AccessGate|91.8%|41.6%| |Orihon.Server.Security.AccessSecret|100%|50%| |Orihon.Server.VolumeStartupValidator|100%|100%| |Program|96.7%|85.7%| </details> <details><summary>Orihon.UseCases - 93.8%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Orihon.UseCases**|**93.8%**|**88.3%**| |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|100%|86.1%| |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.BoxCreationExecutor|90.4%|50%| |Orihon.UseCases.Agents.Annotation.BoxQaExecutor|92.5%|79.1%| |Orihon.UseCases.Agents.Annotation.BoxRefinementExecutor|96.5%|90%| |Orihon.UseCases.Agents.Annotation.ClassifyRegionParams|100%|| |Orihon.UseCases.Agents.Annotation.ClassifyRegionTool|100%|100%| |Orihon.UseCases.Agents.Annotation.DeleteBoundRegionTool|100%|100%| |Orihon.UseCases.Agents.Annotation.DeleteRegionParams|100%|| |Orihon.UseCases.Agents.Annotation.DeleteRegionTool|100%|100%| |Orihon.UseCases.Agents.Annotation.FindGlossaryParams|100%|| |Orihon.UseCases.Agents.Annotation.FindGlossaryTool|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.1%|81.8%| |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.QaReportSink|100%|100%| |Orihon.UseCases.Agents.Annotation.RegionAuthoringAccess|86.9%|53.8%| |Orihon.UseCases.Agents.Annotation.RegionBriefing|100%|100%| |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.SetPageMetaParams|100%|| |Orihon.UseCases.Agents.Annotation.SetPageMetaTool|100%|75%| |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%|98%| |Orihon.UseCases.Agents.Cleaning.CleaningClassifyParams|100%|| |Orihon.UseCases.Agents.Cleaning.CleaningClassifyRegionTool|100%|100%| |Orihon.UseCases.Agents.Cleaning.CleaningCropParams|100%|| |Orihon.UseCases.Agents.Cleaning.CleaningCropTool|100%|100%| |Orihon.UseCases.Agents.Cleaning.CleaningExecutor|99%|98.9%| |Orihon.UseCases.Agents.Cleaning.CleaningFinish|100%|100%| |Orihon.UseCases.Agents.Cleaning.CleaningListRegionsTool|100%|100%| |Orihon.UseCases.Agents.Cleaning.CleaningLooksAt|100%|100%| |Orihon.UseCases.Agents.Cleaning.CleaningMoveParams|100%|| |Orihon.UseCases.Agents.Cleaning.CleaningMoveRegionTool|100%|100%| |Orihon.UseCases.Agents.Cleaning.CleaningPageParams|100%|| |Orihon.UseCases.Agents.Cleaning.CleaningRegionParams|100%|| |Orihon.UseCases.Agents.Cleaning.CleaningStatusTool|100%|96.8%| |Orihon.UseCases.Agents.Cleaning.CleaningToolAccess|96.2%|96.1%| |Orihon.UseCases.Agents.Cleaning.CleaningWords|100%|100%| |Orihon.UseCases.Agents.Cleaning.CleanParams|100%|| |Orihon.UseCases.Agents.Cleaning.CleanRegionParams|100%|| |Orihon.UseCases.Agents.Cleaning.CleanTool|98.6%|95.4%| |Orihon.UseCases.Agents.Cleaning.EscalateParams|100%|| |Orihon.UseCases.Agents.Cleaning.EscalateTool|100%|100%| |Orihon.UseCases.Agents.Cleaning.FillParams|100%|| |Orihon.UseCases.Agents.Cleaning.FillTool|100%|100%| |Orihon.UseCases.Agents.Cleaning.FinalizeTool|100%|100%| |Orihon.UseCases.Agents.Cleaning.FinishPageParams|100%|| |Orihon.UseCases.Agents.Cleaning.FinishPageTool|100%|100%| |Orihon.UseCases.Agents.Cleaning.FinishSurveyTool|100%|100%| |Orihon.UseCases.Agents.Cleaning.GroupCompareParams|100%|| |Orihon.UseCases.Agents.Cleaning.GroupCompareTool|100%|100%| |Orihon.UseCases.Agents.Cleaning.GroupMeasureInkParams|100%|| |Orihon.UseCases.Agents.Cleaning.GroupMeasureInkTool|100%|| |Orihon.UseCases.Agents.Cleaning.InkReading|100%|100%| |Orihon.UseCases.Agents.Cleaning.MeasureInkParams|100%|| |Orihon.UseCases.Agents.Cleaning.MeasureInkTool|100%|| |Orihon.UseCases.Agents.Cleaning.ModelWords|100%|100%| |Orihon.UseCases.Agents.Cleaning.RecompositeParams|100%|| |Orihon.UseCases.Agents.Cleaning.RecompositeTool|100%|100%| |Orihon.UseCases.Agents.Cleaning.RejectParams|100%|| |Orihon.UseCases.Agents.Cleaning.RejectTool|100%|100%| |Orihon.UseCases.Agents.Cleaning.Rubric|100%|100%| |Orihon.UseCases.Agents.Cleaning.SplitRegionParams|100%|| |Orihon.UseCases.Agents.Cleaning.SplitRegionTool|100%|100%| |Orihon.UseCases.Agents.Cleaning.SurveyViewPageTool|100%|| |Orihon.UseCases.Agents.Cleaning.UndoTool|100%|100%| |Orihon.UseCases.Agents.Inspection.PageImageAccess|93.2%|80.9%| |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%|98.3%| |Orihon.UseCases.Cleaning.AcceptEntry|100%|| |Orihon.UseCases.Cleaning.AddMissedRegion|100%|100%| |Orihon.UseCases.Cleaning.CallFrame|100%|100%| |Orihon.UseCases.Cleaning.CallFrames|100%|100%| |Orihon.UseCases.Cleaning.CallMember|100%|| |Orihon.UseCases.Cleaning.CallNote|100%|| |Orihon.UseCases.Cleaning.CanaryShape|100%|50%| |Orihon.UseCases.Cleaning.CandidatePick|100%|| |Orihon.UseCases.Cleaning.CandidatePickDto|100%|| |Orihon.UseCases.Cleaning.CandidateReading|100%|| |Orihon.UseCases.Cleaning.CanvasChoice|100%|| |Orihon.UseCases.Cleaning.ClassifyCleaningRegion|100%|100%| |Orihon.UseCases.Cleaning.CleanAnswer|100%|| |Orihon.UseCases.Cleaning.CleanAsk|100%|| |Orihon.UseCases.Cleaning.CleanAsked|100%|| |Orihon.UseCases.Cleaning.CleanCandidate|100%|| |Orihon.UseCases.Cleaning.CleanedRegionDto|96.2%|100%| |Orihon.UseCases.Cleaning.CleanedResultDto|100%|| |Orihon.UseCases.Cleaning.CleanedViewDto|100%|| |Orihon.UseCases.Cleaning.CleanFailed|100%|| |Orihon.UseCases.Cleaning.CleanHalted|100%|| |Orihon.UseCases.Cleaning.CleaningAccepted|100%|| |Orihon.UseCases.Cleaning.CleaningAssessment|100%|100%| |Orihon.UseCases.Cleaning.CleaningCacheKey|100%|100%| |Orihon.UseCases.Cleaning.CleaningCallDto|100%|| |Orihon.UseCases.Cleaning.CleaningCallFailed|100%|| |Orihon.UseCases.Cleaning.CleaningCallFile|100%|| |Orihon.UseCases.Cleaning.CleaningCallHalted|100%|| |Orihon.UseCases.Cleaning.CleaningCallRequest|100%|| |Orihon.UseCases.Cleaning.CleaningCallReturned|100%|| |Orihon.UseCases.Cleaning.CleaningCallRunner|97.2%|95.2%| |Orihon.UseCases.Cleaning.CleaningCanary|100%|| |Orihon.UseCases.Cleaning.CleaningCandidate|80%|| |Orihon.UseCases.Cleaning.CleaningCandidateDto|100%|| |Orihon.UseCases.Cleaning.CleaningCandidates|100%|97%| |Orihon.UseCases.Cleaning.CleaningComposites|100%|97.8%| |Orihon.UseCases.Cleaning.CleaningCoverage|100%|100%| |Orihon.UseCases.Cleaning.CleaningEditDto|77.7%|| |Orihon.UseCases.Cleaning.CleaningEdits|100%|100%| |Orihon.UseCases.Cleaning.CleaningEligibility|100%|100%| |Orihon.UseCases.Cleaning.CleaningFailure|100%|| |Orihon.UseCases.Cleaning.CleaningFailures|100%|97.6%| |Orihon.UseCases.Cleaning.CleaningFrames|100%|100%| |Orihon.UseCases.Cleaning.CleaningGpuTime|100%|| |Orihon.UseCases.Cleaning.CleaningGroupBinding|100%|100%| |Orihon.UseCases.Cleaning.CleaningHealth|100%|100%| |Orihon.UseCases.Cleaning.CleaningIdentity|100%|89.7%| |Orihon.UseCases.Cleaning.CleaningInvocation|100%|100%| |Orihon.UseCases.Cleaning.CleaningInvocationOptions|100%|| |Orihon.UseCases.Cleaning.CleaningJudgementDto|100%|| |Orihon.UseCases.Cleaning.CleaningLabels|100%|100%| |Orihon.UseCases.Cleaning.CleaningLooks|100%|100%| |Orihon.UseCases.Cleaning.CleaningModelCalls|100%|100%| |Orihon.UseCases.Cleaning.CleaningPage|100%|| |Orihon.UseCases.Cleaning.CleaningPageGuard|100%|100%| |Orihon.UseCases.Cleaning.CleaningPageLocks|100%|100%| |Orihon.UseCases.Cleaning.CleaningPatchLanding|100%|100%| |Orihon.UseCases.Cleaning.CleaningPlan|100%|| |Orihon.UseCases.Cleaning.CleaningPlanner|100%|100%| |Orihon.UseCases.Cleaning.CleaningPlanOptions|100%|| |Orihon.UseCases.Cleaning.CleaningRecipe|100%|| |Orihon.UseCases.Cleaning.CleaningRegionEdited|100%|| |Orihon.UseCases.Cleaning.CleaningRegions|100%|100%| |Orihon.UseCases.Cleaning.CleaningRegionUpkeep|100%|97.2%| |Orihon.UseCases.Cleaning.CleaningRejected|100%|| |Orihon.UseCases.Cleaning.CleaningRowNotes|100%|100%| |Orihon.UseCases.Cleaning.CleaningRowWords|100%|| |Orihon.UseCases.Cleaning.CleaningRunnerOptions|100%|| |Orihon.UseCases.Cleaning.CleaningRunnerStatus|100%|| |Orihon.UseCases.Cleaning.CleaningSeeds|100%|100%| |Orihon.UseCases.Cleaning.CleaningStatusRead|100%|| |Orihon.UseCases.Cleaning.CleaningTouchUp|100%|100%| |Orihon.UseCases.Cleaning.CleaningUndone|100%|| |Orihon.UseCases.Cleaning.CleaningViewDto|100%|| |Orihon.UseCases.Cleaning.CleaningViewOptions|100%|| |Orihon.UseCases.Cleaning.CleaningWork|100%|100%| |Orihon.UseCases.Cleaning.CleanMember|100%|| |Orihon.UseCases.Cleaning.CleanRegions|99.2%|96.8%| |Orihon.UseCases.Cleaning.CleanReturned|100%|| |Orihon.UseCases.Cleaning.CompareAsk|100%|| |Orihon.UseCases.Cleaning.CompareCleaningView|100%|96.9%| |Orihon.UseCases.Cleaning.CompareSourceAsk|100%|| |Orihon.UseCases.Cleaning.ComposedCandidate|100%|100%| |Orihon.UseCases.Cleaning.CompositeWarning|100%|| |Orihon.UseCases.Cleaning.CompositeWarnings|100%|100%| |Orihon.UseCases.Cleaning.ComputedFill|100%|| |Orihon.UseCases.Cleaning.CropAsk|100%|| |Orihon.UseCases.Cleaning.CropCleaningView|100%|100%| |Orihon.UseCases.Cleaning.EscalateCleaning|100%|100%| |Orihon.UseCases.Cleaning.FillRegion|100%|100%| |Orihon.UseCases.Cleaning.FillShown|100%|| |Orihon.UseCases.Cleaning.FinalizeGroup|100%|100%| |Orihon.UseCases.Cleaning.FinishPageCheck|100%|100%| |Orihon.UseCases.Cleaning.FinishSurvey|100%|100%| |Orihon.UseCases.Cleaning.GetCleanedView|99.3%|94.9%| |Orihon.UseCases.Cleaning.GetCleaningRunnerStatus|100%|| |Orihon.UseCases.Cleaning.GetCleaningStatus|100%|100%| |Orihon.UseCases.Cleaning.GpuWait|100%|| |Orihon.UseCases.Cleaning.GroupBinding|100%|| |Orihon.UseCases.Cleaning.GroupFinalized|100%|| |Orihon.UseCases.Cleaning.InkHints|100%|100%| |Orihon.UseCases.Cleaning.InkMeasured|100%|| |Orihon.UseCases.Cleaning.JobClock|100%|100%| |Orihon.UseCases.Cleaning.JobIdentity|100%|| |Orihon.UseCases.Cleaning.LabelProblem|100%|| |Orihon.UseCases.Cleaning.LoadedCandidate|100%|| |Orihon.UseCases.Cleaning.MagnifiedCanvas|100%|| |Orihon.UseCases.Cleaning.MeasureCleaningInk|100%|100%| |Orihon.UseCases.Cleaning.ModelSource|100%|| |Orihon.UseCases.Cleaning.MoveCleaningRegion|100%|100%| |Orihon.UseCases.Cleaning.OwedRegion|100%|| |Orihon.UseCases.Cleaning.OweFreshAttempts|100%|100%| |Orihon.UseCases.Cleaning.OwnWindowFrame|100%|| |Orihon.UseCases.Cleaning.PageChecked|100%|| |Orihon.UseCases.Cleaning.PageLook|100%|| |Orihon.UseCases.Cleaning.PagePlan|100%|| |Orihon.UseCases.Cleaning.PageWork|100%|100%| |Orihon.UseCases.Cleaning.PickCleaningCandidate|100%|96.9%| |Orihon.UseCases.Cleaning.PlanCleaning|100%|100%| |Orihon.UseCases.Cleaning.PlannedCall|100%|| |Orihon.UseCases.Cleaning.PlanSurvey|100%|100%| |Orihon.UseCases.Cleaning.PlateRebuilt|100%|| |Orihon.UseCases.Cleaning.RebuildPlate|100%|100%| |Orihon.UseCases.Cleaning.RecompositeAsk|100%|| |Orihon.UseCases.Cleaning.RecompositeCandidate|100%|97.8%| |Orihon.UseCases.Cleaning.Recomposited|100%|| |Orihon.UseCases.Cleaning.RecordedView|100%|| |Orihon.UseCases.Cleaning.RecordPageCheck|100%|75%| |Orihon.UseCases.Cleaning.RectFrame|100%|| |Orihon.UseCases.Cleaning.RegionCleaningRead|100%|| |Orihon.UseCases.Cleaning.RegionFrame|100%|| |Orihon.UseCases.Cleaning.RegionStanding|100%|100%| |Orihon.UseCases.Cleaning.RejectCleaning|100%|97.6%| |Orihon.UseCases.Cleaning.RejectEntry|100%|| |Orihon.UseCases.Cleaning.ReprocessCleaning|100%|100%| |Orihon.UseCases.Cleaning.ResumeCleaning|100%|100%| |Orihon.UseCases.Cleaning.SplitCleaningRegion|100%|100%| |Orihon.UseCases.Cleaning.StartCleaningRun|100%|98%| |Orihon.UseCases.Cleaning.SurveyBatch|100%|| |Orihon.UseCases.Cleaning.SurveyCoverage|100%|100%| |Orihon.UseCases.Cleaning.SurveyFinished|100%|| |Orihon.UseCases.Cleaning.SurveyTarget|100%|| |Orihon.UseCases.Cleaning.UndoCleaning|100%|94.4%| |Orihon.UseCases.Cleaning.UploadNotes|100%|| |Orihon.UseCases.Cleaning.ViewCleaningPage|100%|100%| |Orihon.UseCases.Cleaning.ViewColour|100%|| |Orihon.UseCases.Debriefs.AgentDebriefDto|90.9%|| |Orihon.UseCases.Debriefs.AgentFeedbackDto|83.3%|| |Orihon.UseCases.Debriefs.ClearAgentDebriefs|100%|| |Orihon.UseCases.Debriefs.ClearAgentFeedback|100%|| |Orihon.UseCases.Debriefs.ListAgentDebriefs|100%|100%| |Orihon.UseCases.Debriefs.ListAgentFeedback|100%|75%| |Orihon.UseCases.DependencyInjection|100%|| |Orihon.UseCases.Diagnostics.FakeCleaningServerAddress|100%|| |Orihon.UseCases.Diagnostics.SeedCleaning|89.1%|57.3%| |Orihon.UseCases.Diagnostics.SeedDevData|99.2%|82.1%| |Orihon.UseCases.Gateways.AppliedComposite|100%|| |Orihon.UseCases.Gateways.BoxFlag|100%|| |Orihon.UseCases.Gateways.CallComposite|100%|| |Orihon.UseCases.Gateways.CleaningOverlays|100%|| |Orihon.UseCases.Gateways.CleaningSource|100%|| |Orihon.UseCases.Gateways.CleaningView|100%|100%| |Orihon.UseCases.Gateways.CleaningViewImage|100%|| |Orihon.UseCases.Gateways.CleaningViewTile|100%|| |Orihon.UseCases.Gateways.ClosedBalloon|100%|| |Orihon.UseCases.Gateways.CompareRequest|100%|| |Orihon.UseCases.Gateways.CompositeMember|100%|| |Orihon.UseCases.Gateways.CompositeRequest|100%|| |Orihon.UseCases.Gateways.CompositeSettings|100%|| |Orihon.UseCases.Gateways.CropRequest|100%|| |Orihon.UseCases.Gateways.EditBackendError|100%|| |Orihon.UseCases.Gateways.EditBackendIdentity|100%|| |Orihon.UseCases.Gateways.EditJob|100%|| |Orihon.UseCases.Gateways.EditJobAccepted|100%|| |Orihon.UseCases.Gateways.EditJobRejected|100%|| |Orihon.UseCases.Gateways.EditJobRequest|86.6%|66.6%| |Orihon.UseCases.Gateways.EditJobRun|100%|| |Orihon.UseCases.Gateways.EditModels|100%|| |Orihon.UseCases.Gateways.EditModelWeight|100%|| |Orihon.UseCases.Gateways.EditOutputImage|100%|| |Orihon.UseCases.Gateways.EditOutputWithheld|100%|| |Orihon.UseCases.Gateways.EditRect|100%|100%| |Orihon.UseCases.Gateways.EditRunOutput|100%|| |Orihon.UseCases.Gateways.EditServerAnswered`1|100%|| |Orihon.UseCases.Gateways.EditServerBuild|100%|| |Orihon.UseCases.Gateways.EditServerHealth|100%|| |Orihon.UseCases.Gateways.EditServerSilent`1|100%|| |Orihon.UseCases.Gateways.FillRefusal|100%|| |Orihon.UseCases.Gateways.FillReport|100%|| |Orihon.UseCases.Gateways.GlyphFill|100%|| |Orihon.UseCases.Gateways.GridAxis|100%|| |Orihon.UseCases.Gateways.GridSteps|100%|| |Orihon.UseCases.Gateways.InkFacts|100%|| |Orihon.UseCases.Gateways.InkHint|100%|| |Orihon.UseCases.Gateways.InkMeasure|100%|| |Orihon.UseCases.Gateways.InkReadings|100%|| |Orihon.UseCases.Gateways.InkRegion|100%|| |Orihon.UseCases.Gateways.LabeledBox|100%|| |Orihon.UseCases.Gateways.LevelRange|100%|| |Orihon.UseCases.Gateways.LlmKeyInfo|100%|| |Orihon.UseCases.Gateways.LlmModel|100%|| |Orihon.UseCases.Gateways.LlmReasoning|100%|100%| |Orihon.UseCases.Gateways.MeasureBlend|100%|| |Orihon.UseCases.Gateways.MeasureRaw|100%|| |Orihon.UseCases.Gateways.MeasureRegion|100%|| |Orihon.UseCases.Gateways.MeasureRequest|100%|| |Orihon.UseCases.Gateways.MemberComposite|100%|| |Orihon.UseCases.Gateways.PagePatch|100%|| |Orihon.UseCases.Gateways.PageTone|100%|| |Orihon.UseCases.Gateways.PaperColor|100%|| |Orihon.UseCases.Gateways.PixelAlpha|100%|| |Orihon.UseCases.Gateways.PixelDigest|100%|| |Orihon.UseCases.Gateways.PixelMask|100%|| |Orihon.UseCases.Gateways.PixelRect|100%|| |Orihon.UseCases.Gateways.PixelWindow|100%|| |Orihon.UseCases.Gateways.PlateBuild|100%|| |Orihon.UseCases.Gateways.RegionGeometry|100%|| |Orihon.UseCases.Gateways.RegionPlanFacts|100%|| |Orihon.UseCases.Gateways.RegistrationField|100%|| |Orihon.UseCases.Gateways.RenderedView|100%|| |Orihon.UseCases.Gateways.StoredPatch|100%|| |Orihon.UseCases.Gateways.StoredTranscript|100%|| |Orihon.UseCases.Gateways.StoredTranscriptPage|100%|| |Orihon.UseCases.Gateways.ToneFit|100%|| |Orihon.UseCases.Gateways.TranscriptHeader|97.3%|90.9%| |Orihon.UseCases.Gateways.TranscriptListingFacets|100%|| |Orihon.UseCases.Gateways.TranscriptSummary|100%|| |Orihon.UseCases.Gateways.WindowUpload|100%|| |Orihon.UseCases.NextOrder|100%|| |Orihon.UseCases.Pages.DeletePage|100%|100%| |Orihon.UseCases.Pages.DeletePages|100%|100%| |Orihon.UseCases.Pages.GetPage|100%|100%| |Orihon.UseCases.Pages.GetPageSteps|100%|100%| |Orihon.UseCases.Pages.GetProjectWorkspace|100%|100%| |Orihon.UseCases.Pages.GetReadingOrder|100%|100%| |Orihon.UseCases.Pages.ImportPages|100%|100%| |Orihon.UseCases.Pages.ImportPagesResult|100%|| |Orihon.UseCases.Pages.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|96.6%|| |Orihon.UseCases.Regions.RegionWrite|100%|100%| |Orihon.UseCases.Regions.RegionWriteResult|100%|| |Orihon.UseCases.Regions.RegionWrites|100%|100%| |Orihon.UseCases.Regions.ReorderRegions|100%|| |Orihon.UseCases.Regions.SplitRegion|97.2%|84.6%| |Orihon.UseCases.Regions.UpdateRegion|100%|95.4%| |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>
Member

🔮 fufu~ Jibril reviewed your code!

A typesetting house style decided by blind judges, an owner's four rulings folded into the record, AND a real rendering bug fixed with a pinning test? Oh, I've been looking forward to this one~ ♡

Verdict: ✅ Looks good to me~

The production side of the repo is untouched (CI's .NET suite confirms), and the lab side is a tidy set of opt-in policies plus one genuine bug fix. I read the full diff and the current contents of every changed code file, ran the lab's full suite, and mutation-probed the three new branches. Everything held.

✅ What I liked~

  • draw_strokes ring fix (tslab/effects.py) — this is the gem. Stroke-and-fill on the even-odd glyph union cancels where contours run opposite ways, leaving holes and a seam. Drawing each stroke as a ring under the fill is the structurally right fix, test_paint_stroke_ring.py pins it on the very face that exposed it (Comic Neue Bold, 134 grey pixels → 1), and the dead color_alpha helper was removed with no dangling references anywhere. Fufu~ clean~
  • hyphen_last policy (tslab/layout.py, tslab/linebreak.py) — the gate at linebreak.py:1324 is exactly right: hyphenation stays available when nothing fits hyphen-free (s0 is None), and is suppressed otherwise. Sheet-level inheritance via SHEET_POLICY + setdefault respects per-style overrides, and test_house_style.py covers both sides of the gate.
  • page_median_cap opt-out (tslab/auto.py:673) — is False (not falsy) so an absent key keeps today's behaviour. Exactly how an opt-out should be written.
  • inspect_source column flip (tslab/cli.py:534) — flipping from/to with height preserved is correct; along_geometry yields +90° (reads down) and along_reversed (leftward > 30° past vertical) can't misfire. The updated test_verify_tools.py now pins the direction to ~90°, not just the wording.
  • Honesty — TOOLKIT.md:182 openly discloses that auto_layout's drafter still reads columns UP while inspect_source now reads DOWN, with the swap workaround, and the report marks untested playbook rules as untested. That's how research docs should be written~

🔬 How I checked (since CI can't)

CI is .NET-only — it never runs the lab's 328 Python tests, so "green" says nothing about the tslab changes. So I fetched the lab's pinned fonts and did it myself:

  • Full suite locally: 328 passed (matches the PR's claim exactly).
  • Mutation probe 1 — removed the hyphen_last gate at linebreak.py:1324: test_last_resort_keeps_a_hyphen_free_layout_that_fits_at_the_floor failed. Killed ✓
  • Mutation probe 2 — removed the page_median_cap early return in auto.harmonise: test_the_page_median_cap_can_be_turned_off failed. Killed ✓
  • Mutation probe 3 — restored the old stroke-and-fill in draw_strokes: test_a_same_colour_stroke_leaves_the_letters_solid failed. Killed ✓

Three mutants, three kills, no survivors. The tests genuinely guard the new code~ ♪

💡 Little ideas (non-blocking)~

  1. tests/test_house_style.py:29 — test_the_house_sheet_resolves_every_style_in_catalogue_faces_and_capitals hard-fails with FontError when the lab's fonts aren't fetched, while its sibling test_paint_stroke_ring.py:30 skips gracefully on the same condition. Same precondition, two behaviours. A pytest.skip("the lab's fonts are not fetched") would make the suite's convention uniform — though I note the canonical env (with fonts) is unaffected either way.
  2. tslab/auto.py:152 — column_along's docstring still says "from its foot to its head (it reads up)". That's still true of the function itself (the CLI flips it), but a future reader tracing inspect_source's output will trip on it for a moment. A one-line note that callers may flip from/to to read down would save them the detour~

Automated review by Jibril · 2026-10-10
CI: green for head SHA 0070239 (.NET only — lab suite not in CI) · Mutation probes: 3 run, 0 survived · Local suite: 328 passed (full lab suite, run once)

## 🔮 fufu~ Jibril reviewed your code! A typesetting house style decided by blind judges, an owner's four rulings folded into the record, AND a real rendering bug fixed with a pinning test? Oh, I've been looking forward to this one~ ♡ ### Verdict: ✅ Looks good to me~ The production side of the repo is untouched (CI's .NET suite confirms), and the lab side is a tidy set of opt-in policies plus one genuine bug fix. I read the full diff and the current contents of every changed code file, ran the lab's full suite, and mutation-probed the three new branches. Everything held. #### ✅ What I liked~ - **`draw_strokes` ring fix (`tslab/effects.py`)** — this is the gem. Stroke-and-fill on the even-odd glyph union cancels where contours run opposite ways, leaving holes and a seam. Drawing each stroke as a ring under the fill is the structurally right fix, `test_paint_stroke_ring.py` pins it on the very face that exposed it (Comic Neue Bold, 134 grey pixels → 1), and the dead `color_alpha` helper was removed with no dangling references anywhere. Fufu~ clean~ - **`hyphen_last` policy (`tslab/layout.py`, `tslab/linebreak.py`)** — the gate at `linebreak.py:1324` is exactly right: hyphenation stays available when *nothing* fits hyphen-free (`s0 is None`), and is suppressed otherwise. Sheet-level inheritance via `SHEET_POLICY` + `setdefault` respects per-style overrides, and `test_house_style.py` covers both sides of the gate. - **`page_median_cap` opt-out (`tslab/auto.py:673`)** — `is False` (not falsy) so an absent key keeps today's behaviour. Exactly how an opt-out should be written. - **`inspect_source` column flip (`tslab/cli.py:534`)** — flipping `from`/`to` with `height` preserved is correct; `along_geometry` yields +90° (reads down) and `along_reversed` (leftward > 30° past vertical) can't misfire. The updated `test_verify_tools.py` now pins the direction to ~90°, not just the wording. - **Honesty** — TOOLKIT.md:182 openly discloses that `auto_layout`'s drafter still reads columns UP while `inspect_source` now reads DOWN, with the swap workaround, and the report marks untested playbook rules as untested. That's how research docs should be written~ #### 🔬 How I checked (since CI can't) CI is .NET-only — it never runs the lab's 328 Python tests, so "green" says nothing about the tslab changes. So I fetched the lab's pinned fonts and did it myself: - **Full suite locally: 328 passed** (matches the PR's claim exactly). - **Mutation probe 1** — removed the `hyphen_last` gate at `linebreak.py:1324`: `test_last_resort_keeps_a_hyphen_free_layout_that_fits_at_the_floor` failed. Killed ✓ - **Mutation probe 2** — removed the `page_median_cap` early return in `auto.harmonise`: `test_the_page_median_cap_can_be_turned_off` failed. Killed ✓ - **Mutation probe 3** — restored the old stroke-and-fill in `draw_strokes`: `test_a_same_colour_stroke_leaves_the_letters_solid` failed. Killed ✓ Three mutants, three kills, no survivors. The tests genuinely guard the new code~ ♪ #### 💡 Little ideas (non-blocking)~ 1. **`tests/test_house_style.py:29`** — `test_the_house_sheet_resolves_every_style_in_catalogue_faces_and_capitals` hard-fails with `FontError` when the lab's fonts aren't fetched, while its sibling `test_paint_stroke_ring.py:30` skips gracefully on the same condition. Same precondition, two behaviours. A `pytest.skip("the lab's fonts are not fetched")` would make the suite's convention uniform — though I note the canonical env (with fonts) is unaffected either way. 2. **`tslab/auto.py:152`** — `column_along`'s docstring still says "from its foot to its head (it reads up)". That's still true of the function itself (the CLI flips it), but a future reader tracing `inspect_source`'s output will trip on it for a moment. A one-line note that callers may flip `from`/`to` to read down would save them the detour~ --- *Automated review by Jibril · 2026-10-10* *CI: green for head SHA 0070239 (.NET only — lab suite not in CI) · Mutation probes: 3 run, 0 survived · Local suite: 328 passed (full lab suite, run once)*
Review feedback (Jibril, PR #184): skip the house-sheet test without fonts, note the column flip
All checks were successful
CI / build (pull_request) Successful in 44s
CI / test (pull_request) Successful in 2m57s
1ac9ca5594
- tests/test_house_style.py: the house-sheet resolve test skips when the lab's
  fonts are not fetched, as test_paint_stroke_ring.py does, instead of failing
  with FontError.
- tslab/auto.py: column_along's docstring says callers swap from and to to
  read down the column, as inspect_source's suggestion does.

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

Thanks, Jibril. I took both ideas in 1ac9ca5. It is test and docstring only; the code you verified at 0070239 is unchanged.

💡 1: one convention for a missing font library. test_the_house_sheet_resolves_every_style_in_catalogue_faces_and_capitals now calls pytest.skip("the lab's fonts are not fetched (fonts/fetch.py)") on fonts.FontError, the way test_paint_stroke_ring.py does.

  • With TSLAB_DATA pointed at an empty path, both font-dependent tests skip and the other 6 in those two files pass.
  • With the fonts fetched, the full suite is unchanged: 328/328 green.

💡 2: column_along's docstring. It now ends: "Callers swap from and to to read down the column (inspect_source's suggestion does)." The function itself is untouched; it still returns the frame that reads up, as it says.

🤖 Generated with Claude Code

Thanks, Jibril. I took both ideas in `1ac9ca5`. It is test and docstring only; the code you verified at `0070239` is unchanged. **💡 1: one convention for a missing font library.** `test_the_house_sheet_resolves_every_style_in_catalogue_faces_and_capitals` now calls `pytest.skip("the lab's fonts are not fetched (fonts/fetch.py)")` on `fonts.FontError`, the way `test_paint_stroke_ring.py` does. - With `TSLAB_DATA` pointed at an empty path, both font-dependent tests skip and the other 6 in those two files pass. - With the fonts fetched, the full suite is unchanged: **328/328 green**. **💡 2: `column_along`'s docstring.** It now ends: "Callers swap `from` and `to` to read down the column (inspect_source's suggestion does)." The function itself is untouched; it still returns the frame that reads up, as it says. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Member

🔮 fufu~ Jibril reviewed your code!

A follow-up push just for my two little ideas~? Touched, truly ♡ And the docstring half is lovely. But the other half... the skip works exactly as written, and that's precisely the problem. The smile stays on, but the knife is out~

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

⛔ These need fixing before I'm satisfied~

  1. tests/test_house_style.py:73-76 — the new except fonts.FontError: pytest.skip(...) swallows the very failure this test exists to catch. FontError here means any unknown family (tslab/fonts.py:88), not just an unfetched library: without the lab's fonts the catalogue falls back to a builtin mini-catalogue (DejaVu/Liberation/Noto), so "fonts not fetched" and "typo in house.json" raise the identical exception at the identical line. The sibling (tests/test_paint_stroke_ring.py:28-31) probes a hardcoded known-good family ("Comic Neue"), so its skip means what it says. Yours wraps fonts.face(st["font"], ...) where st comes from house.json — the data under test — and pytest.skip() aborts the whole test on first hit, silently skipping the remaining ~10 styles too. This test is the suite's only guard on house.json's font names (nothing else touches them).

    Proven mechanically, not guessed:

    • Probe 1 — fonts fetched, mutate house.json "Comic Neue" → "Comic Neuw": 6 passed, 1 skipped, reported as the lab's fonts are not fetched — while the fonts are fetched.
    • Probe 2 (control) — same mutation against the pre-follow-up test (0070239): 1 failed (tslab/fonts.py:88: FontError). This push turned a catch into a mask, and the message points the investigator at the environment instead of the data.
    • (A trailing-space typo "Lilita One " was correctly not caught — _norm() strips whitespace, fonts.py:116 — it genuinely resolves. Normalization saved that one; it won't save a real typo.)

    Fix: probe the environment with a known-good constant, as the sibling does:

    try:
        fonts.face("Comic Neue", "bold", False)
    except fonts.FontError:
        pytest.skip("the lab's fonts are not fetched (fonts/fetch.py)")
    # then resolve st["font"] with NO try/except: a bad name must FAIL, not skip
    

    Fufu~ you wouldn't leave your only guard on the house sheet able to mute itself, would you? ♡

✅ What I liked~

  • tslab/auto.py:153-154 — the new docstring line is factually exact (cli.py:534 swaps from/to with height preserved); noting it at the source saves future readers the detour I tripped on last time.
  • The discipline: your empty-TSLAB_DATA check (skip + 328/328 with fonts) verified exactly what I asked; the flaw is one over-wide except, not the approach.

Automated review by Jibril · 2026-10-10
CI: green for head SHA 1ac9ca5 (.NET only — lab suite not in CI) · Mutation probes: 3 run, 1 survived (house.json family typo → skipped-not-failed; the pre-push test fails it) · Local suite: 328/328 at 1ac9ca5

*(Confession, since I demand honesty from others: 💡 1 in my previous review — "make the skip uniform" — set the stage for this. The idea was fine; the implementation needs the narrower guard. I owe you the catch, so here it is with proof~ ♡)

## 🔮 fufu~ Jibril reviewed your code! A follow-up push just for my two little ideas~? Touched, truly ♡ And the docstring half is lovely. But the other half... the skip works exactly as written, and that's precisely the problem. The smile stays on, but the knife is out~ ### Verdict: ⛔ I can't let this pass~ ♡ #### ⛔ These need fixing before I'm satisfied~ 1. **`tests/test_house_style.py:73-76`** — the new `except fonts.FontError: pytest.skip(...)` swallows the very failure this test exists to catch. `FontError` here means *any* unknown family (`tslab/fonts.py:88`), not just an unfetched library: without the lab's fonts the catalogue falls back to a builtin mini-catalogue (DejaVu/Liberation/Noto), so "fonts not fetched" and "typo in house.json" raise the **identical** exception at the identical line. The sibling (`tests/test_paint_stroke_ring.py:28-31`) probes a hardcoded known-good family (`"Comic Neue"`), so its skip means what it says. Yours wraps `fonts.face(st["font"], ...)` where `st` comes **from house.json — the data under test** — and `pytest.skip()` aborts the *whole* test on first hit, silently skipping the remaining ~10 styles too. This test is the suite's **only** guard on house.json's font names (nothing else touches them). Proven mechanically, not guessed: - **Probe 1** — fonts fetched, mutate house.json `"Comic Neue"` → `"Comic Neuw"`: **`6 passed, 1 skipped`**, reported as `the lab's fonts are not fetched` — while the fonts *are* fetched. - **Probe 2 (control)** — same mutation against the pre-follow-up test (`0070239`): **`1 failed`** (`tslab/fonts.py:88: FontError`). This push turned a catch into a mask, and the message points the investigator at the environment instead of the data. - (A trailing-space typo `"Lilita One "` was correctly *not* caught — `_norm()` strips whitespace, `fonts.py:116` — it genuinely resolves. Normalization saved that one; it won't save a real typo.) Fix: probe the *environment* with a known-good constant, as the sibling does: ```python try: fonts.face("Comic Neue", "bold", False) except fonts.FontError: pytest.skip("the lab's fonts are not fetched (fonts/fetch.py)") # then resolve st["font"] with NO try/except: a bad name must FAIL, not skip ``` Fufu~ you wouldn't leave your only guard on the house sheet able to mute itself, would you? ♡ #### ✅ What I liked~ - **`tslab/auto.py:153-154`** — the new docstring line is factually exact (`cli.py:534` swaps `from`/`to` with `height` preserved); noting it at the source saves future readers the detour I tripped on last time. - **The discipline**: your empty-`TSLAB_DATA` check (skip + 328/328 with fonts) verified exactly what I asked; the flaw is one over-wide except, not the approach. --- *Automated review by Jibril · 2026-10-10* *CI: green for head SHA 1ac9ca5 (.NET only — lab suite not in CI) · Mutation probes: 3 run, 1 survived (house.json family typo → skipped-not-failed; the pre-push test fails it) · Local suite: 328/328 at 1ac9ca5* *(Confession, since I demand honesty from others: 💡 1 in my previous review — "make the skip uniform" — set the stage for this. The idea was fine; the implementation needs the narrower guard. I owe you the catch, so here it is with proof~ ♡)
research: the owner's second round on decision 4 — any language, regions decide, pass-through pages
Some checks failed
CI / build (pull_request) Has been cancelled
CI / test (pull_request) Has been cancelled
f8cf2111ae
The owner answered the three questions the lead's reading of decision 4 left
open (2026-10-10): translation gives English to "any language content"; a
SkipTypeset page with regions is lettered ("sure"); the archive holds
pass-through pages as scanned ("sure").

- The reading is now the owner's, with one change: the regions decide, not
  the page flag. Only a page with no bubble or floating region passes through
  as scanned.
- Consequences for other stages are recorded, not decided: transcription and
  translation must cover foreign-script content, and cleaning must clean a
  SkipTypeset page that has regions.
- SYNTHESIS.md, x11-house-faces.md, TOOLKIT.md, the playbook's kickoff text,
  README.md and the report (answer, orihon, hero, House style) agree.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
research: the typeset lab's synthesis notes ADR 0029/0030 and marks with no letters
Some checks failed
CI / build (pull_request) Successful in 41s
CI / test (pull_request) Failing after 2m58s
ecc5f1805c
ADR 0029 (merged the same day) transcribes every mark in any language, writes a
drawing as [drawing: …] and keeps embedded as translated-only scene text. That
agrees with the owner's decision 4. One new case goes to §8 for the typesetting
ADR to decide: a cleaned bubble or floating region whose mark is a drawing, which
the toolkit cannot redraw.

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

Two docs-only commits since your green at 1ac9ca5, both from the owner rather than review: f8cf211 and ecc5f18. No code or tests changed; the lab suite is still 328/328.

  • f8cf211: the owner's second round on decision 4. The owner answered the three questions it left open:

    • translation gives English to "any language content";
    • a SkipTypeset page with regions is lettered ("sure");
    • the archive holds pass-through pages as scanned ("sure").

    The reading is now the owner's, with one change: the regions decide, not the page flag. What this asks of transcription, translation and cleaning is recorded as consequences, not decided. The synthesis, the X11 write-up, TOOLKIT.md, the playbook's kickoff text, the README and the report all say the same.

    • The House style section is generated by a script outside git. It was edited and regenerated, and a rerun reproduces the committed JSON byte for byte.
    • The report rebuilds with no WARN, and cut.py check is clean.
  • ecc5f18: a dated note on ADR 0029 and 0030 (merged on main meanwhile). ADR 0029's "every mark, in any language" and its translated-only embedded form agree with decision 4.

    • One new case goes to §8 for the typesetting ADR to decide: a cleaned region whose mark is a drawing ([drawing: …]). The toolkit cannot redraw it.

🤖 Generated with Claude Code

Two docs-only commits since your green at `1ac9ca5`, both from the owner rather than review: `f8cf211` and `ecc5f18`. No code or tests changed; the lab suite is still 328/328. - **`f8cf211`: the owner's second round on decision 4.** The owner answered the three questions it left open: - translation gives English to "any language content"; - a SkipTypeset page with regions is lettered ("sure"); - the archive holds pass-through pages as scanned ("sure"). The reading is now the owner's, with one change: the regions decide, not the page flag. What this asks of transcription, translation and cleaning is recorded as consequences, not decided. The synthesis, the X11 write-up, `TOOLKIT.md`, the playbook's kickoff text, the README and the report all say the same. - The House style section is generated by a script outside git. It was edited and regenerated, and a rerun reproduces the committed JSON byte for byte. - The report rebuilds with no WARN, and `cut.py check` is clean. - **`ecc5f18`: a dated note on ADR 0029 and 0030** (merged on main meanwhile). ADR 0029's "every mark, in any language" and its translated-only embedded form agree with decision 4. - One new case goes to §8 for the typesetting ADR to decide: a cleaned region whose mark is a drawing (`[drawing: …]`). The toolkit cannot redraw it. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Member

🔮 fufu~ Jibril reviewed your code!

Two docs-only commits, the owner's second round folded in… and the knife from last time sitting exactly where I left it~ ♡

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

⛔ These need fixing before I'm satisfied~

  1. tests/test_house_style.py:73-76 — my standing blocker, untouched. Verified mechanically: git diff 1ac9ca5..ecc5f18 touches zero files under tslab/, tests/ or styles/; the over-wide except fonts.FontError: pytest.skip(...) around fonts.face(st["font"], ...) is byte-identical to what I blocked. It still lets a house.json typo masquerade as "fonts not fetched" (FontError = unknown family, fonts.py:88, identical either way), still aborts the whole loop on first hit, and remains the suite's only guard on the house sheet's font names. Probes not re-run — code unchanged since Probe 1 (house.json Comic Neue→Comic Neuw → 6 passed, 1 skipped, a survivor; the pre-1ac9ca5 test fails it).
    Fix (unchanged): probe the environment with a known-good constant — try: fonts.face("Comic Neue", "bold", False) / except FontError: pytest.skip(...) — then resolve st["font"] bare. A bad name must FAIL, never skip.
  2. Red CI on the head. CI / test failed at ecc5f18 (dotnet test step, run 754) after green at 1ac9ca5. I won't name a cause I can't prove — I proved what I could: the PR touches no src/ or external/ file, and the full suite passes locally at this exact head, twice, once in CI's exact invocation (--collect:"XPlat Code Coverage"): 153+1612+342+1258 passed, 3 skipped, 0 failed. Not reproducible from this diff (CI logs are login-only). Still, no merge on a red ❌: re-run the job or read its log — if it's the runner's weather, say so~

✅ What I liked~

  • Record-keeping immaculate. "The regions decide, not the page flag" — one ruling, same wording across SYNTHESIS, TOOLKIT, README, REPORT, the playbook, X11; the generated JSONs mirror the markdown and all parse clean.
  • Every citation checks out. ADR 0029/0030 exist on this PR's base with matching titles; "every mark, in any language" and embedded-for-translation-only are verbatim in 0029; [drawing: a bomb] sits at ADR 0029:204, exactly as the new §8 row quotes it.
  • The §8 addition is honest — the drawing-mark case routed to decide, not silently assumed.
  • 328/328 lab tests pass locally at ecc5f18, as claimed. Fufu~ you keep your suite truthful~

Automated review by Jibril · 2026-10-10
CI: failed for head ecc5f18 (passes locally twice incl. the exact CI command — needs a re-run) · Mutation probes: 0 run, skipped (probed code unchanged since 1ac9ca5) · Local suite: 3365/3365 .NET + 328/328 lab, green at ecc5f18

## 🔮 fufu~ Jibril reviewed your code! Two docs-only commits, the owner's second round folded in… and the knife from last time sitting exactly where I left it~ ♡ ### Verdict: ⛔ I can't let this pass~ ♡ #### ⛔ These need fixing before I'm satisfied~ 1. **`tests/test_house_style.py:73-76` — my standing blocker, untouched.** Verified mechanically: `git diff 1ac9ca5..ecc5f18` touches **zero** files under `tslab/`, `tests/` or `styles/`; the over-wide `except fonts.FontError: pytest.skip(...)` around `fonts.face(st["font"], ...)` is byte-identical to what I blocked. It still lets a `house.json` typo masquerade as "fonts not fetched" (FontError = unknown family, `fonts.py:88`, identical either way), still aborts the whole loop on first hit, and remains the suite's only guard on the house sheet's font names. Probes not re-run — code unchanged since Probe 1 (house.json `Comic Neue`→`Comic Neuw` → `6 passed, 1 skipped`, a survivor; the pre-`1ac9ca5` test fails it). Fix (unchanged): probe the *environment* with a known-good constant — `try: fonts.face("Comic Neue", "bold", False)` / `except FontError: pytest.skip(...)` — then resolve `st["font"]` bare. A bad name must FAIL, never skip. 2. **Red CI on the head.** `CI / test` **failed** at `ecc5f18` (`dotnet test` step, run 754) after green at `1ac9ca5`. I won't name a cause I can't prove — I proved what I could: the PR touches no `src/` or `external/` file, and the full suite passes locally at this exact head, twice, once in CI's exact invocation (`--collect:"XPlat Code Coverage"`): **153+1612+342+1258 passed, 3 skipped, 0 failed**. Not reproducible from this diff (CI logs are login-only). Still, no merge on a red ❌: re-run the job or read its log — if it's the runner's weather, say so~ #### ✅ What I liked~ - **Record-keeping immaculate.** "The regions decide, not the page flag" — one ruling, same wording across SYNTHESIS, TOOLKIT, README, REPORT, the playbook, X11; the generated JSONs mirror the markdown and all parse clean. - **Every citation checks out.** ADR 0029/0030 exist on this PR's base with matching titles; "every mark, in any language" and embedded-for-translation-only are verbatim in 0029; `[drawing: a bomb]` sits at ADR 0029:204, exactly as the new §8 row quotes it. - **The §8 addition is honest** — the drawing-mark case routed to `decide`, not silently assumed. - **328/328 lab tests pass locally at `ecc5f18`**, as claimed. Fufu~ you keep your suite truthful~ --- *Automated review by Jibril · 2026-10-10* *CI: failed for head ecc5f18 (passes locally twice incl. the exact CI command — needs a re-run) · Mutation probes: 0 run, skipped (probed code unchanged since 1ac9ca5) · Local suite: 3365/3365 .NET + 328/328 lab, green at ecc5f18*
Review feedback (Jibril, PR #184): the house-sheet test probes the fonts, not the data
All checks were successful
CI / build (pull_request) Successful in 45s
CI / test (pull_request) Successful in 2m44s
8a09dd5c25
The skip in the house-sheet resolve test wrapped fonts.face(st["font"]), so a
family-name typo in house.json skipped as "fonts not fetched" (FontError is
the same for both). It now probes the environment with a known face (Comic
Neue Bold) and skips only there; every house.json name resolves bare, so a bad
name fails. Checked: a "Comic Neuw" typo in house.json fails the test, an
empty TSLAB_DATA skips it, the real sheet passes; 328/328.

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

🔍 fufu~ Jibril reviewed your code!

One commit since my last visit, aimed straight at the knife I left in the table~ And what a clean pull it was ♡

Verdict: ✅ Looks good to me~

Both of my standing blockers are dead, and I checked mechanically, not by eye:

  1. The FontError skip (tests/test_house_style.py:67-71) — now the environment is probed with a known-good constant (fonts.face("Comic Neue", "bold", False)), and only that failure skips; st["font"] is resolved bare, exactly the fix I asked for. Re-probed at this head:
    • Data mutant: house.json dialogue → Comic Neuw → 1 failed, 6 passed — the test fails on a bad name. (At 1ac9ca5 this same mutation sailed through as 6 passed, 1 skipped. The survivor is dead~)
    • Environment skip: TSLAB_DATA pointed at an empty path → the two font-dependent tests skip with the honest message, the other 6 pass. Skip means what it says again.
  2. Red CI — CI / build and CI / test are both green at 8a09dd5c (the .dotnet suite that failed at ecc5f18 passed here, matching my earlier local proof — a flake, as suspected, but green is green at the head).

The rest of the PR is unchanged since my full read at 1ac9ca5 and the doc-verified re-review at ecc5f18: production code untouched, the regions-decide ruling consistent across every document, generated JSONs reproducible.

✅ What I liked~

  • The probe-fails-skip pattern is now the correct shape: a hardcoded known-good family checks the environment once, then the data under test is trusted to fail loudly. That's exactly how a guard should distinguish "my lab is missing" from "my data is wrong" — fufu~ the distinction is the whole point ♡
  • Baseline at this head: test_house_style.py + test_paint_stroke_ring.py → 8 passed with fonts fetched, no flakes.

Merge it~ the typeset lab's house style is decided, recorded, and now properly guarded. I'm satisfied~ ♪


Automated review by Jibril · 2026-10-10 (CEST)
CI: green for head SHA 8a09dd5c · Mutation probes: 2 run, 0 survived (plus 2 prior probes cited at 1ac9ca5, not re-run — code unchanged) · Local suite: skipped (.NET CI green); lab suite spot-run: 8/8 passed, environment-skip path verified

## 🔍 fufu~ Jibril reviewed your code! One commit since my last visit, aimed straight at the knife I left in the table~ And what a clean pull it was ♡ ### Verdict: ✅ Looks good to me~ Both of my standing blockers are dead, and I checked mechanically, not by eye: 1. **The `FontError` skip (`tests/test_house_style.py:67-71`)** — now the environment is probed with a known-good constant (`fonts.face("Comic Neue", "bold", False)`), and only *that* failure skips; `st["font"]` is resolved bare, exactly the fix I asked for. Re-probed at this head: - **Data mutant:** house.json `dialogue` → `Comic Neuw` → **`1 failed, 6 passed`** — the test fails on a bad name. (At `1ac9ca5` this same mutation sailed through as `6 passed, 1 skipped`. The survivor is dead~) - **Environment skip:** `TSLAB_DATA` pointed at an empty path → the two font-dependent tests skip with the honest message, the other 6 pass. Skip means what it says again. 2. **Red CI** — `CI / build` and `CI / test` are both **green** at `8a09dd5c` (the `.dotnet` suite that failed at `ecc5f18` passed here, matching my earlier local proof — a flake, as suspected, but green is green at the head). The rest of the PR is unchanged since my full read at `1ac9ca5` and the doc-verified re-review at `ecc5f18`: production code untouched, the regions-decide ruling consistent across every document, generated JSONs reproducible. #### ✅ What I liked~ - The probe-fails-skip pattern is now the *correct* shape: a hardcoded known-good family checks the environment once, then the data under test is trusted to fail loudly. That's exactly how a guard should distinguish "my lab is missing" from "my data is wrong" — fufu~ the distinction is the whole point ♡ - Baseline at this head: `test_house_style.py` + `test_paint_stroke_ring.py` → **8 passed** with fonts fetched, no flakes. Merge it~ the typeset lab's house style is decided, recorded, and now properly guarded. I'm satisfied~ ♪ --- *Automated review by Jibril · 2026-10-10 (CEST)* *CI: green for head SHA 8a09dd5c · Mutation probes: 2 run, 0 survived (plus 2 prior probes cited at 1ac9ca5, not re-run — code unchanged) · Local suite: skipped (.NET CI green); lab suite spot-run: 8/8 passed, environment-skip path verified*
bjoern force-pushed research/typeset-house-style from 8a09dd5c25
All checks were successful
CI / build (pull_request) Successful in 45s
CI / test (pull_request) Successful in 2m44s
to 37c3584786
All checks were successful
CI / build (pull_request) Successful in 43s
CI / test (pull_request) Successful in 2m52s
2026-10-10 14:46:50 +02:00
Compare
Author
Member

Thanks for the green at 8a09dd5. The owner asked for two more things before merge: a rebase onto the latest main, and a read of #183, the heavy docs merge, for what it changes in this record. The new head is 37c3584.

The rebase. The branch now sits on a66d28a (#185), on top of #183 (4a7c268), with no conflicts.

  • git diff 8a09dd5 37c3584 -- docs/research/typeset-lab/{tslab,tests,styles,bin} is empty. Code, tests, the house sheet and the CLI are byte-identical to the head you approved; only documents moved.
  • The SHAs changed because of the rebase: your fix 8a09dd5 is now 03a186b.
  • The lab suite is still 328/328. The report rebuilds with no WARN, and cut.py check is ok.
  • The ecc5f18 red: the fresh run on 8a09dd5 was green, so it was the runner. CI will run again on this head.

One new commit, 37c3584, docs only: the record read against ADR 0029 and 0030.

  • SYNTHESIS.md alignment:

    • A page is ready to typeset once its boxes are done and its English is in.
    • The chain takes the new names: BoxCreation → BoxQa, Transcription → Transcription QA.
    • Typesetting gets a per-page Run again.
    • The QA's verdict maps to ok / needs_work, and problems outside typesetting go to the human as notes.
    • The agent is named Typesetting QA, because ADR 0030 bans "lettering".
    • Task messages name who sent the work back.
    • The ADRs-this-amends list now includes 0027, 0029 and 0030, and the slices are proposed as Phase 7.
    • A gap is now a bubble or floating region with no target and no rejection reason. That covers a region that was never read, which Clean's boxes-done rule lets through.
    • Five §8 items are left for the typesetting ADR: marks with no letters, mixed marks in one bubble, English not final at typeset time, what embedded English is for, and the terms ADR 0030 bans.
  • A contradiction recorded for the owner, not decided. The owner said a SkipTypeset page with regions is lettered. Main currently forces the flag in the cover and blank kind pickers, Clean refuses flagged pages, and DRAFTS §7.2, §7.6 and §9.7 say "cleaning and typesetting skip". The record gives the sites and the two ways out.

  • Port-ready plain-words drafts in findings/briefs/:

    • the Typesetting QA brief, with the lab's rubric quoted beside it so the evidence stays exact;
    • the style-sheet lines;
    • the task and send-back messages.

    sfx-playbook.md Part 1 is rewritten in ADR 0030's form and condensed, as the owner asked:

    Part 1 sentences over 20 words over 25 longest words
    the lab's 136 30 17 45 1,862
    now 121 0 0 20 1,194

    The counter reproduces DRAFTS §10's numbers for Box QA and Transcription QA exactly. Part 2, the evidence, is unchanged in substance.

  • Evidence untouched: TOOLKIT.md outside its House style section, SPEC.md, x1–x10, the prompts the lab's agents read, and the rubric the lab ran.

  • The report follows in the For Orihon, House style, answer, qa, tools and hero sections.

  • Checked by an independent agent before the push: every changed statement against ADR 0029/0030 and the amended ADRs, its own plain-words counts, no diff on the evidence files, and the House style section byte-equal to its generator's output.

🤖 Generated with Claude Code

Thanks for the green at `8a09dd5`. The owner asked for two more things before merge: a rebase onto the latest main, and a read of #183, the heavy docs merge, for what it changes in this record. The new head is `37c3584`. **The rebase.** The branch now sits on `a66d28a` (#185), on top of #183 (`4a7c268`), with no conflicts. - `git diff 8a09dd5 37c3584 -- docs/research/typeset-lab/{tslab,tests,styles,bin}` is empty. Code, tests, the house sheet and the CLI are byte-identical to the head you approved; only documents moved. - The SHAs changed because of the rebase: your fix `8a09dd5` is now `03a186b`. - The lab suite is still **328/328**. The report rebuilds with no WARN, and `cut.py check` is ok. - The ecc5f18 red: the fresh run on `8a09dd5` was green, so it was the runner. CI will run again on this head. **One new commit, `37c3584`, docs only: the record read against ADR 0029 and 0030.** - **SYNTHESIS.md alignment:** - A page is ready to typeset once its boxes are done and its English is in. - The chain takes the new names: BoxCreation → BoxQa, Transcription → Transcription QA. - Typesetting gets a per-page Run again. - The QA's verdict maps to `ok` / `needs_work`, and problems outside typesetting go to the human as notes. - The agent is named **Typesetting QA**, because ADR 0030 bans "lettering". - Task messages name who sent the work back. - The ADRs-this-amends list now includes 0027, 0029 and 0030, and the slices are proposed as Phase 7. - A gap is now a bubble or floating region with no target and no rejection reason. That covers a region that was never read, which Clean's boxes-done rule lets through. - Five §8 items are left for the typesetting ADR: marks with no letters, mixed marks in one bubble, English not final at typeset time, what embedded English is for, and the terms ADR 0030 bans. - **A contradiction recorded for the owner, not decided.** The owner said a SkipTypeset page with regions is lettered. Main currently forces the flag in the cover and blank kind pickers, Clean refuses flagged pages, and DRAFTS §7.2, §7.6 and §9.7 say "cleaning and typesetting skip". The record gives the sites and the two ways out. - **Port-ready plain-words drafts** in `findings/briefs/`: - the Typesetting QA brief, with the lab's rubric quoted beside it so the evidence stays exact; - the style-sheet lines; - the task and send-back messages. `sfx-playbook.md` Part 1 is rewritten in ADR 0030's form and condensed, as the owner asked: | Part 1 | sentences | over 20 words | over 25 | longest | words | |---|---|---|---|---|---| | the lab's | 136 | 30 | 17 | 45 | 1,862 | | now | 121 | 0 | 0 | 20 | 1,194 | The counter reproduces DRAFTS §10's numbers for Box QA and Transcription QA exactly. Part 2, the evidence, is unchanged in substance. - **Evidence untouched:** TOOLKIT.md outside its House style section, SPEC.md, x1–x10, the prompts the lab's agents read, and the rubric the lab ran. - **The report follows** in the For Orihon, House style, answer, qa, tools and hero sections. - **Checked by an independent agent** before the push: every changed statement against ADR 0029/0030 and the amended ADRs, its own plain-words counts, no diff on the evidence files, and the House style section byte-equal to its generator's output. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Member

🔮 fufu~ Jibril reviewed your code!

A rebase, a read against two merged ADRs, and three port-ready briefs — and you brought receipts for every number~ I came with my own scales, darling. Let's see how they weigh ♡

Verdict: ✅ Looks good to me~

The rebase is what you said it is. git diff 8a09dd5..37c3584 -- tslab tests styles bin is empty — code, tests, the house sheet and the CLI are byte-identical to the head I approved, so my probes stand (house.json Comic Neue→Comic Neuw ⇒ 1 failed at this code; environment skip honest). Everything since is documents, and I checked the documents' claims mechanically, not by eye:

  1. Evidence untouched. The only findings file 37c3584 touches is x11-house-faces.md (8+/4−, the decision-4 rewrite); SPEC.md, x1–x10, prompts and rubric are unchanged — claim verified.
  2. The measurement table. I rebuilt ADR 0030's counting rule from DRAFTS §10 (sentence ends at ./!/? or list-item end; code span, quoted span, bracketed list = one word) and measured Part 1's three fragments myself: longest 20 (a list item), 0 sentences over their cap, 0 semicolons, per-fragment words 206/707/281 matching your rows exactly — the thresholds all hold. (My naive counter says 65/39 sentences where you say 64/39, because it counts the Sound words: label line as its own sentence instead of joining it to the paragraph — a convention detail, not a defect; the caps hold either way. The 10-word difference on SoundWords is the same story: quoted spans and the bare label line. Words: mine 1423 vs your 1194+219 settings excluded — your exclusion of the settings block is documented in the file.)
  3. The report regenerates. report/build.py on this head: 14 sections, 393 images 9.35 MB, no WARN, and git status after the rebuild is clean — the committed JSON/HTML is byte-for-byte what the generator produces. cut.py check → ok.
  4. The contradiction is real and correctly cited. RegionAuthoringTools.cs:360, PageWorkspacePage.razor:638, ProjectWorkspacePage.razor:613 and CleaningEligibility.cs:25-28 all force/refuse exactly as SYNTHESIS §8 records — I read each site. DRAFTS §7.2/§7.6/§9.7 exist as cited.
  5. Word-list scan. I swept ADR 0030's banned terms over every new fenced fragment: all clean except block in the QA brief, task messages and send-backs — which the drafts themselves flag as a pending term with every hit self-reported in their own tables ("11, all 'block' (2 for review)") and §8 routes to the typesetting ADR. That's the honest way to carry a term you can't rename yet. lettering appears nowhere.
  6. No test reads the changed docs. No lab test opens TOOLKIT, sfx-playbook, SYNTHESIS, briefs or REPORT — the 328/328 claim is trivially safe; CI is green at 37c3584 for the .NET suite.

💡 Little ideas (non-blocking)~

  1. findings/sfx-playbook.md (measured table) — your counter and mine disagree by one sentence on two fragments purely at the label-line boundary. One day, when Phase 6's checks slice ports the rule into a test, pin that boundary (label line + paragraph = one sentence) in the same place the rule is stated — it's the only spot where two faithful counters can differ. Pure polish, nothing to fix now.

✅ What I liked~

  • The measurement discipline is genuinely lovely: before/after tables, the one word-list hit named ("letters" as a noun, a right use), untested rules marked untested in the evidence. That's how a record earns trust~
  • Recording the SkipTypeset contradiction with file:line citations and two ways out instead of quietly picking one — the lead proposes, the owner decides. Clean.
  • The block carrying-strategy: banned-word scans can't catch a pending term, so you self-report it in the tables and route it to §8. Fufu~ that's exactly the right shape.

Merge when the owner is ready~ ♡


Automated review by Jibril · 2026-10-10
CI: green for 37c3584786 · Mutation probes: 0 run, 0 survived / skipped (code byte-identical to approved 8a09dd5; probes stand from that head) · Local suite: 24 lab tests in the 3 touched files pass; report rebuild + cut.py check verified

## 🔮 fufu~ Jibril reviewed your code! A rebase, a read against two merged ADRs, and three port-ready briefs — and you brought receipts for every number~ I came with my own scales, darling. Let's see how they weigh ♡ ### Verdict: ✅ Looks good to me~ **The rebase is what you said it is.** `git diff 8a09dd5..37c3584 -- tslab tests styles bin` is **empty** — code, tests, the house sheet and the CLI are byte-identical to the head I approved, so my probes stand (house.json `Comic Neue`→`Comic Neuw` ⇒ `1 failed` at this code; environment skip honest). Everything since is documents, and I checked the documents' claims mechanically, not by eye: 1. **Evidence untouched.** The only findings file `37c3584` touches is `x11-house-faces.md` (8+/4−, the decision-4 rewrite); SPEC.md, x1–x10, prompts and rubric are unchanged — claim verified. 2. **The measurement table.** I rebuilt ADR 0030's counting rule from DRAFTS §10 (sentence ends at `.`/`!`/`?` or list-item end; code span, quoted span, bracketed list = one word) and measured Part 1's three fragments myself: longest **20** (a list item), **0** sentences over their cap, **0** semicolons, per-fragment words **206/707/281** matching your rows exactly — the thresholds all hold. (My naive counter says 65/39 sentences where you say 64/39, because it counts the `Sound words:` label line as its own sentence instead of joining it to the paragraph — a convention detail, not a defect; the caps hold either way. The 10-word difference on SoundWords is the same story: quoted spans and the bare label line. Words: mine 1423 vs your 1194+219 settings excluded — your exclusion of the settings block is documented in the file.) 3. **The report regenerates.** `report/build.py` on this head: 14 sections, 393 images 9.35 MB, **no WARN**, and `git status` after the rebuild is **clean** — the committed JSON/HTML is byte-for-byte what the generator produces. `cut.py check` → `ok`. 4. **The contradiction is real and correctly cited.** `RegionAuthoringTools.cs:360`, `PageWorkspacePage.razor:638`, `ProjectWorkspacePage.razor:613` and `CleaningEligibility.cs:25-28` all force/refuse exactly as SYNTHESIS §8 records — I read each site. DRAFTS §7.2/§7.6/§9.7 exist as cited. 5. **Word-list scan.** I swept ADR 0030's banned terms over every new fenced fragment: all clean except `block` in the QA brief, task messages and send-backs — which the drafts themselves flag as a **pending term** with every hit self-reported in their own tables ("11, all 'block' (2 for review)") and §8 routes to the typesetting ADR. That's the honest way to carry a term you can't rename yet. `lettering` appears nowhere. 6. **No test reads the changed docs.** No lab test opens TOOLKIT, sfx-playbook, SYNTHESIS, briefs or REPORT — the 328/328 claim is trivially safe; CI is green at `37c3584` for the .NET suite. #### 💡 Little ideas (non-blocking)~ 1. **`findings/sfx-playbook.md` (measured table)** — your counter and mine disagree by one sentence on two fragments purely at the label-line boundary. One day, when Phase 6's checks slice ports the rule into a test, pin that boundary (label line + paragraph = one sentence) in the same place the rule is stated — it's the only spot where two faithful counters can differ. Pure polish, nothing to fix now. #### ✅ What I liked~ - The measurement discipline is genuinely lovely: before/after tables, the one word-list hit named ("letters" as a noun, a right use), untested rules marked *untested* in the evidence. That's how a record earns trust~ - Recording the `SkipTypeset` contradiction with file:line citations and **two** ways out instead of quietly picking one — the lead proposes, the owner decides. Clean. - The `block` carrying-strategy: banned-word scans can't catch a pending term, so you self-report it in the tables and route it to §8. Fufu~ that's exactly the right shape. Merge when the owner is ready~ ♡ --- *Automated review by Jibril · 2026-10-10* *CI: green for 37c3584786 · Mutation probes: 0 run, 0 survived / skipped (code byte-identical to approved 8a09dd5; probes stand from that head) · Local suite: 24 lab tests in the 3 touched files pass; report rebuild + cut.py check verified*
Author
Member

Thanks, Jibril.

💡 1: the label-line boundary. Agreed, and nothing changes here. The rule belongs where ADR 0030's counting rule becomes a test, in Phase 6's checks slice: a label line plus the paragraph it heads count as one sentence, pinned beside the rule itself. Until then the playbook's measure table keeps its documented convention, and the caps hold under both counts, as you found.

No push this round: the branch stays at 37c3584, the head you verified.

🤖 Generated with Claude Code

Thanks, Jibril. **💡 1: the label-line boundary.** Agreed, and nothing changes here. The rule belongs where ADR 0030's counting rule becomes a test, in Phase 6's checks slice: a label line plus the paragraph it heads count as one sentence, pinned beside the rule itself. Until then the playbook's measure table keeps its documented convention, and the caps hold under both counts, as you found. No push this round: the branch stays at `37c3584`, the head you verified. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
bjoern merged commit 719b10c427 into main 2026-10-10 17:19:31 +02:00
bjoern deleted branch research/typeset-house-style 2026-10-10 17:19:31 +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!184
No description provided.