fix(briefs): the road ends where the view says it does, not at a number #148
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fix/the-ceiling-the-views-now-have"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The last piece of the agent-friction batch (ADR 0025), and the one that was blocked on #144 landing.
#139 lifted the crop's fixed 8× clamp and #137 added
window. Both levers shipped; the briefs kept telling agents to stop anyway. Four passages named zoom 8 as the end of the road, so an agent that had just been handed the ability to magnify a 24 px mark to 20× was still instructed to give up at 8 — which is the exact friction those two slices were built to remove.The distinction that decides the wording
There are two zooms, and only one of them stops at 8:
FittedScale— what a crop gets whenzoomis omitted — is stillMath.Clamp(…, 1m, 8m). Eight really is the default ceiling, and this PR does not change that.FittedScale's own doc says so: "An agent that wants more than this asks for it, and is given it where the delivered size allows."So the briefs were not wrong about the default. They were wrong to present it as the limit. That is why this is a wording change and not a behaviour one — and why "delete the number" would have been the wrong fix: a brief that never mentions 8 leaves an agent unable to predict what an un-asked-for crop will give it.
What's in
One shared stopping phrase across all four briefs —
as close as the views go.The shared phrasing is load-bearing rather than cosmetic, and
The_illegibility_rule_reaches_the_agents_that_have_to_obey_italready existed to pin exactly that: the transcriber that gives up, the refiner that must not stall, and both reviewers have to name the same stopping point, or a reviewer sends back a region that was correctly finished. Changing the four in isolation would have satisfied each sentence and broken the rule they jointly implement.Both escalation ladders now state the mechanism, so the stopping rule is checkable rather than remembered: zoom is fitted for you and stops at 8 unless you ask for more; a narrow window asked for at a higher zoom is given it as far as the picture's own size allows; and the view says outright when it cannot magnify further. That sentence —
ViewAccount'sAskedScalearm — is the end of the road, not a number.Transcription's last rung loses its stale example too:
"illegible at 8x: …"became"illegible as close as the views go: …", since the reason string is what a reviewer reads when deciding whether the give-up was legitimate.Tests
1245 passed, 0 failed, 0 skipped, fresh run after a clean build (
dotnet build Orihon.slnx -warnaserror: 0 warnings, 0 errors). Per project: Domain 128, UseCases 597, Integration 266, BlazorAdapter 254. The total is unchanged frommain— this rewrites assertions rather than adding cases.The_illegibility_rule_reaches_the_agents_that_have_to_obey_itnow pins both halves:"at zoom 8"— asserted case-insensitively across all four. That second half is new, and it is the guard the old test could not provide: it pinned that a number was present, not that the number wasn't presented as the ceiling.Red-on-target: restoring the old refinement sentence fails this test and nothing else.
Honest notes
Case-blind on purpose. The sweep in #141 missed
on its LONGER SIDEbecause the grep was case-sensitive, and the guard written alongside it inherited the same blindness. Same class of text, same failure mode — so this guard compares case-insensitively from the start.FittedScale's 8× clamp is deliberately untouched. Whether the unasked-for zoom should also run past 8 is a product call — #139 flagged it as one when it lifted the requested-zoom cap — and a brief fix is the wrong place to decide it. The briefs now describe that clamp accurately instead of treating it as the limit of what is available.Scope: prompt strings and the test that pins them. No tool, renderer or domain change; behaviour is byte-identical.
Rebase history: prepared against #144's branch before it merged, rebased onto its updated tip when main was merged into it, then replayed onto
mainwith--ontoonce #144 squashed — so this carries exactly one commit and none of #144's.🤖 Generated with Claude Code
Summary
Summary
Coverage
Orihon.BlazorAdapter - 95.4%
Orihon.Domain - 100%
Orihon.Infrastructure - 97.2%
A835C427B12E8B84E2A8A7283193FC51C220B5B4E80CE8D56__BlankLines_4
A835C427B12E8B84E2A8A7283193FC51C220B5B4E80CE8D56__BlockBreaks_1
A835C427B12E8B84E2A8A7283193FC51C220B5B4E80CE8D56__SpaceRuns_3
A835C427B12E8B84E2A8A7283193FC51C220B5B4E80CE8D56__Tags_2
Orihon.Kernel - 90.9%
Orihon.Server - 94.4%
Orihon.UseCases - 97.6%
bridge probe
bridge probe 2 — ignore
Jibril connectivity probe 3 - sizing test, please disregard. Testing the comment bridge with a slightly larger payload before posting the full review of this PR.
Probe 4 - disregard. Bisecting the bridge limit. Review of this PR is complete and APPROVED; full verdict text follows once the payload path is confirmed. FittedScale clamp verified, renderer ceiling verified, ViewAccount AskedScale verified, 1245/1245 local, guard probe red-on-target, two non-blocking notes recorded. This sentence exists purely to pad the payload past four hundred bytes for the test.
Jibril reviewed your code! (fufu~) Verdict: APPROVED. Every claim in these new brief sentences was chased to ground: FittedScale (PageImageAccess.cs:417) clamps (1m, 8m) fitted-only, untouched; a requested zoom is bounded solely by DeliveredLongestEdge/max(w,h) (SkiaPageImageRenderer.cs:131-137); ViewAccount's AskedScale arm (PageImageAccess.cs:73-82) states the refusal outright. Sweep: five stale zoom-8 mentions across four briefs at base, zero at head, none in tool descriptions or docs. Guard has real bite: I injected mixed-case 'At Zoom 8' (shared phrase kept) and the case-insensitive DoesNotContain went red - the #141 case-blindness cannot recur through this arm. Local: build 0w/0e -warnaserror; 1245/1245 (128+597+266+254, matching the PR body exactly). Probe: old refinement sentence restored fails exactly the guard test, as claimed. Two non-blocking ideas: (1) AnnotationToolTests.cs:274-279 - phrase asserts use raw prompts while the sibling unwraps first (Unwrapped, :100); in TranscriptionPrompt the prose phrase is split across a line break, so the raw Contains is satisfied by the reason string alone - reverting only the reason string to 'at 8x:' still fails the test today, but by that accident; unwrap in the guard (and sweep 'at 8x' too) for a line-break-independent pin. (2) :287-290 - the sweep covers only the four briefs that had the ceiling; BboxCreationPrompt/FloatingCreationPrompt hold crop tools too, sweep all six. Liked: words and code agree, both ladders match FittedScale's doc verbatim; the reason string is the sharpest cut (it is what a reviewer reads when judging a give-up); demoting 8 from ceiling to default rather than deleting it. Comments 8987-8990 above were bridge probes - disregard. Automated review by Jibril 2026-09-21. CI/CD passed for head
b6d237d(coverage 8979: 97.1% line / 85% branch, AnnotationBlueprints 100%); local 1245/1245, 3 mutation probes red-on-target.