Skip to content

fix(auth): require issued-at in Keyverse OIDC sessions - #1321

Open
seonghobae wants to merge 22 commits into
developfrom
codex/keyverse-oidc-iat
Open

fix(auth): require issued-at in Keyverse OIDC sessions#1321
seonghobae wants to merge 22 commits into
developfrom
codex/keyverse-oidc-iat

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Summary

This current-base security lane combines three bounded, independently testable hardening changes:

  1. Keyverse OIDC issued-at enforcement — require a verified OIDC iat NumericDate alongside iss, aud, and exp before Naruon accepts OIDC identity claims.
  2. Aggregate HTTP invalid-session throttling — keep the exact-token failure budget and add a coarser server-observed HTTP peer budget so varying invalid bearer tokens cannot mint unlimited fresh verification buckets (security(auth): aggregate invalid-session throttling beyond exact token identity #1348).
  3. IMAP final-use destination validation — revalidate explicitly supplied IMAP host/port values immediately before _fetch_messages() opens the TLS connection so alternate call paths cannot bypass the existing outbound destination policy.

The HTTP aggregate scope is derived only from the ASGI request.client.host boundary. Application code deliberately ignores Forwarded and X-Forwarded-For, so caller-controlled forwarding headers cannot create new throttle identities. The peer budget is looser than the exact-token budget to reduce collateral lockout behind NAT/reverse proxies, remains bounded by the existing expiry/capacity store, and is not reset by a successful bearer token. Direct non-HTTP build_auth_context() calls retain the exact-token-only contract.

Test-first evidence

The RED regression for #1348 established that distinct invalid bearer tokens from one observed HTTP peer could previously reach JWT decoding independently. Production implementation then added the peer-scoped budget and focused regressions for:

  • varying invalid tokens under one observed HTTP peer;
  • spoofed Forwarded / X-Forwarded-For values not changing the application scope;
  • independent peer-scope budgets;
  • a valid token not resetting the coarse peer budget; and
  • the direct non-HTTP exact-token-only boundary.

The IMAP hardening was also introduced test-first: commit ffb2363192eb6004dea6154faea3df34bc767172 adds the regression that rejects an explicitly supplied unvalidated fetch destination, and current head 2790a7edff5f5ed29a6a7aedcd398bc0d5ef7c06 applies the narrow final-use validation fix.

OIDC trust boundary

  • exact configured issuer equality;
  • configured OIDC client ID must be present in the verified aud claim, including multi-valued audiences;
  • verified iat and exp NumericDate lifetime checks;
  • critical JOSE headers fail closed;
  • token claims do not bypass the existing deny-first ABAC/RBAC authorization boundary; and
  • HMAC sessions retain their internal control-plane bridge contract while configured OIDC deployments additionally accept verified OIDC sessions.

The standards and abuse-control rationale are recorded in docs/doctoring/http-session-throttling.md and docs/operations/auth-key-management.md, including RFC 7519, OpenID Connect Core 1.0, NIST SP 800-63B-4, and the formal OpenID Connect security analysis by Fett, Küsters, and Schmitz (2017), with APA 7 references.

Current-base scope

  • Protected base: develop@bc98789521d21271e84789888413c182aa111b4d.
  • Exact current head: 2790a7edff5f5ed29a6a7aedcd398bc0d5ef7c06.
  • Changed files versus protected develop:
    • ARCHITECTURE.md
    • backend/api/auth.py
    • backend/services/imap_worker.py
    • backend/tests/test_auth_http_rate_limit.py
    • backend/tests/test_auth_real.py
    • backend/tests/test_imap_worker.py
    • docs/doctoring/http-session-throttling.md
    • docs/operations/auth-key-management.md
  • The predecessor text-safety delta is not part of the current diff; its old review thread is resolved and outdated.
  • Current documentation already addresses the latest CodeRabbit finding by describing the two fail-closed HMAC/OIDC verification modes and the exact issuer / audience-membership contract.

Exact-head verification

For exact head 2790a7edff5f5ed29a6a7aedcd398bc0d5ef7c06, applicable required and quality/security checks have completed successfully, including opencode-review, backend (Python 3.14), frontend, dependency-review, trivy-fs, osv-scan, coverage-source-tree, coverage-evidence, security, scorecard, strix, noema-review, CodeQL/Semgrep analysis, and container validation. Conditional deployment/publish/cancellation jobs that are skipped are not treated as passing evidence. The separate advisory GitHub Advanced Security Trivy code-scanning result is neutral because a base-branch configuration is not present on this PR head; it is not substituted for the required successful trivy-fs context.

Merge gate

Do not merge until the unchanged exact current head satisfies every live protected-branch rule and receives the required qualifying independent approval after the last push. The live repository currently has only @seonghobae as collaborator/CODEOWNER, so no qualifying independent reviewer path exists yet; #1371 tracks that governance prerequisite. No self-approval, bypass, or ruleset weakening is acceptable.

Related: #1348, #1371, and ContextualWisdomLab/keyverse ADR-0008.


Open in Devin Review

@seonghobae

Copy link
Copy Markdown
Contributor Author

@opencode-agent review\n\nPlease review exact head 8db9575 for the Keyverse OIDC trust-boundary change, including the required iat claim and deny-first authorization behavior.

@coderabbitai

coderabbitai Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

OIDC authentication now requires verified iat, exact issuer, and configured audience claims. HTTP authentication now throttles failures by exact token and server-observed peer address. Browser authentication documentation now describes HttpOnly session cookies.

Changes

Authentication hardening

Layer / File(s) Summary
OIDC claim validation
backend/api/auth.py
OIDC JWT decoding requires exp, iss, aud, and iat. HMAC authentication keeps optional iat handling.
OIDC regression coverage
backend/tests/test_auth_real.py
OIDC fixtures use Keyverse issuer and audience values, include iat, and reject tokens without iat.
OIDC deployment and client documentation
ARCHITECTURE.md, docs/operations/auth-key-management.md
Documentation defines exact OIDC issuer, audience, iat, and exp requirements and describes HttpOnly session-cookie authentication.
HTTP peer-scope throttling
backend/api/auth.py
HTTP authentication derives peer identity from the ASGI client address, ignores forwarded headers, and enforces peer and exact-token failure buckets.
HTTP throttling coverage and operations documentation
backend/tests/test_auth_http_rate_limit.py, docs/doctoring/http-session-throttling.md, docs/operations/auth-key-management.md
Tests cover shared, isolated, and non-resetting peer budgets. Documentation records throttling, expiry, and direct-call behavior.

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

Merge Risk: 🔵 Low · up to e8339

The change strengthens OIDC session validation and HTTP invalid-session throttling without a demonstrated runtime regression; one documentation statement should be corrected to describe both authentication modes. The PR is mergeable with explicit owner awareness and follow-up on that bounded documentation issue.

Sequence Diagram(s)

sequenceDiagram
  participant HTTPClient
  participant get_auth_context
  participant build_auth_context
  participant verify_signed_session
  HTTPClient->>get_auth_context: Send bearer authorization and ASGI Request
  get_auth_context->>build_auth_context: Pass token and server-observed peer scope
  build_auth_context->>verify_signed_session: Verify token with exact-token and peer buckets
  verify_signed_session-->>build_auth_context: Return authenticated context or failure
  build_auth_context-->>get_auth_context: Return AuthContext or authentication error
Loading

Possibly related issues

  • #1348 — The PR implements aggregate HTTP invalid-session throttling with peer-scoped budgets, tests, and documentation.
🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
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.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the OIDC iat enforcement change, which is a central part of the authentication updates.
✨ 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 codex/keyverse-oidc-iat

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

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick comments (2)
ARCHITECTURE.md (1)

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

Clarify configured-audience matching.

The text says “exact configured issuer/client audience.” backend/api/auth.py:468-508 checks exact issuer equality but accepts settings.OIDC_CLIENT_ID as a member of _session_audience_claim(payload). State the audience-membership rule explicitly, or change the implementation and tests if single-value equality is required.

🤖 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 `@ARCHITECTURE.md` around lines 257 - 259, Clarify the OIDC audience
requirement in the architecture text to match the implementation: issuer must
match exactly, while the configured OIDC client ID must be present in the
session audience claim, including multi-valued audiences. Update the wording
near the signed session envelope description without changing implementation
behavior.
docs/operations/auth-key-management.md (1)

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

Add citations for the OIDC trust-boundary claims.

This section defines security requirements for issuer, audience, iat, exp, and critical headers, but provides no supporting citation or summary. Add the relevant OIDC/JWT standards and applicable security literature. A formal OIDC security analysis discusses related validation requirements and attack variants. (arxiv.org)

As per coding guidelines: “Substantive feature or process PRs should cite relevant academic literature and commit PDFs when redistribution is permitted; otherwise provide citations, links, and summaries.”

🤖 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 `@docs/operations/auth-key-management.md` around lines 124 - 130, Add citations
and brief summaries for the OIDC/JWT trust-boundary requirements described in
this section, covering issuer, audience, NumericDate claims, critical headers,
and related validation attacks. Reference the relevant OIDC and JWT standards
plus the cited formal OIDC security analysis, and include links or committed
PDFs according to the repository’s citation guidelines.

Source: Coding guidelines

🤖 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.

Nitpick comments:
In `@ARCHITECTURE.md`:
- Around line 257-259: Clarify the OIDC audience requirement in the architecture
text to match the implementation: issuer must match exactly, while the
configured OIDC client ID must be present in the session audience claim,
including multi-valued audiences. Update the wording near the signed session
envelope description without changing implementation behavior.

In `@docs/operations/auth-key-management.md`:
- Around line 124-130: Add citations and brief summaries for the OIDC/JWT
trust-boundary requirements described in this section, covering issuer,
audience, NumericDate claims, critical headers, and related validation attacks.
Reference the relevant OIDC and JWT standards plus the cited formal OIDC
security analysis, and include links or committed PDFs according to the
repository’s citation guidelines.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 55acf52b-6de0-4682-a6c2-21709134f523

📥 Commits

Reviewing files that changed from the base of the PR and between da16757 and 8db9575.

📒 Files selected for processing (5)
  • ARCHITECTURE.md
  • CHANGELOG.md
  • backend/api/auth.py
  • backend/tests/test_auth_real.py
  • docs/operations/auth-key-management.md

coderabbitai[bot]
coderabbitai Bot previously approved these changes Aug 11, 2026
@github-actions

github-actions Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

PR governance metadata gate is not ready for e2c7017e9ca212039ddadf056ee192c9a1a11342:

  • Required check strix is FAILURE on the current head.

@seonghobae

Copy link
Copy Markdown
Contributor Author

@opencode-agent review

Please review exact current head 6a5cf11. Re-evaluate both the Keyverse OIDC iat trust-boundary change and the orphaned HTML comment terminator security fix. Do not carry predecessor-head findings forward; do not mutate or merge.

@seonghobae

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

Please review exact current head 6a5cf11 only, including required OIDC iat and the text-safety fix for malformed <!-->...--> payloads. Do not mutate or merge.

@coderabbitai

coderabbitai Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

@seonghobae I will review exact head 6a5cf11 only. I will check the Keyverse OIDC iat requirement and the malformed <!-->...--> text-safety fix. I will not mutate or merge the branch.

⚠️ 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.

@seonghobae
seonghobae enabled auto-merge August 11, 2026 23:32
coderabbitai[bot]

This comment was marked as resolved.

@opencode-agent
opencode-agent Bot disabled auto-merge August 12, 2026 23:16

Copy link
Copy Markdown
Contributor Author

This branch contains valuable OIDC iat enforcement, but it is not Ready-safe in its current combined form. Exact head 0c360f2bd3a1f7e7f2d439354f646cff1637dbcf is based on stale develop@f0207b... and also globally removes every literal --> from sanitized text via .replace("-->", ""). That text-safety remedy is broader than the malformed-comment defect and can destroy legitimate user content; the current-base bounded fix in #1343 normalizes only the malformed <!--> opener and explicitly preserves legitimate --> text. Returning this PR to Draft preserves the Keyverse/OIDC work while preventing the broad sanitizer deletion from being treated as merge-ready. After #1343 integrates, reconstruct/rebase this lane on current develop, drop the global terminator deletion, retain the OIDC-specific tests/docs, then establish fresh exact-head CI/security/review evidence.

@seonghobae
seonghobae marked this pull request as draft August 14, 2026 15:57
@seonghobae
seonghobae marked this pull request as ready for review August 14, 2026 21:08

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 14, 2026

Copy link
Copy Markdown
Contributor
⚠️ Action not completed

No files to review.

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.

@seonghobae
seonghobae dismissed coderabbitai[bot]’s stale review August 15, 2026 00:45

Dismissed as superseded by the current branch: the requested changes targeted backend/services/text_safety.py, which is no longer part of this PR's exact current diff and the associated inline thread is resolved/outdated. Current-head review evidence remains required independently.

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 15, 2026

Copy link
Copy Markdown
Contributor
⚠️ Action not completed

No files to review.

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[bot]
coderabbitai Bot previously approved these changes Aug 15, 2026
@cursor

cursor Bot commented Aug 17, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

OpenCode cannot approve yet because required coverage evidence did not pass.

Review outcome

1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence

  • Problem: The required coverage-evidence job result was failure, so OpenCode cannot establish approval sufficiency for this head.

  • Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.

  • Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present.

  • Result: REQUEST_CHANGES

  • Reason: coverage-evidence result was failure, so required test/docstring evidence was not proven for current head 57f42180dc29b5bec3578eed06a625a6fb9793b3.

  • Head SHA: 57f42180dc29b5bec3578eed06a625a6fb9793b3

  • Workflow run: 32099577912

  • Workflow attempt: 1

Coverage evidence

Coverage evidence job did not run or did not publish coverage evidence.

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Changed file: ARCHITECTURE.md"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file: ARCHITECTURE.md"]
  R1 --> V1["required checks"]
  Evidence --> S2["Backend (5 files)"]
  S2 --> I2["API and service runtime"]
  I2 --> R2["Review risk: Backend (5 files)"]
  R2 --> V2["backend tests"]
  Evidence --> S3["Docs (2 files)"]
  S3 --> I3["operator or user guidance"]
  I3 --> R3["Review risk: Docs (2 files)"]
  R3 --> V3["docs review"]
Loading

@opencode-agent

opencode-agent Bot commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

OpenCode Review Overview

  • Head SHA: 091e9f85c561b2d43e050484dcfab4fa1807fd41
  • Workflow run: 32420955159
  • Workflow attempt: 1
  • Gate result: REQUEST_CHANGES (approval step)

Pull request overview

OpenCode cannot approve yet because required coverage evidence did not pass.

Review outcome

1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence

  • Problem: The required coverage-evidence job result was failure, so OpenCode cannot establish approval sufficiency for this head.

  • Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.

  • Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present.

  • Result: REQUEST_CHANGES

  • Reason: coverage-evidence result was failure, so required test/docstring evidence was not proven for current head 091e9f85c561b2d43e050484dcfab4fa1807fd41.

  • Head SHA: 091e9f85c561b2d43e050484dcfab4fa1807fd41

  • Workflow run: 32420955159

  • Workflow attempt: 1

Coverage evidence

Coverage evidence job did not run or did not publish coverage evidence.

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Changed file: ARCHITECTURE.md"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file: ARCHITECTURE.md"]
  R1 --> V1["required checks"]
  Evidence --> S2["Backend (5 files)"]
  S2 --> I2["API and service runtime"]
  I2 --> R2["Review risk: Backend (5 files)"]
  R2 --> V2["backend tests"]
  Evidence --> S3["Docs (2 files)"]
  S3 --> I3["operator or user guidance"]
  I3 --> R3["Review risk: Docs (2 files)"]
  R3 --> V3["docs review"]
Loading

@devin-ai-integration devin-ai-integration 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.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no bugs or issues to report.

Open in Devin Review

@seonghobae
seonghobae enabled auto-merge (squash) August 20, 2026 20:09

@opencode-agent opencode-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

OpenCode cannot approve yet because required coverage evidence did not pass.

Review outcome

1. HIGH .github/workflows/opencode-review.yml:1 - Coverage evidence did not prove required test/docstring evidence

  • Problem: The required coverage-evidence job result was failure, so OpenCode cannot establish approval sufficiency for this head.

  • Root cause: Automated approval is only valid when the same-head coverage-evidence job proves supported repository test suites passed and configured docstring gates passed or were advisory, or reports not applicable because no supported source files or package manifests exist. Missing, failed, skipped, unavailable, or unsupported-tooling test evidence is a blocker.

  • Fix: Install or configure the repository test/docstring evidence tooling when source files or package manifests exist, rerun the current-head coverage-evidence job, and approve only after it reports success with required evidence or explicit no-source not-applicable evidence.

  • Regression test: Keep the approval branch checking needs.coverage-evidence.result == success before posting APPROVE, and publish REQUEST_CHANGES when coverage-evidence blocker states such as cancelled, skipped, failed, unsupported-tooling, or below-100 evidence are present.

  • Result: REQUEST_CHANGES

  • Reason: coverage-evidence result was failure, so required test/docstring evidence was not proven for current head 091e9f85c561b2d43e050484dcfab4fa1807fd41.

  • Head SHA: 091e9f85c561b2d43e050484dcfab4fa1807fd41

  • Workflow run: 32420955159

  • Workflow attempt: 1

Coverage evidence

Coverage evidence job did not run or did not publish coverage evidence.

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Changed file: ARCHITECTURE.md"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file: ARCHITECTURE.md"]
  R1 --> V1["required checks"]
  Evidence --> S2["Backend (5 files)"]
  S2 --> I2["API and service runtime"]
  I2 --> R2["Review risk: Backend (5 files)"]
  R2 --> V2["backend tests"]
  Evidence --> S3["Docs (2 files)"]
  S3 --> I3["operator or user guidance"]
  I3 --> R3["Review risk: Docs (2 files)"]
  R3 --> V3["docs review"]
Loading

@opencode-agent
opencode-agent Bot disabled auto-merge August 21, 2026 08:16
@seonghobae
seonghobae enabled auto-merge (squash) August 21, 2026 08:43
@opencode-agent
opencode-agent Bot disabled auto-merge August 21, 2026 11:46
@seonghobae
seonghobae dismissed stale reviews from opencode-agent[bot] and opencode-agent[bot] August 22, 2026 07:50

Verified: coverage-evidence and other non-metadata-gate required checks on the current head now report pass (gh pr checks). The coverage-evidence failure this review cited has since cleared on rerun. Dismissing as superseded.

@opencode-agent opencode-agent Bot added area: auth Authentication, authorization, identity, or tenant isolation priority: medium Normal-priority or P2 work status: needs-update Pull-request branch is behind its current base type: bug Defect or incorrect behavior labels Aug 22, 2026
@coderabbitai

coderabbitai Bot commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

Caution

Review failed

An error occurred during the review process. Please try again later.


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

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

@coderabbitai

coderabbitai Bot commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

Next included review available in 59 minutes.

View limit details

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

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

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 6ec229e8-6a9f-4325-bc31-f8b22a8fbea1

📥 Commits

Reviewing files that changed from the base of the PR and between e83395f and e2c7017.

📒 Files selected for processing (3)
  • backend/services/imap_worker.py
  • backend/tests/test_imap_worker.py
  • docs/operations/auth-key-management.md

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

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

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

Labels

area: auth Authentication, authorization, identity, or tenant isolation priority: medium Normal-priority or P2 work status: needs-update Pull-request branch is behind its current base type: bug Defect or incorrect behavior

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant