Skip to content

feat(review): run the second reviewer on opencode's free DeepSeek tier - #699

Closed
kixelated wants to merge 2 commits into
mainfrom
review/free-deepseek
Closed

kixelated wants to merge 2 commits into
mainfrom
review/free-deepseek

Conversation

@kixelated

@kixelated kixelated commented Nov 13, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

An outage of the optional second reviewer no longer holds every PR as a draft. The opencode reviewer also moves to opencode's free tier.

On 2026-11-13 the paired reviews used up the opencode-go allowance: about $60 in 49 hours across 358 review sessions. After that, quest review failed on every PR with opencode hit its usage limit, and about a dozen PRs sat as drafts. The reviewer earns its place: it raised most of the medium and high findings no other reviewer caught, and authors fixed 77% of its findings, refuting only 9%.

  • Skip at the usage limit (src/cli/review.ts). When the second reviewer hits its usage limit and has no findings of its own to settle, the run leaves it out instead of failing. It prints skipped opencode <model> <effort> usage limit; resets <time>, JSON gains skipped, and the ## Review record gets a - Skipped: line (src/cli/review-record.ts). The size's pick's rounds count, so the head is named in full when they're clean. Its session, if any, waits for its next run.
    • It still fails the run while it has open findings, since only it can settle them.
    • The size's pick and the shadow still fail the run as before.
    • Being logged out is still a failure, since that needs the maintainer.
  • Free tier (src/cli/models.ts). SECOND_REVIEWER is opencode/deepseek-v4.1-flash-free, the same model at no cost. src/github/models.ts drops a trailing -free from model keys, so an Implementer: line naming DeepSeek V4.1 Flash by either tier still reads as this reviewer, and it never reviews its own change.
  • Docs. The --help text, README, the /quest-review skill's outage paragraph (assets/skills/review.md, edited at the maintainer's request), the live sandbox test's default model, and quest/m1/model-check.md.

Decisions

  • Which model for the second reviewer? ✅ opencode's free DeepSeek V4.1 Flash (rejected: keep the paid Go model; Muse Spark 1.3 Contributor, which is unproven as a reviewer and was refused on the same account with "Insufficient balance")
  • What happens when the second reviewer is out? ✅ Skip it and let the pick's round count, recorded in the PR (rejected: a separate quest; just retest the free tier)

Validation

  • just check and just test pass: 1305 tests, 5 skipped. New tests cover the skip, a resumed run once the limit resets, the still-failing case with open findings, and the record's Skipped: line round-tripping through parseReview with and without a tally.
  • On the real surface: this PR's own quest review ran Codex medium and its low shadow (both clean). opencode's free tier was refused for the day ("Free usage limit reached", resetting 2026-11-14T00:00Z, though this account had never used it), so the run printed skipped opencode opencode/deepseek-v4.1-flash-free high usage limit; resets 2026-11-14T00:00:00Z, wrote the Skipped: line here, and ended next done.
  • Not yet shown: whether the free tier's daily cap survives a normal day's volume. The first runs after the reset will show it in their records.

Follow-ups

  • Check the free tier after 2026-11-14T00:00Z. If it is refused again with nothing used, the cap likely comes with the exhausted Go balance, and the maintainer should add Console credits or pick another model. Recommendation: no quest; the skip lines in review records will show it.

Review

Rewritten by quest review after each round.

  • Head: 7275d2a

  • Base: origin/main at 58bfa33

  • Reviewer: Codex, gpt-6.1-sol, medium effort

  • Session: 01a1d5d9-96ae-7c92-8b36-28a3c9ee4223, round 1

  • Score: 9/10, No actionable bugs were found: skip behavior preserves outstanding findings and records quota skips, but builds and tests were not run, as instructed.

  • Rounds: 1; findings 0: fixed 0, refuted 0, open 0

  • Findings: none

  • Reviewer: Codex, gpt-6.1-sol, low effort, shadow

  • Session: 01a1d5d9-96ae-7312-aad0-5cb754aeb46e, round 1

  • Score: 9/10, Code inspection found no actionable defects: skip handling preserves outstanding findings, records skipped reviewers, and retains successful rounds; tests and builds were not run, as instructed.

  • Rounds: 1; findings 0: fixed 0, refuted 0, open 0

  • Findings: none

  • Reviewer: opencode, opencode/deepseek-v4.1-flash-free, high effort

  • Rounds: 0; findings 0: fixed 0, refuted 0, open 0

  • Skipped: usage limit; resets 2026-11-14T00:00:00Z

Models

Size: S
Implementer: Claude Code, claude-opus-5-5, unknown effort

(Written by Claude Opus 5.5)

🤖 Generated with Claude Code

kixelated and others added 2 commits November 13, 2026 08:53
A busy day's paired reviews spent the opencode-go allowance, and every review
failed until it reset. opencode/deepseek-v4.1-flash-free is the same model at
no cost. Implementer lines naming DeepSeek V4.1 Flash, by either tier, still
read as this reviewer, so it never reviews its own change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…d of failing

When the opencode reviewer's account hits its usage limit and it has no
findings of its own to settle, the run reports it on a skipped line and in the
record's Skipped line, and the size's pick's round counts. A spent optional
reviewer no longer holds every PR as a draft until its reset.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kixelated
kixelated marked this pull request as ready for review November 13, 2026 17:00
@coderabbitai

coderabbitai Bot commented Nov 13, 2026

Copy link
Copy Markdown

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 49 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

Run configuration

  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: e1cbe0d8-d97c-4fb3-8bd9-003f596ed93c
Commits

Reviewing files that changed from the base of the PR and between 58bfa33 and 7275d2a.

Files selected for processing: 11

  • README.md
  • assets/skills/review.md
  • quest/m1/model-check.md
  • src/cli/main.ts
  • src/cli/models.ts
  • src/cli/review-record.ts
  • src/cli/review.ts
  • src/github/models.ts
  • test/live/review-sandbox.test.ts
  • test/review.test.ts
  • test/usage.test.ts
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

@pullfrog pullfrog 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.

✅ No new issues found.

Reviewed changes

I reviewed the full diff at 7275d2a. It covers two changes: the second reviewer's move to opencode's free tier, and the change that leaves that reviewer out when it hits a usage limit instead of failing the run.

  • Skip on usage limit: review() turns the second reviewer's ReviewLimitError into a Skipped result, without aborting the other reviewers, but only when that reviewer has no open findings. The check compares the seat's reviewer to SECOND_REVIEWER by identity. pickReviewer always builds a new object, so a --harness opencode run can never be skipped and leave rounds empty. The skipped reviewer's saved session is kept through waiting.
  • Record and output: reviewRecord adds a - Skipped: line, either in the skipped reviewer's existing tally block or in a new Rounds: 0 block. The tests show parseReview still reads both forms. roundLines and the JSON output now report skipped too, and resetText now holds the reset-time formatting that ReviewLimitError used to do inline.
  • Free-tier model: SECOND_REVIEWER is now opencode/deepseek-v4.1-flash-free. key() drops a trailing -free, so an Implementer: line naming DeepSeek V4.1 Flash still excludes this reviewer from reviewing its own change.
  • Docs and tests: The README, --help, the /quest-review skill (edited at the maintainer's request) and model-check.md are updated. New tests cover a skipped first run, a run after the limit resets, the still-failing case with open findings, and the record round-trip. The general reviewer-failure test now uses FAKE_OPENCODE_REJECTED.

Pullfrog  | View workflow run | Using claude-opus-5-5 | 𝕏

@kixelated

Copy link
Copy Markdown
Collaborator Author

Superseded by #701: the maintainer chose (2026-11-13) to replace opencode's DeepSeek reviewer with Pullfrog, so quest review runs only the size's pick and quest merge waits for the online reviewer named in REVIEW.md. That makes the free tier and the skip at its usage limit moot, so closing this one.

(Written by Claude Opus 5.5)

@kixelated kixelated closed this Nov 13, 2026
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