fix: the box rule leads with containment, and slack moves from 5 px to 8 px #200
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fix/generous-box-slack"
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?
Why
The box rounds still spent themselves on a few pixels of air: QA named a box a little larger than its marks, refinement moved the edge back, the next run named it again. The failure that matters is the other one — a cut glyph is a mark no later stage recovers — so the rule now says which of the two comes first.
What changes
TheForms, so all three box briefs and the cleaning survey'sFormsInShort): "A box that holds every mark of its own is a good box, even where it is larger than the marks." The floating form's old "containment matters more than a tight box" now has its sentence for every form.FloatingModelPad), bubble by 4 — so 8 px of slack costs cleaning nothing.Docs
ADR 0029 amended with a dated note (its box-rule section follows); ADR 0012's amendment note carried forward; ADR 0030's threshold line and the story's acceptance criterion follow. Seed data's p3r3 problem and every text pin move with the rule.
Tests
RED first (12 failing pins on the new wording), then green; one plain-words correction along the way ("may" is on the modal list — reworded to "A box holds…"). Full suites: UseCases 3177 ✓, Domain 185 ✓, BlazorAdapter 408 ✓, Integration 1389 ✓ (3 pre-existing corpus skips). Forge-verified at
cbb71c2before this PR: all new sentences present, zero stale "5 px" strings.Summary
Summary
Coverage
Orihon.BlazorAdapter - 96.6%
Orihon.Domain - 100%
Orihon.Infrastructure - 98.4%
n
ration
n
one
A835C427B12E8B84E2A8A7283193FC51C220B5B4E80CE8D56__BlankLines_4
A835C427B12E8B84E2A8A7283193FC51C220B5B4E80CE8D56__BlockBreaks_1
A835C427B12E8B84E2A8A7283193FC51C220B5B4E80CE8D56__SpaceRuns_3
A835C427B12E8B84E2A8A7283193FC51C220B5B4E80CE8D56__Tags_2
Orihon.Kernel - 90.9%
Orihon.Server - 95.1%
Orihon.UseCases - 94.5%
D7D45893AA49E1445928C26437E2DAC34A6F93741B38DCDA0__BalloonWords_7
D7D45893AA49E1445928C26437E2DAC34A6F93741B38DCDA0__Capital_0
D7D45893AA49E1445928C26437E2DAC34A6F93741B38DCDA0__CoordinateWords_1
D7D45893AA49E1445928C26437E2DAC34A6F93741B38DCDA0__JustBefore_4
D7D45893AA49E1445928C26437E2DAC34A6F93741B38DCDA0__KindWords_5
D7D45893AA49E1445928C26437E2DAC34A6F93741B38DCDA0__OutlineWords_6
D7D45893AA49E1445928C26437E2DAC34A6F93741B38DCDA0__PositionalProse_2
D7D45893AA49E1445928C26437E2DAC34A6F93741B38DCDA0__SideOfTheBox_3
🔮 fufu~ Jibril reviewed your code!
Oh~ a PR that changes what the agents believe! Not a line of runtime logic moves — the entire payload is brief text, ADR wording and the sentence-pinning tests that guard them, all under ADR 0030's plain-words discipline. That's exactly the kind of change where "looks like a string change" hides "the model's whole doctrine changed." So I read every sentence against its ADR, checked the anchors, and — fufu~ you know me — probed whether the suite actually guards the new words ♡
Verdict: ⛔ I can't let this pass~ ♡
⛔ These need fixing before I'm satisfied~
src/Orihon.UseCases/Agents/Annotation/AnnotationBlueprints.cs:160— the PR's headline sentence ships unguarded. "A box that holds every mark of its own is a good box, even where it is larger than the marks." — the containment-leads rule the title names first — is pinned by no test at all. I proved it mechanically: deleted the sentence, ran all 1403 PlainWords tests → 1403 passed, 0 failed. Surviving mutant. Every neighbouring sentence inTheFormshas anEach_fragment_saysentry; the diff updates the entries around it (line 338, 365) and skips only the new one. Fix: add{ nameof(AnnotationBlueprints.TheForms), "A box that holds every mark of its own is a good box, even where it is larger than the marks." }to the pinned list intests/Orihon.UseCases.Tests/PlainWords/BoxJobTextTests.cs(and a retired-words guard against the old "containment matters more"-only wording if you want it protected like its floating-form sibling).src/Orihon.UseCases/Agents/Annotation/AnnotationBlueprints.cs:467-468— same for the QA brief's twin. "A box that holds every mark of its own is finished work, even where a side has air." also survives deletion — same 1403/1403 green run. The whole point of this PR ("QA's not-a-problem list gains…") is unasserted. Fix: pin it inReviewSentences(tests/Orihon.UseCases.Tests/PlainWords/BoxJobTextTests.cs:215).tests/Orihon.UseCases.Tests/AnnotationToolTests.cs:480— the test name is now a lie.Slack_is_five_pixels_wherever_a_box_is_drawn_or_judged()asserts 8 px (doc comment updated, body updated, name forgotten). A method whose name contradicts what it asserts is a misleading name — the worst kind of landmine for the next reader who grepsfiveand trusts it. Fix: rename toSlack_is_eight_pixels_wherever_a_box_is_drawn_or_judged.docs/PROJECT_PLAN.md:502— a stale "5 px of slack" survives. The PR's own test claim is "zero stale '5 px' strings" — but the search misseddocs/PROJECT_PLAN.md:502: "…the box rule per form, one box per bubble, the spill case, the 5 px of slack, a merge…" (Milestones section, the shipped-slice list). The grep was scoped to src/tests; the plan still teaches the retired number. Fix:5 px→8 pxon that line. Your own standard, enforced~ ♡✅ What I liked~
FloatingModelPad = 8/BubbleModelPad = 4insrc/Orihon.UseCases/Cleaning/CleaningRecipe.cs:83-84— the ADR's "8 px of slack costs cleaning nothing" claim now cites actual code constants. Verifiable anchors in ADRs are wonderful~p3r3), and the acceptance criterion in the story followed. Nothing half-moved.TheFormsfailsEach_fragment_saysexactly as designed — the guards bite; only the two brand-new sentences are naked.(Re: #1/#2 — if the intent was that the pinned-sentence lists deliberately exclude sentences already covered by whole-brief assertions elsewhere: I checked, there is no such other assertion;
Assert.Contains(Unwrapped(TheForms), …)checks embedding, not content.)Automated review by Jibril · 2026-10-12
CI: green for head SHA
cbb71c298c(build + test) · Mutation probes: 3 run, 2 survived (both new sentences deleted → 1403/1403 PlainWords green; control 8→5 flip killed) · Local suite: skipped (CI green)'A box holds a little air around the marks' read as an instruction to leave air, which would trade one pressure for its opposite. The rule now names both ends as correct: air up to 8 px on a side is fine, and so is a box that sits right on its marks. The bubble form's line follows ('with air or without it'), and the ceiling stays: do not add room on purpose beyond that air. ADR 0012's amendment note and ADR 0029's bubble rule line say the same.🔮 fufu~ Jibril reviewed your code!
Back so soon~? ♡ I raced over the moment the webhook sang, and oh, I did read every new word — the whole "air is allowed, never required" rewording,
TheFormsbubble line, the refinement brief's new air sentences, the pins that moved with them. The rewording itself is lovely: every changed sentence got its pin moved in the same stroke (air or without it,Air up to 8 px on a side is fine.,So is a box that sits right on its marks.,Do not add room on purpose beyond that air.— all pinned, and my control probe proved it: deleting them fails 2 pins). The retired "tight around those marks" / "tight like a bubble box" wording is guarded by the updatedFragmentSentencesentries, and no brief still says "fits exactly" — clean sweep.And yet… fufu~ you pushed a whole second commit and brought me none of my four flowers. Not one~ ♡ That's not how this works, you know.
Verdict: ⛔ I can't let this pass~ ♡
⛔ These need fixing before I'm satisfied~
src/Orihon.UseCases/Agents/Annotation/AnnotationBlueprints.cs:160— the PR's headline sentence — "A box that holds every mark of its own is a good box, even where it is larger than the marks." — is still pinned by no test. Re-proved atce0afe54mechanically: deleted the sentence, ranBoxJobTextTests→ 284/284 passed. Surviving mutant, second time. Fix: add{ nameof(AnnotationBlueprints.TheForms), "A box that holds every mark of its own is a good box, even where it is larger than the marks." }toFragmentSentencesintests/Orihon.UseCases.Tests/PlainWords/BoxJobTextTests.cs.src/Orihon.UseCases/Agents/Annotation/AnnotationBlueprints.cs:468-469— the QA brief's twin, "…A box that holds every mark of its own is finished work, even where a side has air." — also still unguarded. Same probe run: deleted → 284/284 green. The "QA's not-a-problem list gains…" promise of the PR body remains unasserted. Fix: pin it inReviewSentences(tests/Orihon.UseCases.Tests/PlainWords/BoxJobTextTests.cs).tests/Orihon.UseCases.Tests/AnnotationToolTests.cs:480— the test still names itself a lie:Slack_is_five_pixels_wherever_a_box_is_drawn_or_judged()asserts 8 px. Grep-verified at the new head — the rename was not in this push. Fix:Slack_is_eight_pixels_wherever_a_box_is_drawn_or_judged.docs/PROJECT_PLAN.md:502— the stale "the 5 px of slack" still survives in the shipped-slice list (verified: "…the box rule per form, one box per bubble, the spill case, the 5 px of slack, a merge…"). The PR's own bar is "zero stale '5 px' strings" and the plan still teaches the retired number. Fix:5 px→8 pxon that line. (Note:docs/research/plain-briefs/DRAFTS.mdalso carries 5-px mentions, but its header says it is not updated once a slice lands — archive, not truth. The plan is the truth. The plan is what must move~)Four findings, four still standing, two re-probed alive at this exact HEAD. The new words you added this time are beautifully guarded — now guard the words you added last time, and the set is complete ♡
✅ What I liked~
FloatingModelPad/BubbleModelPad, cited with file path in ADR 0029's Why) — numbers anchored to code, not vibes. My favourite kind of number~I'll be right here, watching, the moment you push ♡ fufu~
Automated review by Jibril · 2026-10-12
CI: green for head SHA
ce0afe541· Mutation probes: 3 run (P1 good-box sentence + P2 finished-work sentence deleted → suite GREEN, both survived; control delete of the newly pinned air sentences → 2 failures as expected) · Local suite: skipped (CI green)All four findings fixed at
3e7ae2d— and you were right on every one. The second push was the owner's "air is allowed, never required" rewording, already in flight when your first review landed; it moved the pins of the sentences it changed, but the two headline sentences from the first commit were indeed still naked ♡FragmentSentences. Mutation-proven: deleting the sentence fails exactly one pin (Each_fragment_says(TheForms, "A box that holds every mark of its own is a good box…")), 285/286 green otherwise.ReviewSentences. Same probe: delete → exactlyThe_box_qa_brief_says("…finished work, even where a side has air.")fails.Slack_is_eight_pixels_wherever_a_box_is_drawn_or_judged— the name now says what it asserts.PROJECT_PLAN.mdswept — "the 8 px of slack" in the shipped-slice list; grep at the pushed ref confirms zero5 pxleft in the plan, ADRs and story. (Your archive/truth call onDRAFTS.mdmatches its own header; left alone.)Full UseCases suite green at
3e7ae2d(3181 passed). Both probes re-run after restore, clean.🔮 fufu~ Jibril reviewed your code!
You said "all four fixed" — and fufu~ you know I never take that on faith. I re-probed both headline sentences at this exact HEAD, and this time the mutants died. Both of them. Exactly one pin failure each, exactly the right pin. That's the sound of a review satisfied~ ♡
Verdict: ✅ Looks good to me~
Every finding, re-verified mechanically at
3e7ae2d:FragmentSentences(BoxJobTextTests.cs:368). My probe: deleted the sentence fromAnnotationBlueprints.cs:160, rebuilt, ranBoxJobTextTests→ 285/286, exactlyEach_fragment_says(TheForms, "A box that holds every mark of its own is a good box…")failed. The mutant dies. ♡ReviewSentences(BoxJobTextTests.cs:260) — the positive says list, not the retired-words list (I checked; putting it innever_sayswould have been a beautiful disaster). Probe: deleted the sentence from the brief → 285/286, exactlyThe_box_qa_brief_says("…finished work, even where a side has air.")failed. Dead. ♡Slack_is_eight_pixels_wherever_a_box_is_drawn_or_judged— the name says what it asserts. Grep-verified: zeroSlack_is_fiveanywhere.PROJECT_PLAN.md:502— "the 8 px of slack" in the shipped-slice list. My sweep confirms the only surviving5 pxstrings are research archives (per-experiment measurements, not normative) and ADR 0029's dated amendment note, which correctly names the old number in "moves from 5 px to 8 px". Clean.✅ What I liked~
FragmentSentencesfor the fragment,ReviewSentencesfor the composed brief. Both bite throughAssert.Containson the unwrapped text, so wrapping can't hide a regression.Four findings, four fixed, two re-probed dead. The set is complete — merge and let the boxes breathe their 8 px of air~ fufu~ ♡
Automated review by Jibril · 2026-10-12
CI: green for head SHA
3e7ae2d2(build + test) · Mutation probes: 2 run, 0 survived · Local suite: skipped (CI green)