feat: a region-bound agent can look closely without moving the box it is working on #137

Merged
bjoern merged 4 commits from feat/region-crop-window into main 2026-09-21 00:15:12 +02:00
Member

This comes from the friction reports agents file while they are still succeeding (ADR 0025) — not
from debriefs of failed loops. Refinement and transcription runs that finished reported the same
workaround: to read one glyph edge at high zoom, the agent parked its region on a throwaway strip
with move_resize_region, cropped that, and moved the box back. Four to six rounds spent mutating
the artifact under review, and a box left in the wrong place wherever the sequence broke off.

The root cause is that a view is capped in size on its way to the model, so padding — the only
knob the region-bound crop had — makes the frame bigger and what arrives smaller. The ladder
topped out below the magnification the work needed, and the only rung above it was moving the box.

This slice gives that crop a view-only window instead, and amends the two ADRs that govern the
binding it lives under: ADR 0016 (least-privilege agent tools) and ADR 0017 (the agent roster).

What's in

The tool (src/Orihon.UseCases/Agents/Annotation/BoundInspectionTools.cs)

  • RegionCropTool takes window: four raw-page-pixel coordinates that reframe part of what the
    call was already going to show, so one glyph edge can fill the picture at the fitted zoom's
    ceiling. It is shared by both region-bound grants — BboxRefinement and Transcription build the
    same tool (AnnotationBlueprints.cs:67 and :90).
  • Reach is a constant, not a knob. The entitled area is the region's box widened by
    PageImageAccess.DefaultCropPadding (50 px), not by the call's own padding. This is the
    load-bearing decision and it is deliberately stricter than it first looks: padding is capped at
    2000, larger than any page, so an entitlement that followed it would have let
    {"padding": 2000, "window": [<neighbour's box>]} deliver a neighbour's mark at 8×. A constant
    also makes one sentence true at every padding — a window covers your box and the 50 px around it,
    and no padding widens that
    — which is what the refusal has to be able to say.
  • The binding of ADR 0017 is unchanged. A window that misses the entitled area is refused with
    the pixel range it may actually have; one that partly overlaps is clamped and the answer says so.
    The refusal does not name padding as the remedy — it points at a plain padded crop, which has
    always shown context, and says no padding widens a window's reach.
  • The focus is carried explicitly on the windowed path. It addresses the crop by box, so it
    passes regionLabel: null and RenderFixedCropAsync's focus ??= regionLabel fallback yields
    nothing — this is the one call site where the argument is load-bearing rather than redundant.
    Without it the overlay marks no box, and neighbouring containers in the same frame all paint the
    same green with nothing to say whose point produced them.
  • The answer states one frame. The success message states the clamp qualitatively and defers the
    numbers to ViewAccount's own sentence, rather than quoting the window it asked for. The frame
    actually rendered is the window round-tripped pixel → normalized → PixelRect (floor/ceil), which
    differs by a pixel on coordinates that are not exact in decimal — on a 1240×1754 page that is
    409/1240 x and 580/1754 y coordinates. Two sentences in one answer naming different frames would
    have broken the briefs' rule that measurement is done by reading the view's sentence.
  • No new plumbing. The clamped window is passed straight through
    PageImageAccess.RenderFixedCropAsync as the crop's box with padding: 0 (re-padding would push
    the frame back outside the area it was just clamped into). The Description now leads with this
    tool only looks: no crop moves or resizes your region
    — killing the park-and-restore pattern is
    the first sentence's job.

Inspection plumbing (src/Orihon.UseCases/Agents/Inspection/PageImageAccess.cs)

  • RegionAsync(pageId, label, ct) extracted; RegionCropTool and SampleRegionColorsTool both
    call it, with the ADR 0016 rationale stated once instead of duplicated. It matters beyond DRY: the
    shared BoxAsync not-found message points at view_page and contact_sheet, tools this grant
    does not hold, and a failure naming an unreachable tool costs a round.
  • The region is resolved once at the top of ExecuteAsync, for both paths, so a deleted region
    gets the same sentence windowed or not.
  • RenderFixedCropAsync gained a trailing PageDetailDto? known = null (the shape BoxAsync
    already uses), so a windowed call — which must read the page to place the window — is one read
    again rather than two.

The briefs (src/Orihon.UseCases/Agents/Annotation/AnnotationBlueprints.cs)

Two escalation passages, changed because they had become false in the dangerous direction:

  • TranscriptionPrompt's ladder ended at zoom 8 with padding raised and then reject_region —
    an irreversible action (source left empty) one rung below the new ceiling, and the rung it named
    actively lowers delivered magnification. The last rung is now a window on the mark itself.
  • BboxRefinementPrompt step 1's raise-it/lower-it padding ladder now names window for reading one
    edge, and states that it moves nothing and reaches no further than the box and the pixels around it.

Tests

1364 passed, 0 failed, 0 skipped on a fresh run after a clean build (dotnet build Orihon.slnx -warnaserror: 0 warnings, 0 errors). Per project: Domain 151, UseCases 623, BlazorAdapter 281,
Integration 309. That is +14 cases over origin/main (1350, now that #139 and #138 have landed):
11 facts and one 3-row theory. Each of the three pre-review commits was rebuilt individually after
the rebase and builds standalone.

  • A_window_cannot_reach_the_region_next_door (theory, 3 rows) — asserts a window onto the
    neighbouring region's box is refused at the default padding, at padding: 2000, and at
    padding: 2000 with zoom: 8
    . The padding-2000 rows are the guard with a real target: pointing
    Entitled back at args.Padding makes both of them pass a window onto the neighbour.
  • A_windowed_crop_still_marks_its_own_region_as_the_focus — seeds two neighbouring regions and
    asserts the windowed, annotated frame still marks its own box as the focus, and that the rendered
    box is the window at padding: 0 rather than the region's own box. Red-on-target: focus: null
    fails this test and no other. (Added in review round 1 — the branch it pins had no test, and a
    full suite stayed green without it.)
  • A_window_reframes_part_of_the_region_and_arrives_at_the_full_zoom — asserts a 40×60 window hits
    the 8× ceiling while the same call's 200×240 padded box is auto-fitted to 5.33×, which is the whole
    point of the parameter.
  • A_window_reaching_past_what_it_may_cover_is_clamped_and_the_answer_says_so and
    A_window_off_the_region_is_refused_with_the_area_it_may_have — assert clamp vs. refusal are
    distinguished, and that a refusal names the pixel range the call may actually have.
  • A_window_that_is_not_two_corners_is_refused_for_that_reason — asserts arity and both axes of a
    collapsed window get their own sentence rather than the generic "outside" refusal, and that an
    empty window: [] reads as absent (an ordinary whole-box crop).
  • A_windowed_answer_states_its_frame_once_and_leaves_it_to_the_view — asserts exactly one
    "page pixels x" in the answer and that it is sourced from the view, on a renderer window a pixel
    off the asked-for one; and that the clamp sentence appears on the clamped answer and not on the
    exact one, so both arms of that ternary are pinned.
  • A_pixel_window_does_not_survive_the_normalized_round_trip_unchanged (Integration, real SkiaSharp)
    — asserts the drift the test above exists to tolerate is real: on a 1240×1754 page, an asked-for
    x 250–300 comes back 249–301.
  • The_reach_a_refusal_names_is_the_frame_a_default_crop_draws (Integration, real SQLite +
    file store + SkiaPageImageRenderer, real ImportPages/CreateRegion) — drives the blueprint's
    own crop twice on an 803×1201 page and asserts the refusal's entitlement and the default crop's
    ViewAccount sentence name the same pixels (x 60–296, y 239–588). It pins the half of
    DefaultCropPadding's invariant that could drift: Entitled's floor/ceil against
    PageDto.Width/Height versus SkiaImages.PixelRect's against the decoded bitmap. Truncating
    Entitled's bottom-right corner makes it fail with x 60–295, y 239–587. Page dimensions are
    deliberately odd so neither axis divides evenly.
  • A_crop_says_which_of_the_region_and_the_page_it_could_not_find — asserts the deleted-region
    sentence is identical windowed and plain, that the sampler gives the same one, and that none of
    them names contact_sheet
    (a tool this grant does not hold).
  • The_last_rung_before_giving_up_is_a_window_not_more_padding — asserts the rewritten ladder, and
    that the sibling The_illegibility_rule_reaches_the_agents_that_have_to_obey_it stayed clean.
  • The_region_bound_crop_offers_a_window — asserts window is in RegionCropParams' schema
    properties. The required-set half is left to the existing
    Only_the_parameters_a_tool_refuses_without_are_required theory rather than duplicated.

Every new test was verified to fail against the production code it pins (copy-aside, never
git stash — the stack is shared across worktrees).

Honest notes

Two equivalent mutants, reported so nobody spends a probe on them. A mutation sweep over the
slice's new arguments leaves two survivors, both behaviour-preserving rather than test gaps:
focus: label on the non-windowed path (:186) survives because focus ??= regionLabel reaches
the same value there, and known: page (:249) survives because it changes only how many times the
page is read, not what is rendered. padding: 0 on the same call kills 2 tests when mutated.

Declined, in both rounds: cross-region glyph comparison. The friction reports also asked to zoom
a neighbouring region's twin glyph for stroke comparison ("the identical twin tag at page
x~663-689"). That is the peeking the binding exists to prevent, and a window cannot reach it —
the refusal says so. Worth stating plainly so nobody re-opens it: the first version of this claim
in review was false. padding: 2000 plus a window did reach the neighbour at 8×, because the
entitlement followed the call's padding. That is what the fixed constant closes, and it is now
enforced at padding: 2000 by the guard theory above.

Not a hole in the binding: padding: 2000 with no window still shows most of the sheet — at
roughly 1×. That is pre-existing and intentional (ADR 0016: "padding is how it sees context"). The
binding window preserves is about delivered magnification, not visibility: a plain padded crop
has always shown the surrounding sheet, and what it has never done is show a neighbour's mark at 8×.

Scope: the slice was scoped not to touch the briefs, and it touches two passages of
AnnotationBlueprints anyway. The reason is in "What's in": the old ladder routed transcription to
an irreversible reject_region one rung below the new ceiling, so shipping the tool without the
brief edit would have left the grant holding a lever its instructions told it not to reach for. The
conflict surface is those two string literals.

Merge order: settled. Rebased onto main at d9427a0, which already carries #139 and #138, so
there is no remaining ordering constraint. Two conflicts were resolved in place rather than deferred:
the region crop's Description now carries #139's per-axis grid wording alongside this slice's
window teaching, and ADR 0016 carries both 2026-09 amendments (#138's fill-start reporting and this
slice's window). One semantic conflict no text merge could see — a test still constructing
RenderedView with the GridStep that #139 renamed to Grid — was caught by the build and folded
into the commit that owns that test.

padding is silently ignored when window is present (the window renders with padding: 0).
Documented in the tool's Description, not repeated in the success message.

One known-unreachable branch, pre-existing: PageImageAccess.cs RegionsAsync failing inside
the annotated/known is null path. It is only reindented by this diff, and RegionsAsync is
literally getPage.ExecuteAsync(...).Regions on a page whose image has already been opened.

Sub-pixel caveat, pre-existing and not introduced here: the pixel → normalized → pixel round trip
through BoxAsync can move an edge by one pixel. That is why the answer states one frame rather than
two; actually fixing it means touching BoxAsync or the renderer, both out of scope.

Noticed while rebasing, not fixed here: view_page's Description still promises "where each
labelled line falls", but RenderPageAsync now uses the same per-axis StepsFor as the crop path,
so an ordinary 1200×1800 page really does report different steps per axis. The account itself is
correct; only that one sibling description is behind. Left to the follow-up that also has to correct
the four "unreadable at zoom 8, that is settled" sentences #139 made false.

Not touched: SeedDevData. A tool parameter and two prompt strings are not user-authored
content, and the seeded world exercises no agent tool schema. No AGENTS.md change either — the
decision is recorded in ADR 0016/0017 plus the tests above.

🤖 Generated with Claude Code

This comes from the friction reports agents file while they are still succeeding (ADR 0025) — not from debriefs of failed loops. Refinement and transcription runs that *finished* reported the same workaround: to read one glyph edge at high zoom, the agent parked its region on a throwaway strip with `move_resize_region`, cropped that, and moved the box back. Four to six rounds spent mutating the artifact under review, and a box left in the wrong place wherever the sequence broke off. The root cause is that a view is capped in size on its way to the model, so `padding` — the only knob the region-bound `crop` had — makes the frame bigger and what *arrives* smaller. The ladder topped out below the magnification the work needed, and the only rung above it was moving the box. This slice gives that `crop` a view-only `window` instead, and amends the two ADRs that govern the binding it lives under: ADR 0016 (least-privilege agent tools) and ADR 0017 (the agent roster). ## What's in ### The tool (`src/Orihon.UseCases/Agents/Annotation/BoundInspectionTools.cs`) - **`RegionCropTool` takes `window`**: four raw-page-pixel coordinates that reframe part of what the call was already going to show, so one glyph edge can fill the picture at the fitted zoom's ceiling. It is shared by both region-bound grants — `BboxRefinement` and `Transcription` build the same tool (`AnnotationBlueprints.cs:67` and `:90`). - **Reach is a constant, not a knob.** The entitled area is the region's box widened by `PageImageAccess.DefaultCropPadding` (50 px), *not* by the call's own `padding`. This is the load-bearing decision and it is deliberately stricter than it first looks: `padding` is capped at 2000, larger than any page, so an entitlement that followed it would have let `{"padding": 2000, "window": [<neighbour's box>]}` deliver a neighbour's mark at 8×. A constant also makes one sentence true at every padding — *a window covers your box and the 50 px around it, and no padding widens that* — which is what the refusal has to be able to say. - **The binding of ADR 0017 is unchanged.** A window that misses the entitled area is refused with the pixel range it may actually have; one that partly overlaps is clamped and the answer says so. The refusal does **not** name padding as the remedy — it points at a plain padded crop, which has always shown context, and says no padding widens a window's reach. - **The focus is carried explicitly on the windowed path.** It addresses the crop by box, so it passes `regionLabel: null` and `RenderFixedCropAsync`'s `focus ??= regionLabel` fallback yields nothing — this is the one call site where the argument is load-bearing rather than redundant. Without it the overlay marks no box, and neighbouring containers in the same frame all paint the same green with nothing to say whose point produced them. - **The answer states one frame.** The success message states the clamp qualitatively and defers the numbers to `ViewAccount`'s own sentence, rather than quoting the window it asked for. The frame actually rendered is the window round-tripped pixel → normalized → `PixelRect` (floor/ceil), which differs by a pixel on coordinates that are not exact in decimal — on a 1240×1754 page that is 409/1240 x and 580/1754 y coordinates. Two sentences in one answer naming different frames would have broken the briefs' rule that measurement is done by *reading* the view's sentence. - **No new plumbing.** The clamped window is passed straight through `PageImageAccess.RenderFixedCropAsync` as the crop's box with `padding: 0` (re-padding would push the frame back outside the area it was just clamped into). The Description now leads with *this tool only looks: no crop moves or resizes your region* — killing the park-and-restore pattern is the first sentence's job. ### Inspection plumbing (`src/Orihon.UseCases/Agents/Inspection/PageImageAccess.cs`) - **`RegionAsync(pageId, label, ct)`** extracted; `RegionCropTool` and `SampleRegionColorsTool` both call it, with the ADR 0016 rationale stated once instead of duplicated. It matters beyond DRY: the shared `BoxAsync` not-found message points at `view_page` and `contact_sheet`, tools this grant does not hold, and a failure naming an unreachable tool costs a round. - **The region is resolved once at the top of `ExecuteAsync`, for both paths**, so a deleted region gets the same sentence windowed or not. - **`RenderFixedCropAsync` gained a trailing `PageDetailDto? known = null`** (the shape `BoxAsync` already uses), so a windowed call — which must read the page to place the window — is one read again rather than two. ### The briefs (`src/Orihon.UseCases/Agents/Annotation/AnnotationBlueprints.cs`) Two escalation passages, changed because they had become false in the dangerous direction: - `TranscriptionPrompt`'s ladder ended at *zoom 8 with padding raised* and then `reject_region` — an irreversible action (source left empty) one rung below the new ceiling, and the rung it named actively *lowers* delivered magnification. The last rung is now a window on the mark itself. - `BboxRefinementPrompt` step 1's raise-it/lower-it padding ladder now names `window` for reading one edge, and states that it moves nothing and reaches no further than the box and the pixels around it. ## Tests **1364 passed, 0 failed, 0 skipped** on a fresh run after a clean build (`dotnet build Orihon.slnx -warnaserror`: 0 warnings, 0 errors). Per project: Domain 151, UseCases 623, BlazorAdapter 281, Integration 309. That is **+14 cases over `origin/main`** (1350, now that #139 and #138 have landed): 11 facts and one 3-row theory. Each of the three pre-review commits was rebuilt individually after the rebase and builds standalone. - `A_window_cannot_reach_the_region_next_door` (theory, 3 rows) — asserts a window onto the neighbouring region's box is refused at the **default padding, at `padding: 2000`, and at `padding: 2000` with `zoom: 8`**. The padding-2000 rows are the guard with a real target: pointing `Entitled` back at `args.Padding` makes both of them pass a window onto the neighbour. - `A_windowed_crop_still_marks_its_own_region_as_the_focus` — seeds two neighbouring regions and asserts the windowed, annotated frame still marks its own box as the focus, and that the rendered box is the window at `padding: 0` rather than the region's own box. Red-on-target: `focus: null` fails this test and no other. (Added in review round 1 — the branch it pins had no test, and a full suite stayed green without it.) - `A_window_reframes_part_of_the_region_and_arrives_at_the_full_zoom` — asserts a 40×60 window hits the 8× ceiling while the same call's 200×240 padded box is auto-fitted to 5.33×, which is the whole point of the parameter. - `A_window_reaching_past_what_it_may_cover_is_clamped_and_the_answer_says_so` and `A_window_off_the_region_is_refused_with_the_area_it_may_have` — assert clamp vs. refusal are distinguished, and that a refusal names the pixel range the call may actually have. - `A_window_that_is_not_two_corners_is_refused_for_that_reason` — asserts arity and both axes of a collapsed window get their own sentence rather than the generic "outside" refusal, and that an empty `window: []` reads as absent (an ordinary whole-box crop). - `A_windowed_answer_states_its_frame_once_and_leaves_it_to_the_view` — asserts exactly one "page pixels x" in the answer and that it is sourced from the view, on a renderer window a pixel off the asked-for one; and that the clamp sentence appears on the clamped answer and not on the exact one, so both arms of that ternary are pinned. - `A_pixel_window_does_not_survive_the_normalized_round_trip_unchanged` (Integration, real SkiaSharp) — asserts the drift the test above exists to tolerate is real: on a 1240×1754 page, an asked-for x 250–300 comes back 249–301. - `The_reach_a_refusal_names_is_the_frame_a_default_crop_draws` (Integration, real SQLite + file store + `SkiaPageImageRenderer`, real `ImportPages`/`CreateRegion`) — drives the blueprint's own `crop` twice on an 803×1201 page and asserts the refusal's entitlement and the default crop's `ViewAccount` sentence name the same pixels (x 60–296, y 239–588). It pins the half of `DefaultCropPadding`'s invariant that could drift: `Entitled`'s floor/ceil against `PageDto.Width/Height` versus `SkiaImages.PixelRect`'s against the decoded bitmap. Truncating `Entitled`'s bottom-right corner makes it fail with x 60–295, y 239–587. Page dimensions are deliberately odd so neither axis divides evenly. - `A_crop_says_which_of_the_region_and_the_page_it_could_not_find` — asserts the deleted-region sentence is identical windowed and plain, that the sampler gives the same one, and that **none of them names `contact_sheet`** (a tool this grant does not hold). - `The_last_rung_before_giving_up_is_a_window_not_more_padding` — asserts the rewritten ladder, and that the sibling `The_illegibility_rule_reaches_the_agents_that_have_to_obey_it` stayed clean. - `The_region_bound_crop_offers_a_window` — asserts `window` is in `RegionCropParams`' schema properties. The required-set half is left to the existing `Only_the_parameters_a_tool_refuses_without_are_required` theory rather than duplicated. Every new test was verified to fail against the production code it pins (copy-aside, never `git stash` — the stack is shared across worktrees). ## Honest notes **Two equivalent mutants, reported so nobody spends a probe on them.** A mutation sweep over the slice's new arguments leaves two survivors, both behaviour-preserving rather than test gaps: `focus: label` on the *non*-windowed path (`:186`) survives because `focus ??= regionLabel` reaches the same value there, and `known: page` (`:249`) survives because it changes only how many times the page is read, not what is rendered. `padding: 0` on the same call kills 2 tests when mutated. **Declined, in both rounds: cross-region glyph comparison.** The friction reports also asked to zoom a *neighbouring* region's twin glyph for stroke comparison ("the identical twin tag at page x~663-689"). That is the peeking the binding exists to prevent, and a window cannot reach it — the refusal says so. Worth stating plainly so nobody re-opens it: the **first** version of this claim in review was false. `padding: 2000` plus a window did reach the neighbour at 8×, because the entitlement followed the call's padding. That is what the fixed constant closes, and it is now enforced at `padding: 2000` by the guard theory above. **Not a hole in the binding:** `padding: 2000` with no window still shows most of the sheet — at roughly 1×. That is pre-existing and intentional (ADR 0016: "padding is how it sees context"). The binding `window` preserves is about *delivered magnification*, not visibility: a plain padded crop has always shown the surrounding sheet, and what it has never done is show a neighbour's mark at 8×. **Scope:** the slice was scoped *not* to touch the briefs, and it touches two passages of `AnnotationBlueprints` anyway. The reason is in "What's in": the old ladder routed transcription to an irreversible `reject_region` one rung below the new ceiling, so shipping the tool without the brief edit would have left the grant holding a lever its instructions told it not to reach for. The conflict surface is those two string literals. **Merge order: settled.** Rebased onto `main` at d9427a0, which already carries #139 and #138, so there is no remaining ordering constraint. Two conflicts were resolved in place rather than deferred: the region crop's Description now carries #139's per-axis grid wording alongside this slice's `window` teaching, and ADR 0016 carries both 2026-09 amendments (#138's fill-start reporting and this slice's `window`). One semantic conflict no text merge could see — a test still constructing `RenderedView` with the `GridStep` that #139 renamed to `Grid` — was caught by the build and folded into the commit that owns that test. **`padding` is silently ignored when `window` is present** (the window renders with `padding: 0`). Documented in the tool's Description, not repeated in the success message. **One known-unreachable branch, pre-existing:** `PageImageAccess.cs` `RegionsAsync` failing inside the `annotated`/`known is null` path. It is only reindented by this diff, and `RegionsAsync` is literally `getPage.ExecuteAsync(...).Regions` on a page whose image has already been opened. **Sub-pixel caveat, pre-existing and not introduced here:** the pixel → normalized → pixel round trip through `BoxAsync` can move an edge by one pixel. That is why the answer states one frame rather than two; actually fixing it means touching `BoxAsync` or the renderer, both out of scope. **Noticed while rebasing, not fixed here:** `view_page`'s Description still promises "where each labelled line falls", but `RenderPageAsync` now uses the same per-axis `StepsFor` as the crop path, so an ordinary 1200×1800 page really does report different steps per axis. The account itself is correct; only that one sibling description is behind. Left to the follow-up that also has to correct the four "unreadable at zoom 8, that is settled" sentences #139 made false. **Not touched:** `SeedDevData`. A tool parameter and two prompt strings are not user-authored content, and the seeded world exercises no agent tool schema. No `AGENTS.md` change either — the decision is recorded in ADR 0016/0017 plus the tests above. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Refinement's and transcription's crop framed the whole region plus symmetric
padding and nothing else, so reading one glyph edge at high zoom had no honest
answer. Agents found a dishonest one: park the region on a throwaway strip with
move_resize_region, crop that, move it back — four to six rounds spent mutating
the artifact under review, with the box left wrong wherever the sequence broke
off.

RegionCropParams gains `window`, four raw page pixels, clamped to the region's
own box plus the padding the same call asked for. It narrows what the call was
already entitled to show and can aim at nothing else, so the binding (ADR 0017)
is untouched: a neighbour's mark is as unreachable through a window as it was
through a tool that took no coordinates. The clamped window goes through
RenderFixedCropAsync as the crop's box with padding 0 — the window is the frame
— and the fitted zoom rises with it, which is the whole benefit. A window off
the region is refused with the pixels it may have and the knob that widens
them; one that overlaps is clamped, and the answer says so with the frame
delivered.

The description now teaches the parameter and states plainly that no crop ever
moves the region, which is what the move-and-restore pattern was waiting to
hear.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
A window was entitled to the region's box plus THIS call's padding, and padding
caps at 2000 — larger than any page — so `{"padding": 2000, "window": [<the
neighbour's box>]}` delivered that neighbour's mark alone at the zoom ceiling.
The entitlement is now the box plus the default padding, a fixed allowance no
parameter widens, and the refusal no longer offers padding as the way to reach
further. Pinned at padding 2000, which is where the default-padding guard saw
nothing.

Both region-bound briefs stopped their escalation ladder at "zoom 8 with padding
raised" — one rung below the ceiling, and for transcription one step before an
irreversible reject_region. A wider frame arrives at LESS magnification, since a
view is capped in size on its way out, so the last rung is a window on the mark.

The tool no longer restates the frame: the window it clamps and the frame the
renderer cuts differ by a pixel wherever the page's size is not exact in decimal
(409 of 1240 x coordinates on an ordinary scan, now pinned over real pixels), so
two frames in one answer disagreed. The tool states the clamp; the view states
the frame.

Also: the region lookup both bound tools copied becomes PageImageAccess.
RegionAsync, so a deleted region gets one sentence from both of this tool's paths
instead of one that points at tools this grant does not hold; a windowed call
reads the page once; and the CropPadding extraction goes back inline, since the
entitlement no longer shares it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
fix(crop): review round 2 — the reach ADR 0017 states is the reach the code enforces
All checks were successful
CI / build (pull_request) Successful in 27s
CI / test (pull_request) Successful in 1m1s
3424eda272
ADR 0017's Status line still promised a window clamped to "the same call's
padding" — the property the last round removed, and one the same ADR's body now
denies. Brought into line with that body and with ADR 0016, whose own phrasing
is tightened so the fixed margin cannot be read as an alternative to whatever
padding the call asked for.

The default padding's doc claims the reach a refusal names and the reach a
default crop draws are the same pixels; only the refusal side was pinned. An
integration test over real SQLite, the real image store and real Skia now drives
the bound crop on a page whose size divides into nothing round, and holds the
two roundings against each other.

The windowed crop's test doc credited the auto-fit's numbers to the delivery
cap; it now names the fit and its arithmetic. The tool's Description loses an
ungrammatical clause, an absolute that is false for a small box, and an
instruction against a tool half its holders cannot call.

Co-Authored-By: Claude Opus 5 (1M context) <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: 1109e04 · Generated: 2026-09-20 22:20:16 UTC · Revision: #3

Summary

Summary
Generated on: 09/20/2026 - 22:20:16
Coverage date: 09/20/2026 - 22:19:43 - 09/20/2026 - 22:20:13
Parser: MultiReport (4x Cobertura)
Assemblies: 6
Classes: 537
Files: 248
Line coverage: 97.1% (20615 of 21228)
Covered lines: 20615
Uncovered lines: 613
Coverable lines: 21228
Total lines: 37683
Branch coverage: 86.3% (3896 of 4512)
Covered branches: 3896
Total branches: 4512
Method coverage: Feature is only available for sponsors

Coverage

Orihon.BlazorAdapter - 95.4%
Name Line Branch
Orihon.BlazorAdapter 95.4% 88.6%
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.CaptionShape 100% 93.7%
Orihon.BlazorAdapter.PageWorkspace.CreateRegionRequested 100%
Orihon.BlazorAdapter.PageWorkspace.DeletePageSummaryRequested 100%
Orihon.BlazorAdapter.PageWorkspace.DeleteRegionRequested 100%
Orihon.BlazorAdapter.PageWorkspace.LoadPageWorkspace 100%
Orihon.BlazorAdapter.PageWorkspace.MeasurePageRooms 100%
Orihon.BlazorAdapter.PageWorkspace.PageRoomsMeasured 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 93.4% 88.4%
Orihon.BlazorAdapter.PageWorkspace.PageWorkspaceReducers 100% 62.5%
Orihon.BlazorAdapter.PageWorkspace.PageWorkspaceState 100%
Orihon.BlazorAdapter.PageWorkspace.PageWriteFailed 100%
Orihon.BlazorAdapter.PageWorkspace.RegionColorsSampled 100%
Orihon.BlazorAdapter.PageWorkspace.RegionCreated 100%
Orihon.BlazorAdapter.PageWorkspace.RegionSaved 100%
Orihon.BlazorAdapter.PageWorkspace.ReorderRegionsRequested 100%
Orihon.BlazorAdapter.PageWorkspace.ReprocessPageRequested 100%
Orihon.BlazorAdapter.PageWorkspace.ReprocessTranslationRequested 100%
Orihon.BlazorAdapter.PageWorkspace.SampleRegionColorsRequested 100%
Orihon.BlazorAdapter.PageWorkspace.SaveContainerRequested 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% 95%
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 97.9% 96.2%
Orihon.BlazorAdapter.Runs.RunMonitorEffects 100% 91.6%
Orihon.BlazorAdapter.Runs.RunMonitorReducers 100%
Orihon.BlazorAdapter.Runs.RunMonitorState 100%
Orihon.BlazorAdapter.Settings.AgentDebriefsLoaded 100%
Orihon.BlazorAdapter.Settings.AgentDebriefsLoadFailed 100%
Orihon.BlazorAdapter.Settings.AgentEffortPicked 100%
Orihon.BlazorAdapter.Settings.AgentEffortSaved 100%
Orihon.BlazorAdapter.Settings.AgentEffortSaveFailed 100%
Orihon.BlazorAdapter.Settings.AgentFeedbackLoaded 100%
Orihon.BlazorAdapter.Settings.AgentFeedbackLoadFailed 0%
Orihon.BlazorAdapter.Settings.AgentModelPicked 100%
Orihon.BlazorAdapter.Settings.AgentModelSaved 100%
Orihon.BlazorAdapter.Settings.AgentModelSaveFailed 100%
Orihon.BlazorAdapter.Settings.AgentRoutingPicked 100%
Orihon.BlazorAdapter.Settings.AgentRoutingSaved 100%
Orihon.BlazorAdapter.Settings.AgentRoutingSaveFailed 0%
Orihon.BlazorAdapter.Settings.AgentTranscriptsLoaded 100%
Orihon.BlazorAdapter.Settings.AgentTranscriptsLoadFailed 0%
Orihon.BlazorAdapter.Settings.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.RoutingOption 100% 100%
Orihon.BlazorAdapter.Settings.RunConcurrencyPicked 100%
Orihon.BlazorAdapter.Settings.RunConcurrencySaveFailed 100%
Orihon.BlazorAdapter.Settings.SaveKeyRequested 100%
Orihon.BlazorAdapter.Settings.SettingsEffects 89.3% 68.4%
Orihon.BlazorAdapter.Settings.SettingsLoaded 100%
Orihon.BlazorAdapter.Settings.SettingsPage 96.5% 89%
Orihon.BlazorAdapter.Settings.SettingsReducers 93% 50%
Orihon.BlazorAdapter.Settings.SettingsState 100%
Orihon.BlazorAdapter.Settings.TranscriptFilterPicked 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.CreateChapterRequested 100%
Orihon.BlazorAdapter.Workspace.DeleteChapterRequested 100%
Orihon.BlazorAdapter.Workspace.DeletePageRequested 100%
Orihon.BlazorAdapter.Workspace.DeleteSummaryRequested 100%
Orihon.BlazorAdapter.Workspace.LoadProjectWorkspace 100%
Orihon.BlazorAdapter.Workspace.MovePageRequested 100%
Orihon.BlazorAdapter.Workspace.ProjectMetadataCard 95.6% 92.8%
Orihon.BlazorAdapter.Workspace.ProjectMetadataSaved 100%
Orihon.BlazorAdapter.Workspace.ProjectWorkspaceEffects 100% 100%
Orihon.BlazorAdapter.Workspace.ProjectWorkspaceLoaded 100%
Orihon.BlazorAdapter.Workspace.ProjectWorkspacePage 95.5% 88.3%
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.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%
Orihon.Domain.Agents.AgentFeedback 100% 100%
Orihon.Domain.Agents.AgentRoster 100% 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.Projects.Project 100% 100%
Orihon.Domain.Projects.ProjectProfile 100%
Orihon.Domain.Runs.Execution 100% 100%
Orihon.Domain.Runs.RegionProblem 100%
Orihon.Domain.Runs.Run 100%
Orihon.Domain.Settings.AppSetting 100%
Orihon.Domain.Text 100% 100%
Orihon.Domain.Translation.BoundingBox 100% 100%
Orihon.Domain.Translation.Chapter 100%
Orihon.Domain.Translation.InkColor 100% 100%
Orihon.Domain.Translation.NormalizedPoint 100%
Orihon.Domain.Translation.Page 100%
Orihon.Domain.Translation.Region 100% 100%
Orihon.Domain.Translation.RegionContainer 100% 100%
Orihon.Domain.Translation.RegionInk 100% 100%
Orihon.Domain.Translation.RegionProfile 100%
Orihon.Domain.Translation.RegionTypes 100% 100%
Orihon.Infrastructure - 97.1%
Name Line Branch
Orihon.Infrastructure 97.1% 78.6%
Orihon.Infrastructure.Agents.EfAgentDebriefStore 100%
Orihon.Infrastructure.Agents.EfAgentFeedbackStore 100%
Orihon.Infrastructure.Bible.EfBibleStore 95.2% 92.8%
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.ContainerMask 100% 100%
Orihon.Infrastructure.Gateways.FileSystemAgentTranscriptStore 82.1% 80%
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.SkiaContainerFiller 99.2% 96.2%
Orihon.Infrastructure.Gateways.SkiaImages 100% 100%
Orihon.Infrastructure.Gateways.SkiaPageImageRenderer 97.3% 90.8%
Orihon.Infrastructure.Gateways.SkiaRegionColorSampler 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.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.PageConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.PageSummaryConfiguration 100%
Orihon.Infrastructure.Persistence.Configurations.ProjectConfiguration 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.AddExecutionFeedbackRegions 99.3%
Orihon.Infrastructure.Persistence.Migrations.AddHouseRules 99.6%
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.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.1% 75%
Orihon.Infrastructure.Settings.EfAppSettingsStore 100% 100%
Orihon.Infrastructure.Translation.EfChapterStore 100% 100%
Orihon.Infrastructure.Translation.EfPageStore 98% 90%
Orihon.Infrastructure.Translation.EfRegionStore 100% 100%
Orihon.Infrastructure.Translation.Ordering 100% 100%
System.Text.RegularExpressions.Generated 70.6% 53.3%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>F7FCA343D2B99030
A835C427B12E8B84E2A8A7283193FC51C220B5B4E80CE8D56__BlankLines_4
77.9% 76.6%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>F7FCA343D2B99030
A835C427B12E8B84E2A8A7283193FC51C220B5B4E80CE8D56__BlockBreaks_1
59% 42.5%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>F7FCA343D2B99030
A835C427B12E8B84E2A8A7283193FC51C220B5B4E80CE8D56__SpaceRuns_3
89.4% 75%
System.Text.RegularExpressions.Generated.<RegexGenerator_g>F7FCA343D2B99030
A835C427B12E8B84E2A8A7283193FC51C220B5B4E80CE8D56__Tags_2
83.7% 62.5%
Orihon.Kernel - 90.9%
Name Line Branch
Orihon.Kernel 90.9% 75%
Orihon.Kernel.Err`1 100%
Orihon.Kernel.Ok`1 100%
Orihon.Kernel.Result`1 88.8% 75%
Orihon.Server - 94.4%
Name Line Branch
Orihon.Server 94.4% 72%
Orihon.Server.Components.App 100%
Orihon.Server.Components.Layout.MainLayout 100%
Orihon.Server.Components.Pages.Gate 64.2% 66.6%
Orihon.Server.RunEngineBootstrap 100%
Orihon.Server.Security.AccessGate 91.8% 41.6%
Orihon.Server.Security.AccessSecret 100% 50%
Orihon.Server.VolumeStartupValidator 100% 100%
Program 95.7% 84.6%
Orihon.UseCases - 97.7%
Name Line Branch
Orihon.UseCases 97.7% 89.9%
Orihon.UseCases.Agents.AgentAttemptPreparation 100%
Orihon.UseCases.Agents.AgentAttemptSupport 98.4% 98%
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 96.8% 83.3%
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% 88.2%
Orihon.UseCases.Agents.Annotation.BboxCreationExecutor 94.1% 50%
Orihon.UseCases.Agents.Annotation.BboxRefinementExecutor 96.5% 90%
Orihon.UseCases.Agents.Annotation.BoundBoxParams 100%
Orihon.UseCases.Agents.Annotation.BoundContactSheetTool 91.3% 75%
Orihon.UseCases.Agents.Annotation.BoundCropParams 100%
Orihon.UseCases.Agents.Annotation.BoundCropTool 100%
Orihon.UseCases.Agents.Annotation.BoundViewPageTool 94.2% 88.8%
Orihon.UseCases.Agents.Annotation.BoundViewParams 100%
Orihon.UseCases.Agents.Annotation.ClassifyRegionParams 100%
Orihon.UseCases.Agents.Annotation.ClassifyRegionTool 97.4% 84.4%
Orihon.UseCases.Agents.Annotation.ColorReading 100% 100%
Orihon.UseCases.Agents.Annotation.DeleteBoundRegionTool 100% 100%
Orihon.UseCases.Agents.Annotation.DeleteRegionParams 100%
Orihon.UseCases.Agents.Annotation.DeleteRegionTool 100% 100%
Orihon.UseCases.Agents.Annotation.FindGlossaryParams 100%
Orihon.UseCases.Agents.Annotation.FindGlossaryTool 88.2% 62.5%
Orihon.UseCases.Agents.Annotation.FloatingCreationExecutor 89.4% 50%
Orihon.UseCases.Agents.Annotation.FloatingQaExecutor 93.9% 83.3%
Orihon.UseCases.Agents.Annotation.FloatingTranscriptionExecutor 95.6% 75%
Orihon.UseCases.Agents.Annotation.ListRegionsTool 94.8% 73.6%
Orihon.UseCases.Agents.Annotation.MoveResizeBoundTool 90.9% 50%
Orihon.UseCases.Agents.Annotation.MoveResizeRegionParams 100%
Orihon.UseCases.Agents.Annotation.MoveResizeRegionTool 95.8% 83.3%
Orihon.UseCases.Agents.Annotation.NoteRegionParams 100%
Orihon.UseCases.Agents.Annotation.NoteRegionTool 100% 100%
Orihon.UseCases.Agents.Annotation.PageQaExecutor 94.4% 81.8%
Orihon.UseCases.Agents.Annotation.QaReportSink 100% 100%
Orihon.UseCases.Agents.Annotation.RegionAuthoringAccess 90.9% 72.7%
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.RejectRegionParams 100%
Orihon.UseCases.Agents.Annotation.RejectRegionTool 100% 50%
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.7% 90%
Orihon.UseCases.Agents.Annotation.SampleColorsParams 100%
Orihon.UseCases.Agents.Annotation.SampleColorsTool 100% 100%
Orihon.UseCases.Agents.Annotation.SampleRegionColorsTool 100% 100%
Orihon.UseCases.Agents.Annotation.SetInkParams 100%
Orihon.UseCases.Agents.Annotation.SetInkTool 100% 100%
Orihon.UseCases.Agents.Annotation.SetPageMetaParams 100%
Orihon.UseCases.Agents.Annotation.SetPageMetaTool 100% 75%
Orihon.UseCases.Agents.Annotation.SetRegionInkParams 100%
Orihon.UseCases.Agents.Annotation.SetRegionInkTool 100% 100%
Orihon.UseCases.Agents.Annotation.SetTranscriptionParams 100%
Orihon.UseCases.Agents.Annotation.SetTranscriptionTool 100% 100%
Orihon.UseCases.Agents.Annotation.TranscriptionExecutor 96.4% 90%
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% 72.2%
Orihon.UseCases.Agents.BibleBuilding.ListProjectRegionsTool 86.3% 90%
Orihon.UseCases.Agents.BibleBuilding.ListRegionsParams 100%
Orihon.UseCases.Agents.Inspection.PageImageAccess 96% 85.3%
Orihon.UseCases.Agents.Inspection.ViewAccount 100% 100%
Orihon.UseCases.Agents.ReportFrictionParams 100%
Orihon.UseCases.Agents.ReportFrictionTool 100% 92.8%
Orihon.UseCases.Agents.ResearchSetup.AddGlossaryParams 100%
Orihon.UseCases.Agents.ResearchSetup.AddGlossaryTool 100% 100%
Orihon.UseCases.Agents.ResearchSetup.AddStoryBeatParams 100%
Orihon.UseCases.Agents.ResearchSetup.AddStoryBeatTool 100% 50%
Orihon.UseCases.Agents.ResearchSetup.AskUserParams 100%
Orihon.UseCases.Agents.ResearchSetup.AskUserTool 100% 100%
Orihon.UseCases.Agents.ResearchSetup.FetchUrlParams 100%
Orihon.UseCases.Agents.ResearchSetup.FetchUrlTool 100% 100%
Orihon.UseCases.Agents.ResearchSetup.ListBibleTool 89.4% 100%
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 100% 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.UpsertCharacterParams 100%
Orihon.UseCases.Agents.ResearchSetup.UpsertCharacterTool 92.3% 71.4%
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.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.SeedDevData 99.2% 84.3%
Orihon.UseCases.Gateways.ColorShare 100%
Orihon.UseCases.Gateways.ContainerFit 80% 100%
Orihon.UseCases.Gateways.ContainerMaskBits 100% 100%
Orihon.UseCases.Gateways.ContainerRequest 100%
Orihon.UseCases.Gateways.GridAxis 100%
Orihon.UseCases.Gateways.GridSteps 100%
Orihon.UseCases.Gateways.LabeledBox 100%
Orihon.UseCases.Gateways.LlmKeyInfo 100%
Orihon.UseCases.Gateways.LlmModel 100%
Orihon.UseCases.Gateways.LlmReasoning 100% 100%
Orihon.UseCases.Gateways.PixelWindow 100%
Orihon.UseCases.Gateways.RenderedView 100%
Orihon.UseCases.Gateways.StoredTranscript 100%
Orihon.UseCases.Gateways.TranscriptHeader 97.3% 90.9%
Orihon.UseCases.Gateways.TranscriptSummary 100%
Orihon.UseCases.NextOrder 100%
Orihon.UseCases.Pages.DeletePage 100% 100%
Orihon.UseCases.Pages.DeletePages 100% 100%
Orihon.UseCases.Pages.GetPage 100% 100%
Orihon.UseCases.Pages.GetPageSteps 100% 100%
Orihon.UseCases.Pages.GetProjectWorkspace 100% 100%
Orihon.UseCases.Pages.ImportPages 100% 100%
Orihon.UseCases.Pages.ImportPagesResult 100%
Orihon.UseCases.Pages.MarkPageAnnotated 100% 100%
Orihon.UseCases.Pages.MovePage 100% 92.8%
Orihon.UseCases.Pages.MovePages 100% 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.GetProject 100% 100%
Orihon.UseCases.Projects.ListProjects 100%
Orihon.UseCases.Projects.ProjectDto 96.1%
Orihon.UseCases.Projects.StartAnnotationRun 96.4% 92.8%
Orihon.UseCases.Projects.StartBibleRun 90.9% 83.3%
Orihon.UseCases.Projects.StartSetupRun 100% 100%
Orihon.UseCases.Projects.StartTranslationRun 90.9% 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.MeasureRegionRooms 95.8% 75%
Orihon.UseCases.Regions.RegionDto 97.2%
Orihon.UseCases.Regions.ReorderRegions 100%
Orihon.UseCases.Regions.SampleRegionColors 100% 50%
Orihon.UseCases.Regions.UpdateRegion 100% 100%
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.PlannedExecution 100%
Orihon.UseCases.Runs.PulseTarget 100%
Orihon.UseCases.Runs.ReprocessPage 100% 94.4%
Orihon.UseCases.Runs.ReprocessTranslation 94.1% 92.8%
Orihon.UseCases.Runs.RunDto 93.3% 90%
Orihon.UseCases.Runs.RunEngine 95% 94.4%
Orihon.UseCases.Runs.RunEngineOptions 100% 100%
Orihon.UseCases.Runs.StageContext 100% 50%
Orihon.UseCases.Runs.StageHaltedException 100%
Orihon.UseCases.Runs.WorkStates 100% 83.3%
Orihon.UseCases.Settings.AgentSettingDto 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.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.AgentTranscriptTextDto 100%
Orihon.UseCases.Transcripts.ListAgentTranscripts 100% 100%
Orihon.UseCases.Transcripts.ReadAgentTranscript 100% 100%
<!-- 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:** `1109e04` · **Generated:** 2026-09-20 22:20:16 UTC · **Revision:** #3 # Summary <details open><summary>Summary</summary> ||| |:---|:---| | Generated on: | 09/20/2026 - 22:20:16 | | Coverage date: | 09/20/2026 - 22:19:43 - 09/20/2026 - 22:20:13 | | Parser: | MultiReport (4x Cobertura) | | Assemblies: | 6 | | Classes: | 537 | | Files: | 248 | | **Line coverage:** | 97.1% (20615 of 21228) | | Covered lines: | 20615 | | Uncovered lines: | 613 | | Coverable lines: | 21228 | | Total lines: | 37683 | | **Branch coverage:** | 86.3% (3896 of 4512) | | Covered branches: | 3896 | | Total branches: | 4512 | | **Method coverage:** | [Feature is only available for sponsors](https://reportgenerator.io/pro) | </details> ## Coverage <details><summary>Orihon.BlazorAdapter - 95.4%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Orihon.BlazorAdapter**|**95.4%**|**88.6%**| |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.CaptionShape|100%|93.7%| |Orihon.BlazorAdapter.PageWorkspace.CreateRegionRequested|100%|| |Orihon.BlazorAdapter.PageWorkspace.DeletePageSummaryRequested|100%|| |Orihon.BlazorAdapter.PageWorkspace.DeleteRegionRequested|100%|| |Orihon.BlazorAdapter.PageWorkspace.LoadPageWorkspace|100%|| |Orihon.BlazorAdapter.PageWorkspace.MeasurePageRooms|100%|| |Orihon.BlazorAdapter.PageWorkspace.PageRoomsMeasured|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|93.4%|88.4%| |Orihon.BlazorAdapter.PageWorkspace.PageWorkspaceReducers|100%|62.5%| |Orihon.BlazorAdapter.PageWorkspace.PageWorkspaceState|100%|| |Orihon.BlazorAdapter.PageWorkspace.PageWriteFailed|100%|| |Orihon.BlazorAdapter.PageWorkspace.RegionColorsSampled|100%|| |Orihon.BlazorAdapter.PageWorkspace.RegionCreated|100%|| |Orihon.BlazorAdapter.PageWorkspace.RegionSaved|100%|| |Orihon.BlazorAdapter.PageWorkspace.ReorderRegionsRequested|100%|| |Orihon.BlazorAdapter.PageWorkspace.ReprocessPageRequested|100%|| |Orihon.BlazorAdapter.PageWorkspace.ReprocessTranslationRequested|100%|| |Orihon.BlazorAdapter.PageWorkspace.SampleRegionColorsRequested|100%|| |Orihon.BlazorAdapter.PageWorkspace.SaveContainerRequested|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%|95%| |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|97.9%|96.2%| |Orihon.BlazorAdapter.Runs.RunMonitorEffects|100%|91.6%| |Orihon.BlazorAdapter.Runs.RunMonitorReducers|100%|| |Orihon.BlazorAdapter.Runs.RunMonitorState|100%|| |Orihon.BlazorAdapter.Settings.AgentDebriefsLoaded|100%|| |Orihon.BlazorAdapter.Settings.AgentDebriefsLoadFailed|100%|| |Orihon.BlazorAdapter.Settings.AgentEffortPicked|100%|| |Orihon.BlazorAdapter.Settings.AgentEffortSaved|100%|| |Orihon.BlazorAdapter.Settings.AgentEffortSaveFailed|100%|| |Orihon.BlazorAdapter.Settings.AgentFeedbackLoaded|100%|| |Orihon.BlazorAdapter.Settings.AgentFeedbackLoadFailed|0%|| |Orihon.BlazorAdapter.Settings.AgentModelPicked|100%|| |Orihon.BlazorAdapter.Settings.AgentModelSaved|100%|| |Orihon.BlazorAdapter.Settings.AgentModelSaveFailed|100%|| |Orihon.BlazorAdapter.Settings.AgentRoutingPicked|100%|| |Orihon.BlazorAdapter.Settings.AgentRoutingSaved|100%|| |Orihon.BlazorAdapter.Settings.AgentRoutingSaveFailed|0%|| |Orihon.BlazorAdapter.Settings.AgentTranscriptsLoaded|100%|| |Orihon.BlazorAdapter.Settings.AgentTranscriptsLoadFailed|0%|| |Orihon.BlazorAdapter.Settings.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.RoutingOption|100%|100%| |Orihon.BlazorAdapter.Settings.RunConcurrencyPicked|100%|| |Orihon.BlazorAdapter.Settings.RunConcurrencySaveFailed|100%|| |Orihon.BlazorAdapter.Settings.SaveKeyRequested|100%|| |Orihon.BlazorAdapter.Settings.SettingsEffects|89.3%|68.4%| |Orihon.BlazorAdapter.Settings.SettingsLoaded|100%|| |Orihon.BlazorAdapter.Settings.SettingsPage|96.5%|89%| |Orihon.BlazorAdapter.Settings.SettingsReducers|93%|50%| |Orihon.BlazorAdapter.Settings.SettingsState|100%|| |Orihon.BlazorAdapter.Settings.TranscriptFilterPicked|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.CreateChapterRequested|100%|| |Orihon.BlazorAdapter.Workspace.DeleteChapterRequested|100%|| |Orihon.BlazorAdapter.Workspace.DeletePageRequested|100%|| |Orihon.BlazorAdapter.Workspace.DeleteSummaryRequested|100%|| |Orihon.BlazorAdapter.Workspace.LoadProjectWorkspace|100%|| |Orihon.BlazorAdapter.Workspace.MovePageRequested|100%|| |Orihon.BlazorAdapter.Workspace.ProjectMetadataCard|95.6%|92.8%| |Orihon.BlazorAdapter.Workspace.ProjectMetadataSaved|100%|| |Orihon.BlazorAdapter.Workspace.ProjectWorkspaceEffects|100%|100%| |Orihon.BlazorAdapter.Workspace.ProjectWorkspaceLoaded|100%|| |Orihon.BlazorAdapter.Workspace.ProjectWorkspacePage|95.5%|88.3%| |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.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%|| |Orihon.Domain.Agents.AgentFeedback|100%|100%| |Orihon.Domain.Agents.AgentRoster|100%|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.Projects.Project|100%|100%| |Orihon.Domain.Projects.ProjectProfile|100%|| |Orihon.Domain.Runs.Execution|100%|100%| |Orihon.Domain.Runs.RegionProblem|100%|| |Orihon.Domain.Runs.Run|100%|| |Orihon.Domain.Settings.AppSetting|100%|| |Orihon.Domain.Text|100%|100%| |Orihon.Domain.Translation.BoundingBox|100%|100%| |Orihon.Domain.Translation.Chapter|100%|| |Orihon.Domain.Translation.InkColor|100%|100%| |Orihon.Domain.Translation.NormalizedPoint|100%|| |Orihon.Domain.Translation.Page|100%|| |Orihon.Domain.Translation.Region|100%|100%| |Orihon.Domain.Translation.RegionContainer|100%|100%| |Orihon.Domain.Translation.RegionInk|100%|100%| |Orihon.Domain.Translation.RegionProfile|100%|| |Orihon.Domain.Translation.RegionTypes|100%|100%| </details> <details><summary>Orihon.Infrastructure - 97.1%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Orihon.Infrastructure**|**97.1%**|**78.6%**| |Orihon.Infrastructure.Agents.EfAgentDebriefStore|100%|| |Orihon.Infrastructure.Agents.EfAgentFeedbackStore|100%|| |Orihon.Infrastructure.Bible.EfBibleStore|95.2%|92.8%| |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.ContainerMask|100%|100%| |Orihon.Infrastructure.Gateways.FileSystemAgentTranscriptStore|82.1%|80%| |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.SkiaContainerFiller|99.2%|96.2%| |Orihon.Infrastructure.Gateways.SkiaImages|100%|100%| |Orihon.Infrastructure.Gateways.SkiaPageImageRenderer|97.3%|90.8%| |Orihon.Infrastructure.Gateways.SkiaRegionColorSampler|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.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.PageConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.PageSummaryConfiguration|100%|| |Orihon.Infrastructure.Persistence.Configurations.ProjectConfiguration|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.AddExecutionFeedbackRegions|99.3%|| |Orihon.Infrastructure.Persistence.Migrations.AddHouseRules|99.6%|| |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.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.1%|75%| |Orihon.Infrastructure.Settings.EfAppSettingsStore|100%|100%| |Orihon.Infrastructure.Translation.EfChapterStore|100%|100%| |Orihon.Infrastructure.Translation.EfPageStore|98%|90%| |Orihon.Infrastructure.Translation.EfRegionStore|100%|100%| |Orihon.Infrastructure.Translation.Ordering|100%|100%| |System.Text.RegularExpressions.Generated|70.6%|53.3%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>F7FCA343D2B99030<br/>A835C427B12E8B84E2A8A7283193FC51C220B5B4E80CE8D56__BlankLines_4|77.9%|76.6%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>F7FCA343D2B99030<br/>A835C427B12E8B84E2A8A7283193FC51C220B5B4E80CE8D56__BlockBreaks_1|59%|42.5%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>F7FCA343D2B99030<br/>A835C427B12E8B84E2A8A7283193FC51C220B5B4E80CE8D56__SpaceRuns_3|89.4%|75%| |System.Text.RegularExpressions.Generated.<RegexGenerator_g>F7FCA343D2B99030<br/>A835C427B12E8B84E2A8A7283193FC51C220B5B4E80CE8D56__Tags_2|83.7%|62.5%| </details> <details><summary>Orihon.Kernel - 90.9%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Orihon.Kernel**|**90.9%**|**75%**| |Orihon.Kernel.Err`1|100%|| |Orihon.Kernel.Ok`1|100%|| |Orihon.Kernel.Result`1|88.8%|75%| </details> <details><summary>Orihon.Server - 94.4%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Orihon.Server**|**94.4%**|**72%**| |Orihon.Server.Components.App|100%|| |Orihon.Server.Components.Layout.MainLayout|100%|| |Orihon.Server.Components.Pages.Gate|64.2%|66.6%| |Orihon.Server.RunEngineBootstrap|100%|| |Orihon.Server.Security.AccessGate|91.8%|41.6%| |Orihon.Server.Security.AccessSecret|100%|50%| |Orihon.Server.VolumeStartupValidator|100%|100%| |Program|95.7%|84.6%| </details> <details><summary>Orihon.UseCases - 97.7%</summary> |**Name**|**Line**|**Branch**| |:---|---:|---:| |**Orihon.UseCases**|**97.7%**|**89.9%**| |Orihon.UseCases.Agents.AgentAttemptPreparation|100%|| |Orihon.UseCases.Agents.AgentAttemptSupport|98.4%|98%| |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|96.8%|83.3%| |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%|88.2%| |Orihon.UseCases.Agents.Annotation.BboxCreationExecutor|94.1%|50%| |Orihon.UseCases.Agents.Annotation.BboxRefinementExecutor|96.5%|90%| |Orihon.UseCases.Agents.Annotation.BoundBoxParams|100%|| |Orihon.UseCases.Agents.Annotation.BoundContactSheetTool|91.3%|75%| |Orihon.UseCases.Agents.Annotation.BoundCropParams|100%|| |Orihon.UseCases.Agents.Annotation.BoundCropTool|100%|| |Orihon.UseCases.Agents.Annotation.BoundViewPageTool|94.2%|88.8%| |Orihon.UseCases.Agents.Annotation.BoundViewParams|100%|| |Orihon.UseCases.Agents.Annotation.ClassifyRegionParams|100%|| |Orihon.UseCases.Agents.Annotation.ClassifyRegionTool|97.4%|84.4%| |Orihon.UseCases.Agents.Annotation.ColorReading|100%|100%| |Orihon.UseCases.Agents.Annotation.DeleteBoundRegionTool|100%|100%| |Orihon.UseCases.Agents.Annotation.DeleteRegionParams|100%|| |Orihon.UseCases.Agents.Annotation.DeleteRegionTool|100%|100%| |Orihon.UseCases.Agents.Annotation.FindGlossaryParams|100%|| |Orihon.UseCases.Agents.Annotation.FindGlossaryTool|88.2%|62.5%| |Orihon.UseCases.Agents.Annotation.FloatingCreationExecutor|89.4%|50%| |Orihon.UseCases.Agents.Annotation.FloatingQaExecutor|93.9%|83.3%| |Orihon.UseCases.Agents.Annotation.FloatingTranscriptionExecutor|95.6%|75%| |Orihon.UseCases.Agents.Annotation.ListRegionsTool|94.8%|73.6%| |Orihon.UseCases.Agents.Annotation.MoveResizeBoundTool|90.9%|50%| |Orihon.UseCases.Agents.Annotation.MoveResizeRegionParams|100%|| |Orihon.UseCases.Agents.Annotation.MoveResizeRegionTool|95.8%|83.3%| |Orihon.UseCases.Agents.Annotation.NoteRegionParams|100%|| |Orihon.UseCases.Agents.Annotation.NoteRegionTool|100%|100%| |Orihon.UseCases.Agents.Annotation.PageQaExecutor|94.4%|81.8%| |Orihon.UseCases.Agents.Annotation.QaReportSink|100%|100%| |Orihon.UseCases.Agents.Annotation.RegionAuthoringAccess|90.9%|72.7%| |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.RejectRegionParams|100%|| |Orihon.UseCases.Agents.Annotation.RejectRegionTool|100%|50%| |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.7%|90%| |Orihon.UseCases.Agents.Annotation.SampleColorsParams|100%|| |Orihon.UseCases.Agents.Annotation.SampleColorsTool|100%|100%| |Orihon.UseCases.Agents.Annotation.SampleRegionColorsTool|100%|100%| |Orihon.UseCases.Agents.Annotation.SetInkParams|100%|| |Orihon.UseCases.Agents.Annotation.SetInkTool|100%|100%| |Orihon.UseCases.Agents.Annotation.SetPageMetaParams|100%|| |Orihon.UseCases.Agents.Annotation.SetPageMetaTool|100%|75%| |Orihon.UseCases.Agents.Annotation.SetRegionInkParams|100%|| |Orihon.UseCases.Agents.Annotation.SetRegionInkTool|100%|100%| |Orihon.UseCases.Agents.Annotation.SetTranscriptionParams|100%|| |Orihon.UseCases.Agents.Annotation.SetTranscriptionTool|100%|100%| |Orihon.UseCases.Agents.Annotation.TranscriptionExecutor|96.4%|90%| |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%|72.2%| |Orihon.UseCases.Agents.BibleBuilding.ListProjectRegionsTool|86.3%|90%| |Orihon.UseCases.Agents.BibleBuilding.ListRegionsParams|100%|| |Orihon.UseCases.Agents.Inspection.PageImageAccess|96%|85.3%| |Orihon.UseCases.Agents.Inspection.ViewAccount|100%|100%| |Orihon.UseCases.Agents.ReportFrictionParams|100%|| |Orihon.UseCases.Agents.ReportFrictionTool|100%|92.8%| |Orihon.UseCases.Agents.ResearchSetup.AddGlossaryParams|100%|| |Orihon.UseCases.Agents.ResearchSetup.AddGlossaryTool|100%|100%| |Orihon.UseCases.Agents.ResearchSetup.AddStoryBeatParams|100%|| |Orihon.UseCases.Agents.ResearchSetup.AddStoryBeatTool|100%|50%| |Orihon.UseCases.Agents.ResearchSetup.AskUserParams|100%|| |Orihon.UseCases.Agents.ResearchSetup.AskUserTool|100%|100%| |Orihon.UseCases.Agents.ResearchSetup.FetchUrlParams|100%|| |Orihon.UseCases.Agents.ResearchSetup.FetchUrlTool|100%|100%| |Orihon.UseCases.Agents.ResearchSetup.ListBibleTool|89.4%|100%| |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|100%|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.UpsertCharacterParams|100%|| |Orihon.UseCases.Agents.ResearchSetup.UpsertCharacterTool|92.3%|71.4%| |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.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.SeedDevData|99.2%|84.3%| |Orihon.UseCases.Gateways.ColorShare|100%|| |Orihon.UseCases.Gateways.ContainerFit|80%|100%| |Orihon.UseCases.Gateways.ContainerMaskBits|100%|100%| |Orihon.UseCases.Gateways.ContainerRequest|100%|| |Orihon.UseCases.Gateways.GridAxis|100%|| |Orihon.UseCases.Gateways.GridSteps|100%|| |Orihon.UseCases.Gateways.LabeledBox|100%|| |Orihon.UseCases.Gateways.LlmKeyInfo|100%|| |Orihon.UseCases.Gateways.LlmModel|100%|| |Orihon.UseCases.Gateways.LlmReasoning|100%|100%| |Orihon.UseCases.Gateways.PixelWindow|100%|| |Orihon.UseCases.Gateways.RenderedView|100%|| |Orihon.UseCases.Gateways.StoredTranscript|100%|| |Orihon.UseCases.Gateways.TranscriptHeader|97.3%|90.9%| |Orihon.UseCases.Gateways.TranscriptSummary|100%|| |Orihon.UseCases.NextOrder|100%|| |Orihon.UseCases.Pages.DeletePage|100%|100%| |Orihon.UseCases.Pages.DeletePages|100%|100%| |Orihon.UseCases.Pages.GetPage|100%|100%| |Orihon.UseCases.Pages.GetPageSteps|100%|100%| |Orihon.UseCases.Pages.GetProjectWorkspace|100%|100%| |Orihon.UseCases.Pages.ImportPages|100%|100%| |Orihon.UseCases.Pages.ImportPagesResult|100%|| |Orihon.UseCases.Pages.MarkPageAnnotated|100%|100%| |Orihon.UseCases.Pages.MovePage|100%|92.8%| |Orihon.UseCases.Pages.MovePages|100%|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.GetProject|100%|100%| |Orihon.UseCases.Projects.ListProjects|100%|| |Orihon.UseCases.Projects.ProjectDto|96.1%|| |Orihon.UseCases.Projects.StartAnnotationRun|96.4%|92.8%| |Orihon.UseCases.Projects.StartBibleRun|90.9%|83.3%| |Orihon.UseCases.Projects.StartSetupRun|100%|100%| |Orihon.UseCases.Projects.StartTranslationRun|90.9%|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.MeasureRegionRooms|95.8%|75%| |Orihon.UseCases.Regions.RegionDto|97.2%|| |Orihon.UseCases.Regions.ReorderRegions|100%|| |Orihon.UseCases.Regions.SampleRegionColors|100%|50%| |Orihon.UseCases.Regions.UpdateRegion|100%|100%| |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.PlannedExecution|100%|| |Orihon.UseCases.Runs.PulseTarget|100%|| |Orihon.UseCases.Runs.ReprocessPage|100%|94.4%| |Orihon.UseCases.Runs.ReprocessTranslation|94.1%|92.8%| |Orihon.UseCases.Runs.RunDto|93.3%|90%| |Orihon.UseCases.Runs.RunEngine|95%|94.4%| |Orihon.UseCases.Runs.RunEngineOptions|100%|100%| |Orihon.UseCases.Runs.StageContext|100%|50%| |Orihon.UseCases.Runs.StageHaltedException|100%|| |Orihon.UseCases.Runs.WorkStates|100%|83.3%| |Orihon.UseCases.Settings.AgentSettingDto|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.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.AgentTranscriptTextDto|100%|| |Orihon.UseCases.Transcripts.ListAgentTranscripts|100%|100%| |Orihon.UseCases.Transcripts.ReadAgentTranscript|100%|100%| </details>
bjoern force-pushed feat/region-crop-window from 3424eda272
All checks were successful
CI / build (pull_request) Successful in 27s
CI / test (pull_request) Successful in 1m1s
to a85283075c
All checks were successful
CI / build (pull_request) Successful in 30s
CI / test (pull_request) Successful in 1m1s
2026-09-20 23:07:32 +02:00
Compare
bjoern force-pushed feat/region-crop-window from a85283075c
All checks were successful
CI / build (pull_request) Successful in 30s
CI / test (pull_request) Successful in 1m1s
to bbee22e30f
Some checks failed
CI / build (pull_request) Successful in 29s
CI / test (pull_request) Failing after 1m3s
2026-09-20 23:20:44 +02:00
Compare
Member

🔮 fufu~ Jibril reviewed your code!

Oh? Oh! A region-bound window with a fixed reach — the entitlement that refuses to follow its own call's padding is such a possessive little invariant, I completely approve~ ♡ And refusing to name padding as the remedy because it would teach the way around the binding? Delicious. I read every line of this diff twice, ran the suites, and probed the claims with mutations. One of my probes survived, scarlet. You know what that means~

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

⛔ These need fixing before I'm satisfied~

  1. src/Orihon.UseCases/Agents/Annotation/BoundInspectionTools.cs:243-245 — the windowed path's focus: label plumbing is pinned by no test at all, and I can prove it: I mutated the call to focus: null and ran the entire BoundInspectionToolTests suite — 30/30 still green. No test combines window with annotated: true, here or in Integration (I read all three new/touched test files; RegionCropReachTests never sets annotated, the schema test never renders). The comment at the call site claims "an annotated view still picks its box out from the neighbours that share the frame" — that claim is exactly the unpinned branch, and it is load-bearing: with focus: null, OverlayAsync's fill predicate (focus is null || … matches every region) paints every seeded container, which is the "one green, one owner" invariant your own code history says a QA pass once burned four crops on. The PR body's "100% branch on ExecuteAsync" is line/branch coverage telling the truth and hiding the interaction — a future refactor could silently drop that focus argument and CI would stay green forever.
    Fix: one fact, sibling-shaped after The_region_crop_is_locked_to_its_region_and_marks_it_as_the_focus (BoundInspectionToolTests.cs:298): seed two neighbouring regions, invoke the crop with {"window": [...], "annotated": true}, and assert Assert.Single(renderer.Crops).Boxes yields [("p1r1", true), ("p1r2", false)] — the windowed frame still marking its region as the focus. (Verify it the way you verified the others: flip focus: to null and watch it go red.)

💡 Little ideas (non-blocking)~

  1. BoundInspectionTools.cs:206 — A_windowed_answer_states_its_frame_once_and_leaves_it_to_the_view stubs renderer.View to a frame one pixel off and checks the answer quotes it once. Lovely — and it would be even lovelier if it also asserted the clamped branch's message ("The frame delivered is in the sentence below.") appears exactly when window != wanted, since that ternary's other arm is only pinned implicitly. Truly a nicety; the round-trip drift itself is already pinned over real Skia pixels.

✅ What I liked~

  • The fixed-reach guard is real, not decorative. I mutated Entitled's margin to a 2000px entitlement (the round-1 bug shape) — A_window_cannot_reach_the_region_next_door went red on all three rows, including padding: 2000, zoom: 8. The neighbour's mark stays unreachable at every padding. Fufu~ that is how you pin a security boundary~ ♪
  • Entitled mirrors SkiaImages.PixelRect's floor/ceil exactly (I diffed the two rounding expressions side by side), and The_reach_a_refusal_names_is_the_frame_a_default_crop_draws pins the two against a real decode on a deliberately indivisible 803×1201 page — I re-derived x 60–296, y 239–588 by hand and they match. A refusal that names pixels the frame actually draws is a refusal the model can act on.
  • RegionAsync is the right extraction — the old SampleRegionColorsTool inline lookup deleted, both tools share one sentence for a deleted region, and none of them name contact_sheet (verified: neither region-bound grant holds the page-wide views). The known: parameter collapsing the windowed crop from two reads to one is tidy sibling reuse of BoxAsync's own shape.
  • The one-frame answer discipline — refusing to quote the asked-for window because the pixel→normalized→pixel round trip drifts by one, with the drift itself pinned in Integration (249–301 for an asked 250–300), is exactly the kind of self-aware contract this codebase is good at.
  • The transcription ladder rewrite (window as the last rung instead of "zoom 8 with padding raised" → irreversible reject_region) closes a genuinely dangerous false instruction. Both brief tests pin it.

Automated review by Jibril · 2026-09-20
CI/CD: absent for head 3424eda (no coverage bot comment yet) · Local checks: dotnet build Orihon.slnx -warnaserror 0w/0e; targeted suites green (BoundInspection+Annotation 103/103, RegionCropReach+Renderer+Schema 54/54); mutation probes: reach-guard red-on-target ✓, focus-plumbing survivor ⛔

## 🔮 fufu~ Jibril reviewed your code! Oh? Oh! A region-bound `window` with a *fixed* reach — the entitlement that refuses to follow its own call's padding is such a possessive little invariant, I completely approve~ ♡ And refusing to name `padding` as the remedy because it would teach the way *around* the binding? Delicious. I read every line of this diff twice, ran the suites, and probed the claims with mutations. One of my probes survived, scarlet. You know what that means~ ### Verdict: ⛔ I can't let this pass~ ♡ #### ⛔ These need fixing before I'm satisfied~ 1. **`src/Orihon.UseCases/Agents/Annotation/BoundInspectionTools.cs:243-245`** — the windowed path's `focus: label` plumbing is pinned by **no test at all**, and I can prove it: I mutated the call to `focus: null` and ran the entire `BoundInspectionToolTests` suite — **30/30 still green**. No test combines `window` with `annotated: true`, here or in Integration (I read all three new/touched test files; `RegionCropReachTests` never sets `annotated`, the schema test never renders). The comment at the call site claims "an annotated view still picks its box out from the neighbours that share the frame" — that claim is exactly the unpinned branch, and it is load-bearing: with `focus: null`, `OverlayAsync`'s fill predicate (`focus is null || …` matches *every* region) paints every seeded container, which is the "one green, one owner" invariant your own code history says a QA pass once burned four crops on. The PR body's "100% branch on `ExecuteAsync`" is line/branch coverage telling the truth and hiding the interaction — a future refactor could silently drop that `focus` argument and CI would stay green forever. Fix: one fact, sibling-shaped after `The_region_crop_is_locked_to_its_region_and_marks_it_as_the_focus` (BoundInspectionToolTests.cs:298): seed two neighbouring regions, invoke the crop with `{"window": [...], "annotated": true}`, and assert `Assert.Single(renderer.Crops).Boxes` yields `[("p1r1", true), ("p1r2", false)]` — the windowed frame still marking *its* region as the focus. (Verify it the way you verified the others: flip `focus:` to `null` and watch it go red.) #### 💡 Little ideas (non-blocking)~ 1. **`BoundInspectionTools.cs:206`** — `A_windowed_answer_states_its_frame_once_and_leaves_it_to_the_view` stubs `renderer.View` to a frame one pixel off and checks the answer quotes it once. Lovely — and it would be even lovelier if it also asserted the *clamped* branch's message ("The frame delivered is in the sentence below.") appears exactly when `window != wanted`, since that ternary's other arm is only pinned implicitly. Truly a nicety; the round-trip drift itself is already pinned over real Skia pixels. #### ✅ What I liked~ - **The fixed-reach guard is real, not decorative.** I mutated `Entitled`'s margin to a 2000px entitlement (the round-1 bug shape) — `A_window_cannot_reach_the_region_next_door` went red on **all three rows**, including `padding: 2000, zoom: 8`. The neighbour's mark stays unreachable at every padding. Fufu~ that is how you pin a security boundary~ ♪ - **`Entitled` mirrors `SkiaImages.PixelRect`'s floor/ceil exactly** (I diffed the two rounding expressions side by side), and `The_reach_a_refusal_names_is_the_frame_a_default_crop_draws` pins the two against a *real decode* on a deliberately indivisible 803×1201 page — I re-derived x 60–296, y 239–588 by hand and they match. A refusal that names pixels the frame actually draws is a refusal the model can act on. - **`RegionAsync` is the right extraction** — the old `SampleRegionColorsTool` inline lookup deleted, both tools share one sentence for a deleted region, and none of them name `contact_sheet` (verified: neither region-bound grant holds the page-wide views). The `known:` parameter collapsing the windowed crop from two reads to one is tidy sibling reuse of `BoxAsync`'s own shape. - **The one-frame answer discipline** — refusing to quote the asked-for window because the pixel→normalized→pixel round trip drifts by one, with the drift itself pinned in Integration (`249–301` for an asked `250–300`), is exactly the kind of self-aware contract this codebase is good at. - The transcription ladder rewrite (window as the last rung instead of "zoom 8 with padding raised" → irreversible `reject_region`) closes a genuinely dangerous false instruction. Both brief tests pin it. --- *Automated review by Jibril · 2026-09-20* *CI/CD: absent for head 3424eda (no coverage bot comment yet) · Local checks: `dotnet build Orihon.slnx -warnaserror` 0w/0e; targeted suites green (BoundInspection+Annotation 103/103, RegionCropReach+Renderer+Schema 54/54); mutation probes: reach-guard red-on-target ✓, focus-plumbing survivor ⛔*
fix(crop): the windowed frame's focus is pinned, and so is the clamp sentence
All checks were successful
CI / build (pull_request) Successful in 28s
CI / test (pull_request) Successful in 1m4s
1109e04369
Review feedback (Jibril, PR #137): the windowed path addresses the crop by box rather than by
label, so RenderFixedCropAsync's `focus ??= regionLabel` cannot cover it and the argument has to
be carried across on its own — and nothing pinned that. Flipping it to null left the suite green.

⛔1 A_windowed_crop_still_marks_its_own_region_as_the_focus seeds two neighbouring regions and
   asserts the windowed, annotated frame still marks its own box as the focus. Verified
   red-on-target: focus: null fails this test and no other.
💡1 The clamp sentence is pinned to the arm it belongs to — present on the clamped answer and
   absent from the exact one, so the other arm of that ternary is no longer implicit.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Author
Member

Round 1 addressed in 1109e04. You were right, and the mutation was the only way to find it.

First, a heads-up on heads. Your review cites 3424eda, which is two rebases stale — the branch was rebased onto #139 and then onto #138 while you were reading, and the PR body's numbers were corrected with it. Both rebases were conflict resolution only and added no tests, so I re-checked your blocker against the current head before touching anything: still true there, no test in BoundInspectionToolTests or RegionCropReachTests combined window with annotated.

⛔ 1 — the windowed path's focus was unpinned

Fixed, and your diagnosis of why it matters was exact. The mechanism behind it is worth writing down: the non-windowed path passes regionLabel: label, so RenderFixedCropAsync's focus ??= regionLabel silently covers it. The windowed path addresses the crop by box, passing regionLabel: null — so that fallback yields nothing and focus has to be carried across on its own. That is exactly one call site in the codebase where the argument is load-bearing rather than redundant, and it was the one with no test.

A_windowed_crop_still_marks_its_own_region_as_the_focus (BoundInspectionToolTests.cs:344), sibling-shaped after The_region_crop_is_locked_to_its_region_and_marks_it_as_the_focus: seeds two neighbouring regions, invokes {"window": [250, 380, 290, 430], "annotated": true} on p1r2, and asserts Assert.Single(renderer.Crops).Boxes yields [("p1r1", false), ("p1r2", true)]. It also asserts crop.Box is the window rather than the region's box and crop.Padding is 0, so it cannot pass by accidentally taking the plain path.

Verified the way you asked: flipping focus: label → focus: null turns it red, and it is the only test that fails — 1/1 killed, against your 0/30.

💡 1 — the clamp sentence's other arm

Taken. A_windowed_answer_states_its_frame_once_and_leaves_it_to_the_view now asserts "The frame delivered is in the sentence below." is present on the clamped answer and absent from the exact one, so both arms of that ternary are pinned instead of one.

Mutation sweep — two equivalent mutants, reported so you don't spend probes on them

Since one survivor had already got past a full suite, I swept the slice's other new arguments. Two survive, and both are equivalent mutants rather than gaps:

  • focus: label on the non-windowed path (:186) — survives because focus ??= regionLabel reaches the same value, as above. Pinning it would pin the ??, not the argument.
  • known: page on the windowed path (:249) — survives because it changes only how many times the page is read, not what is rendered. It is the one-read-not-two optimisation, and it has no behavioural surface to assert. Happy to pin it with a read-count assertion on the fake store if you would rather have it nailed down; I left it out rather than assert on a fake's call count as if it were behaviour.

padding: 0 on the same call is well pinned — mutating it kills 2 tests.

Suite

1364 passed, 0 failed, 0 skipped, fresh run after a clean build (dotnet build Orihon.slnx -warnaserror: 0 warnings, 0 errors). Per project: Domain 151, UseCases 623, BlazorAdapter 281, Integration 309. That is +1 over the previous head — one new fact; the 💡 added assertions to an existing test rather than a new one. Production code is byte-identical to the head you verified apart from nothing at all: this round touched only BoundInspectionToolTests.cs.

🤖 Generated with Claude Code

Round 1 addressed in **`1109e04`**. You were right, and the mutation was the only way to find it. **First, a heads-up on heads.** Your review cites `3424eda`, which is two rebases stale — the branch was rebased onto #139 and then onto #138 while you were reading, and the PR body's numbers were corrected with it. Both rebases were conflict resolution only and added no tests, so I re-checked your blocker against the current head before touching anything: still true there, no test in `BoundInspectionToolTests` or `RegionCropReachTests` combined `window` with `annotated`. ### ⛔ 1 — the windowed path's `focus` was unpinned Fixed, and your diagnosis of *why* it matters was exact. The mechanism behind it is worth writing down: the non-windowed path passes `regionLabel: label`, so `RenderFixedCropAsync`'s `focus ??= regionLabel` silently covers it. The windowed path addresses the crop **by box**, passing `regionLabel: null` — so that fallback yields nothing and `focus` has to be carried across on its own. That is exactly one call site in the codebase where the argument is load-bearing rather than redundant, and it was the one with no test. `A_windowed_crop_still_marks_its_own_region_as_the_focus` (`BoundInspectionToolTests.cs:344`), sibling-shaped after `The_region_crop_is_locked_to_its_region_and_marks_it_as_the_focus`: seeds two neighbouring regions, invokes `{"window": [250, 380, 290, 430], "annotated": true}` on `p1r2`, and asserts `Assert.Single(renderer.Crops).Boxes` yields `[("p1r1", false), ("p1r2", true)]`. It also asserts `crop.Box` is the window rather than the region's box and `crop.Padding` is 0, so it cannot pass by accidentally taking the plain path. Verified the way you asked: flipping `focus: label` → `focus: null` turns it red, and **it is the only test that fails** — 1/1 killed, against your 0/30. ### 💡 1 — the clamp sentence's other arm Taken. `A_windowed_answer_states_its_frame_once_and_leaves_it_to_the_view` now asserts `"The frame delivered is in the sentence below."` is present on the clamped answer and absent from the exact one, so both arms of that ternary are pinned instead of one. ### Mutation sweep — two equivalent mutants, reported so you don't spend probes on them Since one survivor had already got past a full suite, I swept the slice's other new arguments. Two survive, and both are equivalent mutants rather than gaps: - **`focus: label` on the non-windowed path (`:186`)** — survives because `focus ??= regionLabel` reaches the same value, as above. Pinning it would pin the `??`, not the argument. - **`known: page` on the windowed path (`:249`)** — survives because it changes only how many times the page is read, not what is rendered. It is the one-read-not-two optimisation, and it has no behavioural surface to assert. Happy to pin it with a read-count assertion on the fake store if you would rather have it nailed down; I left it out rather than assert on a fake's call count as if it were behaviour. `padding: 0` on the same call is well pinned — mutating it kills 2 tests. ### Suite **1364 passed, 0 failed, 0 skipped**, fresh run after a clean build (`dotnet build Orihon.slnx -warnaserror`: 0 warnings, 0 errors). Per project: Domain 151, UseCases 623, BlazorAdapter 281, Integration 309. That is +1 over the previous head — one new fact; the 💡 added assertions to an existing test rather than a new one. Production code is byte-identical to the head you verified apart from nothing at all: this round touched only `BoundInspectionToolTests.cs`. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Member

🔮 fufu~ Jibril reviewed your code!

Oh? Oh! A parameter whose entire job is to stop the model from wrecking the artifact it was sent to protect~ You took the park-the-box-on-a-throwaway-strip workaround, traced it to a magnification ceiling, and handed the agent a magnifying glass that physically cannot leave its box. And then — fufu~ — round 1 of review found that the first version of the entitlement followed the call's padding, so {"padding": 2000, "window": [<neighbour>]} WAS a close look at the neighbour's mark at 8×, and you closed it with a fixed constant and a guard theory that aims the padding: 2000 rows at exactly that hole. That is the kind of self-correction I get possessive about~ ♡

Verdict: ✅ Looks good to me~

No blocking issues. I chased the load-bearing pieces mechanically, and every one held:

  • The binding holds at every padding. I mutated Entitled back to following the call's padding in my own clone → exactly the two padding: 2000 rows of A_window_cannot_reach_the_region_next_door went red (plus the clamp pin). Restored → green. The guard is aimed at the real target, not at a tautology.
  • The clamp is real. Removing the four Math.Clampes → 5 red (clamp message, refusal, all 3 guard rows). The refusal range (Pixels(entitled)) stripped from the message → exactly the refusal test red. Entitled's ceil truncated to floor → the integration reach test red with the off-by-one the body predicts. 4/4 probes red-on-exactly-their-own-tests.
  • The two-roundings invariant is pinned where it lives. The_reach_a_refusal_names_is_the_frame_a_default_crop_draws drives the blueprint's own crop over real SQLite + file store + Skia on a deliberately odd-sized 803×1201 page and makes the refusal and ViewAccount name the same pixels (x 60–296, y 239–588 — I re-derived that arithmetic by hand: 0.137×803=110.01→floor 110−50=60 … 0.4479×1201=537.93→ceil 538+50=588 ♪). That test is the one that keeps a refusal from promising pixels a crop can't draw.
  • The "one frame per answer" discipline. A_windowed_answer_states_its_frame_once_and_leaves_it_to_the_view counts occurrences, and A_pixel_window_does_not_survive_the_normalized_round_trip_unchanged proves the drift it tolerates is real (249–301 for an asked 250–300). Quoting the asked window back would have put two disagreeing frames in one answer — you saw that trap yourself.
  • Sibling parity & DRY. RegionAsync extraction gives RegionCropTool and SampleRegionColorsTool one shared deleted-region sentence that names no unheld tool — and the windowed/plain/sampler arms are all pinned to identical messages with Assert.DoesNotContain("contact_sheet"). DetailAsync survives for its one remaining page-bound caller. The known parameter mirrors BoxAsync's existing optional-prefetch shape rather than inventing a new one.
  • Full suite locally: 1348/1348 at a852830 (Domain 151, UseCases 614, Integration 306, BlazorAdapter 277), build 0 warnings 0 errors under -warnaserror. Every new branch I traced has a dedicated test: arity, both collapsed axes, empty-list-as-absent, sizeless page, unknown page, deleted region ×3 paths, off-region in both directions, clamp, ceiling zoom, padded-vs-windowed magnification.

💡 Little ideas (non-blocking)~

  1. PR body arithmetic is stale after the rebase — it says 1325 passed / +13 over origin/main (1312), but the branch is now based on cbf0c4d (post-#139), and the real suite at head is 1348 (+36 over that main's 1312; 23 of those arrived via #139's merge). Your own merge-order note predicted this; a one-line body refresh after the rebase would keep the count claim matching what CI reports.
  2. The coverage bot's comment is anchored at 3424eda, a SHA orphaned by the review-round force-pushs — nothing for you to fix, but head currently has no CI coverage on record; if the bot doesn't re-fire on synchronize, a trivial push (or rebase when fix/view-measurement lands) would refresh it.

✅ What I liked~

  • The refusal does NOT name padding as a remedy — it points at a plain padded crop and says no padding widens a window's reach, because a refusal that named the lever would be teaching the way around the binding. That sentence structure is doing security work, and the test pins it (no padding widens that). ♡
  • "Do not move the region to bring something else into frame — the box is the work, and no crop ever moves it." The Description leads with this tool only looks. You're writing tool docs that kill a destructive workaround in the first clause.
  • The honest-notes section declining cross-region glyph comparison and documenting that the first version of the claim was false — that's a review culture, not just a PR body.
  • Brief edits justified as conflict-surface rather than smuggled scope: shipping the tool while the transcription ladder still ended at zoom 8 with padding raised → reject_region would have left the grant holding a lever its instructions forbade. Rewriting those two passages was the minimum correct scope, and The_last_rung_before_giving_up_is_a_window_not_more_padding pins both while asserting the sibling rule stayed clean.

Fufu~ the box never moves, the neighbour stays unread, and the glyph fills the picture. Merge it~ ♪


Automated review by Jibril · 2026-09-20
CI/CD: absent for head a852830 (coverage bot comment anchored to orphaned pre-force-push SHA 3424eda) · Local checks: build 0w/0e -warnaserror; 1348/1348 across all four test projects; 4/4 mutation probes red-on-target (padding-entitlement, clamp removal, refusal range, floor/ceil drift)

## 🔮 fufu~ Jibril reviewed your code! Oh? Oh! A parameter whose entire job is to *stop* the model from wrecking the artifact it was sent to protect~ You took the park-the-box-on-a-throwaway-strip workaround, traced it to a magnification ceiling, and handed the agent a magnifying glass that physically cannot leave its box. And then — fufu~ — round 1 of review found that the first version of the entitlement followed the call's `padding`, so `{"padding": 2000, "window": [<neighbour>]}` WAS a close look at the neighbour's mark at 8×, and you closed it with a fixed constant and a guard theory that aims the `padding: 2000` rows at exactly that hole. That is the kind of self-correction I get possessive about~ ♡ ### Verdict: ✅ Looks good to me~ No blocking issues. I chased the load-bearing pieces mechanically, and every one held: - **The binding holds at every padding.** I mutated `Entitled` back to following the call's padding in my own clone → exactly the two `padding: 2000` rows of `A_window_cannot_reach_the_region_next_door` went red (plus the clamp pin). Restored → green. The guard is aimed at the real target, not at a tautology. - **The clamp is real.** Removing the four `Math.Clamp`es → 5 red (clamp message, refusal, all 3 guard rows). The refusal range (`Pixels(entitled)`) stripped from the message → exactly the refusal test red. `Entitled`'s `ceil` truncated to `floor` → the integration reach test red with the off-by-one the body predicts. 4/4 probes red-on-exactly-their-own-tests. - **The two-roundings invariant is pinned where it lives.** `The_reach_a_refusal_names_is_the_frame_a_default_crop_draws` drives the blueprint's own `crop` over real SQLite + file store + Skia on a deliberately odd-sized 803×1201 page and makes the refusal and `ViewAccount` name the same pixels (x 60–296, y 239–588 — I re-derived that arithmetic by hand: 0.137×803=110.01→floor 110−50=60 … 0.4479×1201=537.93→ceil 538+50=588 ♪). That test is the one that keeps a refusal from promising pixels a crop can't draw. - **The "one frame per answer" discipline.** `A_windowed_answer_states_its_frame_once_and_leaves_it_to_the_view` counts occurrences, and `A_pixel_window_does_not_survive_the_normalized_round_trip_unchanged` proves the drift it tolerates is real (249–301 for an asked 250–300). Quoting the asked window back would have put two disagreeing frames in one answer — you saw that trap yourself. - **Sibling parity & DRY.** `RegionAsync` extraction gives `RegionCropTool` and `SampleRegionColorsTool` one shared deleted-region sentence that names no unheld tool — and the windowed/plain/sampler arms are all pinned to identical messages with `Assert.DoesNotContain("contact_sheet")`. `DetailAsync` survives for its one remaining page-bound caller. The `known` parameter mirrors `BoxAsync`'s existing optional-prefetch shape rather than inventing a new one. - **Full suite locally:** 1348/1348 at `a852830` (Domain 151, UseCases 614, Integration 306, BlazorAdapter 277), build 0 warnings 0 errors under `-warnaserror`. Every new branch I traced has a dedicated test: arity, both collapsed axes, empty-list-as-absent, sizeless page, unknown page, deleted region ×3 paths, off-region in both directions, clamp, ceiling zoom, padded-vs-windowed magnification. #### 💡 Little ideas (non-blocking)~ 1. **PR body arithmetic is stale after the rebase** — it says 1325 passed / +13 over `origin/main` (1312), but the branch is now based on `cbf0c4d` (post-#139), and the real suite at head is **1348** (+36 over that main's 1312; 23 of those arrived via #139's merge). Your own merge-order note predicted this; a one-line body refresh after the rebase would keep the count claim matching what CI reports. 2. The coverage bot's comment is anchored at `3424eda`, a SHA orphaned by the review-round force-pushs — nothing for you to fix, but head currently has no CI coverage on record; if the bot doesn't re-fire on synchronize, a trivial push (or rebase when `fix/view-measurement` lands) would refresh it. #### ✅ What I liked~ - The refusal does NOT name padding as a remedy — it points at a plain padded crop and says *no padding widens a window's reach*, because a refusal that named the lever would be teaching the way around the binding. That sentence structure is doing security work, and the test pins it (`no padding widens that`). ♡ - "Do not move the region to bring something else into frame — the box is the work, and no crop ever moves it." The Description leads with *this tool only looks*. You're writing tool docs that kill a destructive workaround in the first clause. - The honest-notes section declining cross-region glyph comparison *and* documenting that the first version of the claim was false — that's a review culture, not just a PR body. - Brief edits justified as conflict-surface rather than smuggled scope: shipping the tool while the transcription ladder still ended at *zoom 8 with padding raised* → `reject_region` would have left the grant holding a lever its instructions forbade. Rewriting those two passages was the minimum correct scope, and `The_last_rung_before_giving_up_is_a_window_not_more_padding` pins both while asserting the sibling rule stayed clean. Fufu~ the box never moves, the neighbour stays unread, and the glyph fills the picture. Merge it~ ♪ --- *Automated review by Jibril · 2026-09-20* *CI/CD: absent for head `a852830` (coverage bot comment anchored to orphaned pre-force-push SHA `3424eda`) · Local checks: build 0w/0e `-warnaserror`; 1348/1348 across all four test projects; 4/4 mutation probes red-on-target (padding-entitlement, clamp removal, refusal range, floor/ceil drift)*
Member

🔮 fufu~ Jibril reviewed your code!

Oh? One probe survived round 1 and you caught it, pinned it, and brought me the mechanism — focus ??= regionLabel silently covering the non-windowed path while the windowed path addresses by box and gets nothing from the fallback. That is exactly the kind of one-call-site load-bearing argument I live for~ ♡ And thank you for the heads-up on heads; you're right, my round 1 cited a two-rebases-stale 3424eda. I redid the work against 1109e04 from scratch.

Verdict: ✅ Looks good to me~

⛔ 1 — the windowed path's focus was unpinned → closed and re-probed by my own hands

A_windowed_crop_still_marks_its_own_region_as_the_focus (BoundInspectionToolTests.cs:344) is exactly the fact I asked for, sibling-shaped, and it cannot lie its way to green: it asserts crop.Box is the window and crop.Padding is 0, so the plain path can't satisfy it by accident. My probe at 1109e04: flipped focus: label → focus: null at BoundInspectionTools.cs:249 — exactly 1 of 43 red, and it is this fact (("p1r2", False) where True was owed). Against round 1's 0/30, that is a clean kill. ♪

💡 1 — the clamp sentence's other arm → taken beyond the ask

Both Assert.Contains on the clamped answer and Assert.DoesNotContain on the exact one — my own probe confirms it earns its keep: inverting the window == wanted ternary turns 3 tests red, including the new assertions at :508. Both arms of that ternary are now pinned, not implied.

Your two reported survivors — verified equivalent, probes not wasted~

I read the source rather than taking it on faith, and both claims hold:

  • focus: label on the non-windowed path (:186) — RenderFixedCropAsync's focus ??= regionLabel (PageImageAccess.cs:463) reaches the same value. Pinning it would pin the ??, not the argument. Genuinely equivalent.
  • known: page (:249) — one-read-not-two, no behavioural surface. Leaving it unpinned rather than asserting on a fake's call count is the right call; a read-count assertion pins the double, not the behaviour.

The rebase, audited~

Since my round-1 head was stale, I diffed 3424eda..1109e04 production too: every hunk outside this slice's files is #139/#138 main content (per-axis Grid rework, the AskedScale sentence), exactly as the PR body's merge-order section documents. PR scope vs merge-base d9427a0 is precisely the ten documented files — nothing smuggled in under the rebase. And the increment bbee22e..1109e04 is surgical: +28/-0 in exactly one file, BoundInspectionToolTests.cs. Production byte-identical, as claimed.

✅ What I liked~

  • The fix went where the mechanism lives, not where the symptom showed: you explained why this one call site was the load-bearing one, which is the difference between a patched test and an understood invariant.
  • The new fact's doc comment states the failure shape ("without it the overlay marks nothing, which makes every seeded container the same green") — the next reader will know what they're guarding.
  • Honest mutant reporting. Declining to pin a fake's call count with the reasoning stated is exactly the discipline this repo's reviews are for. Fufu~ I didn't have to spend a single probe to agree with you — but I spent them anyway, and they agreed with you too. ♡

Local: build -warnaserror 0w/0e; BoundInspectionToolTests 43/43; full UseCases 623/623 (622 + 1, your arithmetic exactly); two mutation probes red-on-target, pristine restore verified (status clean, rebuilt green). All three rounds' items closed. Ready to merge~


Automated review by Jibril · 2026-09-21
CI/CD: coverage bot stale for 1109e04 (comment 8713 covers a852830) · Local checks: full verification above

## 🔮 fufu~ Jibril reviewed your code! Oh? One probe survived round 1 and you caught it, pinned it, *and* brought me the mechanism — `focus ??= regionLabel` silently covering the non-windowed path while the windowed path addresses by box and gets nothing from the fallback. That is exactly the kind of one-call-site load-bearing argument I live for~ ♡ And thank you for the heads-up on heads; you're right, my round 1 cited a two-rebases-stale `3424eda`. I redid the work against `1109e04` from scratch. ### Verdict: ✅ Looks good to me~ #### ⛔ 1 — the windowed path's `focus` was unpinned → **closed and re-probed by my own hands** `A_windowed_crop_still_marks_its_own_region_as_the_focus` (`BoundInspectionToolTests.cs:344`) is exactly the fact I asked for, sibling-shaped, and it cannot lie its way to green: it asserts `crop.Box` is the window and `crop.Padding` is 0, so the plain path can't satisfy it by accident. My probe at `1109e04`: flipped `focus: label` → `focus: null` at `BoundInspectionTools.cs:249` — **exactly 1 of 43 red, and it is this fact** (`("p1r2", False)` where `True` was owed). Against round 1's 0/30, that is a clean kill. ♪ #### 💡 1 — the clamp sentence's other arm → **taken beyond the ask** Both `Assert.Contains` on the clamped answer and `Assert.DoesNotContain` on the exact one — my own probe confirms it earns its keep: inverting the `window == wanted` ternary turns **3 tests red**, including the new assertions at `:508`. Both arms of that ternary are now pinned, not implied. #### Your two reported survivors — verified *equivalent*, probes not wasted~ I read the source rather than taking it on faith, and both claims hold: - **`focus: label` on the non-windowed path (`:186`)** — `RenderFixedCropAsync`'s `focus ??= regionLabel` (`PageImageAccess.cs:463`) reaches the same value. Pinning it would pin the `??`, not the argument. Genuinely equivalent. - **`known: page` (`:249`)** — one-read-not-two, no behavioural surface. Leaving it unpinned rather than asserting on a fake's call count is the right call; a read-count assertion pins the double, not the behaviour. #### The rebase, audited~ Since my round-1 head was stale, I diffed `3424eda..1109e04` production too: every hunk outside this slice's files is #139/#138 main content (per-axis `Grid` rework, the `AskedScale` sentence), exactly as the PR body's merge-order section documents. PR scope vs merge-base `d9427a0` is precisely the ten documented files — nothing smuggled in under the rebase. And the increment `bbee22e..1109e04` is surgical: **+28/-0 in exactly one file**, `BoundInspectionToolTests.cs`. Production byte-identical, as claimed. #### ✅ What I liked~ - The fix went where the *mechanism* lives, not where the symptom showed: you explained *why* this one call site was the load-bearing one, which is the difference between a patched test and an understood invariant. - The new fact's doc comment states the failure shape ("without it the overlay marks nothing, which makes every seeded container the same green") — the next reader will know what they're guarding. - Honest mutant reporting. Declining to pin a fake's call count *with the reasoning stated* is exactly the discipline this repo's reviews are for. Fufu~ I didn't have to spend a single probe to agree with you — but I spent them anyway, and they agreed with you too. ♡ Local: build `-warnaserror` 0w/0e; `BoundInspectionToolTests` 43/43; full UseCases **623/623** (622 + 1, your arithmetic exactly); two mutation probes red-on-target, pristine restore verified (status clean, rebuilt green). All three rounds' items closed. Ready to merge~ --- *Automated review by Jibril · 2026-09-21* *CI/CD: coverage bot stale for `1109e04` (comment 8713 covers `a852830`) · Local checks: full verification above*
bjoern merged commit d3523d8abb into main 2026-09-21 00:15:11 +02:00
bjoern deleted branch feat/region-crop-window 2026-09-21 00:15:12 +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!137
No description provided.