Skip to content

Make loop feedback waits resumable#13

Merged
kristofferR merged 12 commits into
mainfrom
codex/resumable-loop-state
Jul 4, 2026
Merged

Make loop feedback waits resumable#13
kristofferR merged 12 commits into
mainfrom
codex/resumable-loop-state

Conversation

@kristofferR

@kristofferR kristofferR commented Jun 30, 2026

Copy link
Copy Markdown
Owner

Summary

  • Persist per-head feedback wait state with started/deadline metadata.
  • Resume crq loop from the persisted wait instead of refiring or treating fired dedupe as convergence.
  • Adopt an already-posted review command when state died before the fired marker was recorded.
  • Keep autoreview, pump, dashboard, and state normalization aware of pending feedback waits.

Validation

  • go test ./...

Ref #12

Summary by CodeRabbit

  • New Features
    • Dashboard now shows an “awaiting feedback” banner/row with the waiting head and deadline.
    • Queue logic can resume an in-progress feedback wait, dedupe properly, and adopt an existing matching review command to avoid unnecessary re-posts.
  • Bug Fixes
    • Prevents duplicate firing when an awaiting-feedback marker already matches the current PR head.
    • Refines persisted feedback-wait handling for timeouts, rate limits, pruning, and correct clearing when feedback completes.
  • Documentation
    • Updated guidance for when to provide user-facing updates during wait states.
  • Tests
    • Expanded unit/integration coverage for resume/deadline, deduping, adoption, race handling, and wait lifecycle.

@kristofferR
kristofferR marked this pull request as ready for review June 30, 2026 00:31
@coderabbitai

coderabbitai Bot commented Jun 30, 2026

Copy link
Copy Markdown

Review Change Stack

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 8a3d61a4-0cfc-4a4b-83b1-dae49239d863

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds persisted awaiting-feedback state, threads it through queue and loop handling, updates dashboard output, and revises wait-state guidance.

Changes

Persisted Feedback Wait

Layer / File(s) Summary
FeedbackWait state and dashboard rendering
internal/crq/state.go, internal/crq/state_test.go, internal/crq/store.go
Adds AwaitingFeedback and FeedbackWait, normalizes and backfills wait entries, protects matching fired markers, sorts awaiting waits, renders awaiting-feedback status in the dashboard, and normalizes store reads and writes. Tests cover marker protection and fired restoration.
Queue dedupe and review adoption
internal/crq/service.go, internal/crq/service_test.go
Enqueue and Pump dedupe against awaiting-feedback heads; Pump can adopt an existing matching review-command comment; markReviewPosted, Cancel, and requeue paths update or clear awaiting-feedback state. Tests cover adoption, stale waits, dedupe, and persisted state behavior.
Loop persisted wait handling
internal/crq/feedback.go, internal/crq/feedback_test.go
Service.Loop now persists wait timing, extends deadlines on retries and blocks, clears wait state on completion paths, and resumes from stored wait state. Tests cover resumption and timeout behavior.
needsReview guard for awaiting feedback
internal/crq/auto.go
needsReview now exits early when a matching awaiting-feedback entry already exists.
Queue wait guidance update
skills/coderabbit-queue/SKILL.md
Updates the wait-state messaging guidance to enumerate specific user-facing update triggers and silence rules.

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

Possibly related issues

Possibly related PRs

  • kristofferR/coderabbit-queue#10: Shares the same internal/crq queue, state, and loop flow, with this PR extending that implementation for persisted awaiting-feedback handling.

Poem

🐇 I tucked the waits beneath the thyme,
And kept the hops in perfect time.
No double fire, no stale alarm,
Just feedback waits with gentle charm.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly matches the main change: persisting and resuming loop feedback waits instead of refiring them.
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 unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/resumable-loop-state

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

@kristofferR

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jun 30, 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.

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 3314c3f817

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread internal/crq/service.go
Comment thread internal/crq/service.go Outdated
Comment thread internal/crq/service.go Outdated

@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: 4

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
internal/crq/service_test.go (1)

430-440: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Set a non-zero FeedbackWaitTimeout in this fixture.

Lines 478-480 currently only prove Deadline == StartedAt, because this config leaves FeedbackWaitTimeout at 0. That would still pass if the production code ignored the configured timeout entirely.

Proposed fix
 	cfg := Config{
 		GateRepo:        "owner/gate",
 		StateRef:        "crq-state",
 		Host:            "testhost",
 		Bot:             "coderabbitai[bot]",
 		ReviewCommand:   "`@coderabbitai` review",
 		RateLimitMarker: "rate limited by coderabbit.ai",
 		MinInterval:     0,
 		InflightTimeout: time.Minute,
 		PollInterval:    time.Millisecond,
+		FeedbackWaitTimeout: time.Minute,
 		FiredMax:        500,
 	}

Also applies to: 471-480

🤖 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 `@internal/crq/service_test.go` around lines 430 - 440, The test fixture in the
Config setup is leaving FeedbackWaitTimeout at zero, so it only validates
Deadline equals StartedAt and won’t catch code that ignores the configured
timeout. Update the Config used in the relevant service tests to set a non-zero
FeedbackWaitTimeout, then adjust the assertions around Deadline/StartedAt so
they verify the timeout is actually applied in the logic exercised by the test,
using the existing Config and service behavior in service_test.go.
internal/crq/feedback.go (1)

279-309: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Clear the persisted wait using the loop’s target head.

report.Head can change if the PR head advances while this loop is still waiting on the original head. Passing report.Head can leave the old wait uncleared, or worse, clear a newer wait written for the updated head. Use the immutable head captured from waitResult/pullHead.

Proposed fix
 		if len(report.Findings) > 0 {
 			report.Status = "feedback"
-			s.clearFeedbackWait(ctx, repo, pr, report.Head)
+			s.clearFeedbackWait(ctx, repo, pr, head)
 			return report, 10, nil
 		}
 		if report.Converged {
-			s.clearFeedbackWait(ctx, repo, pr, report.Head)
+			s.clearFeedbackWait(ctx, repo, pr, head)
 			return report, 0, nil
 		}
@@
 		if time.Now().After(deadline) {
 			report.Status = "timeout"
-			s.clearFeedbackWait(ctx, repo, pr, report.Head)
+			s.clearFeedbackWait(ctx, repo, pr, head)
 			return report, 2, nil
 		}
🤖 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 `@internal/crq/feedback.go` around lines 279 - 309, The feedback wait cleanup
in the waiting loop should use the immutable target head captured for the
current wait, not the mutable report.Head. Update the calls in the feedback wait
path to clear/persist state using head from the waitResult/pullHead flow so an
advancing PR head does not leave stale wait state behind or clear a newer wait.
Focus on the feedback wait helpers around clearFeedbackWait and the wait loop
that handles report.Converged, timeout, and blocked polling.
🤖 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 `@internal/crq/feedback_test.go`:
- Around line 591-604: The timeout-path test in feedback_test.go only checks the
returned report and elapsed time, so it misses stale-state regressions. After
calling Loop and asserting the timeout result, reload the CRQ state through the
same service path used elsewhere in the test and verify AwaitingFeedback is
cleared; use the existing Loop and state-loading helpers in this test to confirm
the dead wait entry is removed and won’t keep later enqueue/loop calls deduped.

In `@internal/crq/service.go`:
- Around line 269-272: The review path in service.go is treating benign adoption
races as Pump errors; update the existing-review flow around
recordExistingReviewPosted so ErrNoChange is handled the same way as the
reservation path and returns a lost_race-style PumpResult instead of bubbling an
error. Check the related logic in recordExistingReviewPosted, the
existing-review handling block, and the similar reservation-path branches
(including the other mentioned call sites) so st.InFlight != nil or queue-head
changes exit cleanly without failing the pump.
- Around line 259-269: The existing-review adoption flow in service.go is
anchoring `recordExistingReviewPosted` only to the review/commit timestamp,
which can mistakenly adopt a command from a previous head. Update the
`existingReviewCommand`/`recordExistingReviewPosted` path to anchor and validate
against the queued PR head captured by `Pump`, and pass that expected head
through the adoption check so `GetPull` cannot race to a different head before
marking it `Fired` or `AwaitingFeedback`. Revalidate the head inside the
adoption logic and only record the command when the expected head still matches
the current PR head.
- Around line 230-236: The wait-marker check in `service.go` is using the stale
`pending := state.AwaitingFeedback[key]` snapshot before `s.store.Update`, which
can resurrect `st.Fired[key]` after `Cancel` clears the key. Revalidate the
current wait marker inside the `s.store.Update` closure in the relevant service
method, and only assign `st.Fired[key] = head` when the key is still present in
`st.AwaitingFeedback` with the same `Head`; otherwise skip the update and keep
the dedupe state unchanged.

---

Outside diff comments:
In `@internal/crq/feedback.go`:
- Around line 279-309: The feedback wait cleanup in the waiting loop should use
the immutable target head captured for the current wait, not the mutable
report.Head. Update the calls in the feedback wait path to clear/persist state
using head from the waitResult/pullHead flow so an advancing PR head does not
leave stale wait state behind or clear a newer wait. Focus on the feedback wait
helpers around clearFeedbackWait and the wait loop that handles
report.Converged, timeout, and blocked polling.

In `@internal/crq/service_test.go`:
- Around line 430-440: The test fixture in the Config setup is leaving
FeedbackWaitTimeout at zero, so it only validates Deadline equals StartedAt and
won’t catch code that ignores the configured timeout. Update the Config used in
the relevant service tests to set a non-zero FeedbackWaitTimeout, then adjust
the assertions around Deadline/StartedAt so they verify the timeout is actually
applied in the logic exercised by the test, using the existing Config and
service behavior in service_test.go.
🪄 Autofix (Beta)

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: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 875e789c-70bc-4de4-bab7-0679e00f33e6

📥 Commits

Reviewing files that changed from the base of the PR and between 823a260 and 3314c3f.

📒 Files selected for processing (8)
  • internal/crq/auto.go
  • internal/crq/feedback.go
  • internal/crq/feedback_test.go
  • internal/crq/service.go
  • internal/crq/service_test.go
  • internal/crq/state.go
  • internal/crq/state_test.go
  • internal/crq/store.go
📜 Review details
🔇 Additional comments (11)
internal/crq/feedback_test.go (1)

491-551: LGTM!

internal/crq/service_test.go (1)

374-384: LGTM!

Also applies to: 483-538, 692-749

internal/crq/state.go (1)

22-36: LGTM!

Also applies to: 61-69, 110-152, 183-198, 230-241, 271-287, 318-330, 362-368, 408-409

internal/crq/state_test.go (1)

58-107: LGTM!

internal/crq/store.go (2)

184-201: LGTM!


180-202: 🩺 Stability & Availability

No change needed. Both GitStateStore and MemoryStore normalize on Load and Update, so the state-shape contract is already enforced across the store implementations.

internal/crq/service.go (2)

64-78: LGTM!


366-369: LGTM!

Also applies to: 564-564, 841-841

internal/crq/feedback.go (2)

214-252: LGTM!

Also applies to: 269-269


328-460: LGTM!

internal/crq/auto.go (1)

293-295: LGTM!

Comment thread internal/crq/feedback_test.go
Comment thread internal/crq/service.go
Comment thread internal/crq/service.go Outdated
Comment thread internal/crq/service.go

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c47e023112

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread internal/crq/service.go
@kristofferR

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jun 30, 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.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

@kristofferR

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jun 30, 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.

- Check DryRun before adopting an existing review command so a dry-run
  pump can't mutate queue state or report fired.
- Stamp RequeuedAt on requeued items and use it as an adoption cutoff,
  so the stale command left by a rate-limited or timed-out fire isn't
  re-adopted into an endless requeue loop.
- Skip adoption instead of wedging the pump when the head-commit cutoff
  lookup fails with a non-rate-limit error.
- Clear the feedback wait when a review round ends with real feedback
  (submitted review or bot comment), and prune deadline-expired waits in
  Pump, so autoreview-only flows don't leave "awaiting feedback" entries
  stuck forever.

Claude-Session: https://claude.ai/code/session_01W4RViwpNDBmT2fs3qhQNx7
…state

# Conflicts:
#	internal/crq/service_test.go

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 78b86779f4

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread internal/crq/service.go
Comment thread internal/crq/service.go
@kristofferR

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 3, 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.

@kristofferR

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 3, 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.

@kristofferR

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 3, 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.

Pump now clears a finished round's feedback wait only once every bot in
CRQ_REQUIRED_BOTS has submitted a review — mirroring what flips
Feedback's ReviewedBy — instead of dropping it when the first configured
bot responds. Dry-run pumps no longer prune expired waits, matching the
no-state-mutation rule the adoption path follows.

Claude-Session: https://claude.ai/code/session_01W4RViwpNDBmT2fs3qhQNx7

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 214575aa81

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread internal/crq/service.go
Comment thread internal/crq/service.go Outdated
@kristofferR

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 4, 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.

Once an in-flight slot is released on a bare bot reaction, no Pump path
re-runs inflightStatus, so a later submitted review could never clear
the persisted wait without a Loop. Pump now sweeps the oldest lingering
wait per tick — one ListReviews call — and clears it when every awaited
bot has reviewed the fired head.

The required-bots completeness check now also matches reviews to the
fired head (the same CommitID prefix check Feedback uses for
ReviewedBy), so a delayed review for a different push can't complete a
round it doesn't belong to.

Claude-Session: https://claude.ai/code/session_01W4RViwpNDBmT2fs3qhQNx7

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 21f98fe092

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread internal/crq/service.go
Comment thread internal/crq/service.go
Dry-run pumps now simulate the closed-PR drop and dedupe decisions
without writing state — previously the dedupe branches ran before the
dry-run guard and could remove queued items.

Adoption now also bounds the cutoff by the PR's last head force-push
(via the GraphQL timeline, best-effort): a force-push can point the PR
at a commit object whose committer date predates commands made for an
earlier head, and those must not be adopted for the new head.

Claude-Session: https://claude.ai/code/session_01W4RViwpNDBmT2fs3qhQNx7
@kristofferR

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 4, 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.

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 91fdb0b4d9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread internal/crq/service.go Outdated

@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

🤖 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 `@internal/crq/service.go`:
- Around line 488-503: The existingReviewCommand flow does extra GitHub calls
before checking whether any review-command comment actually exists, which wastes
quota on the common no-candidate path. Move the command scan and hasCandidate
check immediately after ListIssueComments and return false early when no
matching comment body is found, before calling GetPull, GetCommit, or
headForcePushCutoff. Keep the adoption behavior unchanged for the matching case
by preserving the existing cutoff and head/commit checks in
existingReviewCommand.
🪄 Autofix (Beta)

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: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 37c899d9-c73b-48dc-b9da-f61814680a0a

📥 Commits

Reviewing files that changed from the base of the PR and between 78b8677 and 91fdb0b.

📒 Files selected for processing (2)
  • internal/crq/service.go
  • internal/crq/service_test.go
📜 Review details
🔇 Additional comments (10)
internal/crq/service_test.go (4)

5-25: LGTM!

Also applies to: 145-147, 223-231


539-607: LGTM!

Also applies to: 609-636, 637-683


742-791: LGTM!

Also applies to: 793-839, 881-922, 924-966


967-1049: LGTM!

Also applies to: 1051-1101, 1103-1136, 1138-1179

internal/crq/service.go (6)

65-85: LGTM!


168-180: LGTM!

Also applies to: 202-205, 231-251


269-297: LGTM!

Also applies to: 312-331


524-560: LGTM!


884-946: LGTM!

Also applies to: 978-978, 990-996


1012-1048: LGTM!

Also applies to: 1050-1096

Comment thread internal/crq/service.go Outdated
botsReviewedHead now mirrors Feedback's ReviewedBy exactly: a required
bot's review whose commit matches the fired head counts regardless of
submission time, since the bot may have reviewed the commit before the
round was triggered. The submitted-after gate now applies only when
there is no head to match.

Claude-Session: https://claude.ai/code/session_01W4RViwpNDBmT2fs3qhQNx7

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 8210e0a182

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread internal/crq/service.go
@kristofferR

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 4, 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.

A regular push has no timestamped head-update event, and the new head's
committer date can predate an old review command (a local commit pushed
later), so no cutoff can prove such a command belongs to the current
head. Instead, treat a configured-bot review submitted at/after the
candidate command as proof the command's round already completed and
skip adoption — the worst case is a duplicate command, the pre-adoption
behavior.

Claude-Session: https://claude.ai/code/session_01W4RViwpNDBmT2fs3qhQNx7
@kristofferR

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 4, 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.

…state

# Conflicts:
#	skills/coderabbit-queue/SKILL.md
@kristofferR
kristofferR merged commit 50fc61d into main Jul 4, 2026
1 check passed
@kristofferR
kristofferR deleted the codex/resumable-loop-state branch July 4, 2026 13:37
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