Skip to content

fix(cl2k): extract mixed white+coloured titles in subject mode - #477

Merged
chodeus merged 4 commits into
developfrom
fix/cl2k-mixed-title-extraction
Aug 8, 2026
Merged

fix(cl2k): extract mixed white+coloured titles in subject mode#477
chodeus merged 4 commits into
developfrom
fix/cl2k-mixed-title-extraction

Conversation

@chodeus

@chodeus chodeus commented Aug 8, 2026

Copy link
Copy Markdown
Owner

Problem

Subject-mode ("Coloured title") extraction fails on titles that mix white and coloured words, and on distressed titles generally. Repro: TMDB poster w1280/3oAVM6LUT75uKalleQlBySABsKR.jpg (Kevin Bridges: In Search of the Beautiful Game — white words + yellow GAME):

  • Brush tight around GAME → the letters come out moth-eaten. The grunge spray scatters the title's own yellow into the ring just outside the brush, so _background_colors puts a yellow cluster in the backdrop palette and the letter bodies key as backdrop. Knife-edge sensitive: moving the brush ~10px flips between clean and ruined.
  • Brush over the whole title → every white word is hollowed to an outline (white-ish art in the ring puts a white cluster in the palette), while white mode drops GAME entirely (yellow min-channel is far below the 120 floor). A mixed title has no working mode.

Fix

Two changes in backend/util/cl2k/logo_extract.py, both confined to subject mode:

  • _drop_bleed — near-ring palette clusters must have colour support in a far ring 40–80px out (ΔE ≤ 14). Spray hugs the glyphs; real backdrop continues outward. On the repro the yellow bleed cluster fails by ΔE 42 while genuine backdrop validates within 14. Fail-safe: keeps all clusters when the far ring is too small or nothing validates.
  • _white_union_alpha — subject mode unions in the same min-channel brightness key extract_title_logo uses, so the white words of a mixed title extract in the same pass (colours stay original; the downstream whiten still two-tones). Two guards keep pale backdrop out:
    • border spill: bright content flowing across the brush border is backdrop (sky, a plate) — flood-filled from the outside rim and dropped; a properly brushed title is an island;
    • coverage cap: a union covering >60% of the brush means the bright pixels are a field, not letters — rejected wholesale, keeping pure colour-key output (a red title on a cream poster still extracts pure red).

Rejected approaches, for context: a min-fraction gate on ring clusters (the bleed reaches 17–24% of the ring — not a sliver), erosion-based cluster solidity (k-means dithers textured backdrop into speckle while grunge blobs are chunky — the signal inverts), and per-pixel ΔE suppression of the union (80% of legitimate white letters sit within ΔE 8 of a genuine white backdrop cluster). The discriminators that survive testing are geometric: far-ring support and border connectivity.

Multicolour titles (white + red + yellow + green) work by the same mechanism — the colour key accepts any hue far from the backdrop palette — and are covered by a new test. Still out of scope: title colour sitting on near-identical backdrop colour, which is what diff-mode (AI erase) is for.

Verification

  • 5 new tests: mixed white+coloured title, multicolour title, ring-bleed not eating the title, pale-field union rejection, border-spill rejection. 29 pass in tests/test_cl2k_logo_extract.py.
  • Full backend suite: 1633 passed. ruff check . clean.
  • Real-poster verification on the repro across four brush placements (tight, hugging, clipping, generous): GAME solid in all, full mixed logo from one extraction with a containing brush.
  • Both files are develop-only extension files; branch isolation untouched.

Summary by CodeRabbit

  • Bug Fixes

    • Improved logo and title extraction from images with background color bleed.
    • Better preserves mixed white and colored lettering in titles.
    • Reduces accidental inclusion of pale backgrounds, brush marks, and surrounding backdrop areas.
    • Improves retention of original colors, transparency, and crop boundaries.
    • Added safer handling for partial or failed detections.
  • Documentation

    • Clarified that colored/mixed extraction preserves white words and requires brushing over the complete title.
  • Tests

    • Expanded coverage for multicolor titles, color bleed, backdrop spill, pale-word rescue, and text filtering.

Subject mode's backdrop palette was poisoned by the title's own colour:
distressed grunge spray bleeds title colour into the ring just outside
the brush, so letter bodies keyed as backdrop (moth-eaten coloured
words, white words hollowed to outlines). Mixed titles had no working
mode at all - the white key drops coloured words and the colour key
dropped white ones.

- _drop_bleed: near-ring palette clusters must have colour support in a
  far ring (40-80px out). Spray hugs the glyphs; real backdrop continues
  outward. Fail-safe: keeps all clusters when the far ring is too small
  or nothing validates.
- _white_union_alpha: subject mode unions in the brightness key for the
  white words, guarded by border-spill rejection (bright content flowing
  across the brush border is backdrop) and a coverage cap (a union over
  60% of the brush is a pale field, rejected wholesale).

Both guards fail toward the previous behaviour, never past it.
@coderabbitai

coderabbitai Bot commented Aug 8, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your recent review volume is higher than typical usage, so adaptive limits are currently applied.

Next review available in: 43 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: f4be1d05-268d-41f5-bee6-749be367ed45

📥 Commits

Reviewing files that changed from the base of the PR and between 4e0c545 and 7cdbf61.

📒 Files selected for processing (3)
  • backend/util/cl2k/logo_extract.py
  • frontend/src/pages/poster/Cl2kMakerPage.jsx
  • tests/test_cl2k_logo_extract.py
📝 Walkthrough

Walkthrough

Logo extraction now filters backdrop bleed in Lab space and preserves white and pale portions of mixed titles. Text-zone filtering, updated instructions, and expanded tests cover spill rejection, fail-safe behavior, and mask tightening.

Changes

Logo extraction

Layer / File(s) Summary
Backdrop bleed filtering
backend/util/cl2k/logo_extract.py
Backdrop rings use binary dilation. Near-ring clusters are filtered against far-ring Lab colors before background distance calculations. Shared tolerance constants support anchor rescue and mask tightening.
Mixed-title alpha union
backend/util/cl2k/logo_extract.py, frontend/src/pages/poster/Cl2kMakerPage.jsx
Subject extraction unions guarded white and rescued pale title content, applies text-zone filtering, and updates the extraction mode and instructions for mixed titles.
Subject extraction validation
tests/test_cl2k_logo_extract.py
Tests verify color retention, alpha coverage, bleed rejection, pale-word rescue, detector fail-safe behavior, deep spill removal, and text-mask tightening.

Estimated code review effort: 4 (Complex) | ~45 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the primary change: extracting mixed white and coloured titles in subject mode.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/cl2k-mixed-title-extraction

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
backend/util/cl2k/logo_extract.py (1)

212-220: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Reduce helper documentation to behavior and operational gotchas.

Both docstrings contain extended implementation rationale. Keep each to one or two lines that state behavior and failure handling.

  • backend/util/cl2k/logo_extract.py#L212-L220: reduce _drop_bleed documentation to unsupported near-ring cluster removal and its fallback.
  • backend/util/cl2k/logo_extract.py#L279-L295: reduce _white_union_alpha documentation to white-alpha union plus spill and coverage guards.

As per path instructions, comments must be “navigational/instructional only (1-2 line what/gotcha), no why/history essays; match existing density.”

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@backend/util/cl2k/logo_extract.py` around lines 212 - 220, The docstring for
_drop_bleed in backend/util/cl2k/logo_extract.py:212-220 should be reduced to
one or two lines describing removal of near-ring clusters lacking far-ring
support and the fallback that preserves all clusters when validation is
insufficient. Also reduce the _white_union_alpha docstring at
backend/util/cl2k/logo_extract.py:279-295 to one or two lines describing
white-alpha union behavior and its spill and coverage guards; remove extended
rationale and history from both.

Source: Path instructions

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@backend/util/cl2k/logo_extract.py`:
- Around line 310-316: Remove the fixed _SPILL_MAX_ITERS bound from the spill
propagation loop in extract_subject_logo, and continue expanding spill until
grown and spill have equal coverage. If a bounded loop is necessary, derive its
limit from mask.shape rather than a constant; also add a regression test using a
large mask to verify connected backdrop spill is fully removed.

---

Nitpick comments:
In `@backend/util/cl2k/logo_extract.py`:
- Around line 212-220: The docstring for _drop_bleed in
backend/util/cl2k/logo_extract.py:212-220 should be reduced to one or two lines
describing removal of near-ring clusters lacking far-ring support and the
fallback that preserves all clusters when validation is insufficient. Also
reduce the _white_union_alpha docstring at
backend/util/cl2k/logo_extract.py:279-295 to one or two lines describing
white-alpha union behavior and its spill and coverage guards; remove extended
rationale and history from both.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 4a7fe2df-2e7d-4a8d-9095-9d6aa587d9c1

📥 Commits

Reviewing files that changed from the base of the PR and between 4e0c545 and 7d3957c.

📒 Files selected for processing (2)
  • backend/util/cl2k/logo_extract.py
  • tests/test_cl2k_logo_extract.py

Comment thread backend/util/cl2k/logo_extract.py Outdated
chodeus added 2 commits August 8, 2026 16:02
Extends the mixed-title extraction fix across the remaining gaps:

- tighten_text_mask's _outside_background gets the same far-ring bleed
  guard as extraction, so title spray outside the erase block no longer
  aborts mask tightening (shared _far_ring_palette helper).
- The spill flood's iteration cap is now derived from the mask size -
  a fixed 64-pass cap left connected backdrop deeper than ~256px alive
  inside a tall brush. Far-ring validation also requires the far ring
  to be at least half the near ring's size: a brush close to the frame
  edge leaves a one-sided far ring that wrongly condemned colours
  legitimately present near the other sides.
- _anchor_rescue_alpha: a fat vivid word could pull the Otsu band-fit
  high enough that a pale muted word landed under lo and vanished
  (below the white-key floor, so the union could not catch it either).
  Substantial brushed clusters clearly separated from the backdrop
  palette now get their own key band, clamped to 0.6x their backdrop
  distance, with the same border-spill and coverage guards.
- UI: the mode is labelled 'Coloured / mixed title' and the brush hint
  no longer warns users away from brushing the whole title.

Validated against real posters (Kevin Bridges, Squid Game, Life and
Dirt): tight-brush Squid Game went from losing every white letter to
the complete title; Life and Dirt is pixel-identical; ring sampling is
~7x faster with _dilate replacing MaxFilter.
Content the colour key can't tell from title - a smudge of scene art,
cars, a football - keys in whenever it sits far from the ring palette.
_text_zone_filter keeps only keyed components connected to a detected
text line (dilated for shapes, underlines and plates); isolated scene
junk drops. Fail-safe on every edge: no detector, no boxes, or a keep
under half the keyed area leaves the alpha untouched.

Also trims the _drop_bleed/_white_union_alpha/_anchor_rescue_alpha
docstrings to the 1-2 line house style.

Validated on the same real posters: Kevin Bridges loses the football
and city fragments; Squid Game with per-word brush strokes loses the
doorway smear; Life and Dirt drops a stray streak and keeps the full
title.
@chodeus

chodeus commented Aug 8, 2026

Copy link
Copy Markdown
Owner Author

Round 2/3 summary for the incremental review: 4882d84 extends the far-ring bleed guard to the erase path (_outside_background), derives the spill-flood bound from the mask size (per the inline finding), distrusts one-sided far rings near frame edges, and adds per-anchor rescue for pale words the band-fit drops. 73bf492 adds a detector-gated zone filter that drops keyed scene junk not connected to any detected text line (fail-safe when the detector is absent or misses the wordmark), and trims the helper docstrings flagged in the nitpick to house style. All changes validated against real posters (Kevin Bridges, Squid Game, Life and Dirt) plus 11 new tests; backend suite 1640 green.

@chodeus

chodeus commented Aug 8, 2026

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 8, 2026

Copy link
Copy Markdown
⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@chodeus

chodeus commented Aug 8, 2026

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 8, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (5)
tests/test_cl2k_logo_extract.py (2)

337-337: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Move the gap probe to the centre of the gap.

Strokes occupy x 90..102 and x 135..147, so the gap is x 103..134. grow is max(2, round(0.004 * 500)), which is 2, so the dilated stroke edge reaches x 133. The probe at x=130 clears it by 3 px. A probe at x=118 sits at the gap centre and keeps the assertion meaningful if grow changes.

🧪 Proposed change
-    assert m.getpixel((130, 150)) < 60  # gap between strokes -> keep
+    assert m.getpixel((118, 150)) < 60  # gap between strokes -> keep
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/test_cl2k_logo_extract.py` at line 337, Update the pixel probe in the
gap assertion of the logo extraction test to use x=118, the center of the
x=103..134 gap, while preserving the existing y-coordinate and threshold.

237-243: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Derive the brush size from the poster instead of repeating (400, 300).

_junk_poster owns the image size. Lines 255, 266 and 284 repeat (400, 300) literally. If _junk_poster changes size, those three tests fail with a mask-size mismatch rather than a clear signal. Return the image and read img.size, as test_subject_rescues_a_pale_word_next_to_a_vivid_one does at line 226.

♻️ Proposed refactor
-    out = extract_subject_logo(_jpeg(_junk_poster()), _brush((400, 300), (40, 70, 360, 270)))
+    img = _junk_poster()
+    out = extract_subject_logo(_jpeg(img), _brush(img.size, (40, 70, 360, 270)))

Also applies to: 255-255

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/test_cl2k_logo_extract.py` around lines 237 - 243, Update _junk_poster
and the tests that use it so the brush size is derived from the returned image’s
img.size rather than repeating (400, 300). Return the image from _junk_poster in
the same manner as test_subject_rescues_a_pale_word_next_to_a_vivid_one, and use
that size for the affected brush constructions.
backend/util/cl2k/logo_extract.py (3)

316-319: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Rename _border_spill to reflect its second, non-border use.

_text_zone_filter calls _border_spill(keyed, keyed & zone) at line 394 to grow a KEEP region from detected text lines. That call has nothing to do with a brush border or with spill. The function is a generic geodesic flood of seed through add. A name such as _geodesic_flood and a docstring that states the generic contract would prevent a reader from assuming a border relationship at the _text_zone_filter call site.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@backend/util/cl2k/logo_extract.py` around lines 316 - 319, Rename
_border_spill to a generic name such as _geodesic_flood, update its docstring to
describe flooding seed through add without border-specific terminology, and
update every call site including _text_zone_filter. Preserve the existing flood
behavior and parameters.

355-355: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Extract the duplicated 33.0 tolerance cap into a module constant.

Line 355 hardcodes 33.0 as the tolerance cap. _detect_anchors applies the same cap at line 659 through its color_tol parameter, whose default is also 33.0. The docstring at line 333 states that this band matches _detect_anchors. If the color_tol default changes, the two paths drift and the docstring becomes wrong, with no test that detects it.

♻️ Proposed refactor
+# Cap on any per-anchor colour key band (see _detect_anchors, _anchor_rescue_alpha).
+_COLOR_TOL_MAX = 33.0
-        tol = min(33.0, max(_BG_SAME, 0.6 * d))
+        tol = min(_COLOR_TOL_MAX, max(_BG_SAME, 0.6 * d))

Then use _COLOR_TOL_MAX as the color_tol default in tighten_text_mask.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@backend/util/cl2k/logo_extract.py` at line 355, Define a module-level
_COLOR_TOL_MAX constant with value 33.0, replace the hardcoded cap in the
tolerance calculation near _detect_anchors, and use the same constant as the
color_tol default in tighten_text_mask so both paths and the documented matching
band remain synchronized.

221-227: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick win

Reuse the 40 px dilation in _far_ring_palette. Compute the 80 px dilation from the 40 px result. This preserves the square-dilation result and reduces each call from 484 to 324 full-array passes on images up to _MAX_SIDE (3000 px).

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@backend/util/cl2k/logo_extract.py` around lines 221 - 227, Update
_far_ring_palette to compute the 40 px dilation once, reuse it when deriving the
80 px dilation, and preserve the existing far-mask, filtering, clustering, and
return behavior while avoiding a second independent 40 px dilation pass.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@tests/test_cl2k_logo_extract.py`:
- Around line 271-286: Update
test_subject_zone_filter_distrusts_a_partial_detection so the keyed title
content consists of disconnected bars or pieces, with the mocked detection
covering only a minority piece. Position them far enough apart to remain
disconnected after _dilate(keep, 2) and the 12-pixel zone dilation, ensuring
_text_zone_filter’s _ZONE_MIN_KEEP early return is exercised.

---

Nitpick comments:
In `@backend/util/cl2k/logo_extract.py`:
- Around line 316-319: Rename _border_spill to a generic name such as
_geodesic_flood, update its docstring to describe flooding seed through add
without border-specific terminology, and update every call site including
_text_zone_filter. Preserve the existing flood behavior and parameters.
- Line 355: Define a module-level _COLOR_TOL_MAX constant with value 33.0,
replace the hardcoded cap in the tolerance calculation near _detect_anchors, and
use the same constant as the color_tol default in tighten_text_mask so both
paths and the documented matching band remain synchronized.
- Around line 221-227: Update _far_ring_palette to compute the 40 px dilation
once, reuse it when deriving the 80 px dilation, and preserve the existing
far-mask, filtering, clustering, and return behavior while avoiding a second
independent 40 px dilation pass.

In `@tests/test_cl2k_logo_extract.py`:
- Line 337: Update the pixel probe in the gap assertion of the logo extraction
test to use x=118, the center of the x=103..134 gap, while preserving the
existing y-coordinate and threshold.
- Around line 237-243: Update _junk_poster and the tests that use it so the
brush size is derived from the returned image’s img.size rather than repeating
(400, 300). Return the image from _junk_poster in the same manner as
test_subject_rescues_a_pale_word_next_to_a_vivid_one, and use that size for the
affected brush constructions.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 2d10e7d2-b6e0-4420-9492-23c02b4fb13b

📥 Commits

Reviewing files that changed from the base of the PR and between 7d3957c and 73bf492.

📒 Files selected for processing (3)
  • backend/util/cl2k/logo_extract.py
  • frontend/src/pages/poster/Cl2kMakerPage.jsx
  • tests/test_cl2k_logo_extract.py

Comment thread tests/test_cl2k_logo_extract.py
…view nitpicks

The tall-title fixture was one connected rectangle, so the flood kept
everything and the _ZONE_MIN_KEEP early-return never fired - the test
passed on connectivity, not the guard. Disconnected bars with the box
over the minority piece now gate it (verified: disabling the guard
fails the test).

Nitpicks from the same review: _border_spill renamed _geodesic_flood
(its zone-filter use has nothing to do with borders), the 33.0 anchor
band cap extracted to _COLOR_TOL_MAX and shared with tighten_text_mask,
_far_ring_palette reuses the 40px dilation, junk-poster tests derive
the brush size from the image, and the tighten gap probe moved to the
gap centre.
@chodeus

chodeus commented Aug 8, 2026

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 8, 2026

Copy link
Copy Markdown
⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@chodeus

chodeus commented Aug 8, 2026

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 8, 2026

Copy link
Copy Markdown
⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@chodeus

chodeus commented Aug 8, 2026

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 8, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@chodeus
chodeus merged commit bc8b809 into develop Aug 8, 2026
12 checks passed
@chodeus
chodeus deleted the fix/cl2k-mixed-title-extraction branch August 8, 2026 09:48
@chodeus

chodeus commented Aug 8, 2026

Copy link
Copy Markdown
Owner Author

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Aug 8, 2026

Copy link
Copy Markdown
⚠️ Action not completed

Review rate limited.


Your included review limit is currently reached under our Fair Usage Limits Policy. Your recent PR review activity is in the 95th percentile or higher among CodeRabbit users, so adaptive limits apply. This review may still proceed through usage-based billing if eligible. Your next included review will be available in 43 minutes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant