Skip to content

fix(mcp): enforce audience, algorithm, issuer binding, and token scopes (strict mode)#40653

Open
rusackas wants to merge 8 commits into
masterfrom
fix/mcp-strict-auth
Open

fix(mcp): enforce audience, algorithm, issuer binding, and token scopes (strict mode)#40653
rusackas wants to merge 8 commits into
masterfrom
fix/mcp-strict-auth

Conversation

@rusackas
Copy link
Copy Markdown
Member

@rusackas rusackas commented Jun 2, 2026

SUMMARY

Hardens the MCP service's JWT authentication path with four strict-mode enforcements. Each is config-gated and only fails closed when the relevant configuration is set; otherwise it warns and preserves existing behavior, so single-service / unconfigured deployments are not broken. Stacked on fix/mcp-auth-error-and-logging (same files).

  1. Audience enforcement — When MCP_JWT_AUDIENCE IS configured, audience validation is unchanged. When it is NOT configured, the verifier logs a clear WARNING at init that audience validation is disabled. We chose warn over fail-closed because failing init would break valid single-service deployments that intentionally omit an audience.

  2. Algorithm enforcement — Unsigned (none) tokens are now always rejected in load_access_token, regardless of whether an algorithm is pinned (case-insensitive). Additionally, a WARNING is logged at init when no algorithm is pinned. We did not hard-fail on unpinned algorithm because fastmcp's JWTVerifier always coerces an algorithm default, and JWKS-based deployments legitimately rely on advertised algorithms.

  3. Issuer-bound user lookup — For single-issuer deployments (the common case) the issuer is already pinned by the verifier, so the existing username/email lookup key is unambiguous and is left unchanged (changing it would break those deployments). For multi-issuer configs (MCP_JWT_ISSUER is a list) without an issuer-aware MCP_USER_RESOLVER, a WARNING is logged recommending a compound (iss+sub) resolver. This is the least-breaking correct option.

  4. Scope-aware tool authorizationcheck_tool_permission() now enforces the intersection of token scopes and DB RBAC: the tool method (read/write/delete) maps to a required scope and access is denied if the token lacks it. Critically, this is enforced ONLY when the token actually carries scopes. Scope-less JWTs, API keys, and dev-mode fall back to the current RBAC-only behavior unchanged.

Each enforcement fails closed only when the relevant config is set, with explicit back-compat fallbacks documented inline.

BEFORE/AFTER SCREENSHOTS OR ANIMATED GIF

N/A — backend auth hardening, no UI.

TESTING INSTRUCTIONS

Unit tests added/extended (all pass; full tests/unit_tests/mcp_service/ suite green — 2145 passed):

  • test_jwt_verifier.py: none algorithm rejected (pinned and unpinned), audience-missing warns, algorithm-unpinned warns, no warning when fully configured.
  • test_auth_rbac.py: scope intersection denies when token lacks the required scope (read & write), allows when scope present, falls back to RBAC when token has no scopes or no JWT context.
  • test_auth_user_resolution.py: multi-issuer warns without a custom resolver; single-issuer and custom-resolver paths do not warn.

Run: pytest tests/unit_tests/mcp_service/test_jwt_verifier.py tests/unit_tests/mcp_service/test_auth_rbac.py tests/unit_tests/mcp_service/test_auth_user_resolution.py

ADDITIONAL INFORMATION

  • Has associated issue:
  • Required feature flags:
  • Changes UI
  • Includes DB Migration (follow approval process in SIP-59)
  • Introduces new feature or API
  • Removes existing feature or API

Note: this PR is stacked on fix/mcp-auth-error-and-logging and targets that branch as its base for a clean diff; it will be re-targeted to master after the parent merges.

🤖 Generated with Claude Code

@bito-code-review
Copy link
Copy Markdown
Contributor

bito-code-review Bot commented Jun 2, 2026

Bito Automatic Review Skipped - Branch Excluded

Bito didn't auto-review because the source or target branch is excluded from automatic reviews.
No action is needed if you didn't intend for the agent to review it. Otherwise, to manually trigger a review, type /review in a comment and save.
You can change the branch exclusion settings here, or contact your Bito workspace admin at evan@preset.io.

@dosubot dosubot Bot added authentication Related to authentication change:backend Requires changing the backend labels Jun 2, 2026
@rusackas rusackas added the hold! On hold label Jun 2, 2026
@netlify
Copy link
Copy Markdown

netlify Bot commented Jun 2, 2026

Deploy Preview for superset-docs-preview ready!

Name Link
🔨 Latest commit 32546c6
🔍 Latest deploy log https://app.netlify.com/projects/superset-docs-preview/deploys/6a234c8d4982e3000756db9f
😎 Deploy Preview https://deploy-preview-40653--superset-docs-preview.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

@codecov
Copy link
Copy Markdown

codecov Bot commented Jun 2, 2026

Codecov Report

❌ Patch coverage is 15.87302% with 53 lines in your changes missing coverage. Please review.
✅ Project coverage is 64.11%. Comparing base (3d7021f) to head (ec536cc).
⚠️ Report is 4 commits behind head on master.

Files with missing lines Patch % Lines
superset/mcp_service/auth.py 12.82% 34 Missing ⚠️
superset/mcp_service/jwt_verifier.py 20.83% 19 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master   #40653      +/-   ##
==========================================
- Coverage   64.19%   64.11%   -0.09%     
==========================================
  Files        2666     2667       +1     
  Lines      143991   144188     +197     
  Branches    33108    33146      +38     
==========================================
+ Hits        92428    92439      +11     
- Misses      49950    50136     +186     
  Partials     1613     1613              
Flag Coverage Δ
hive 39.71% <15.87%> (-0.06%) ⬇️
mysql 58.26% <15.87%> (-0.16%) ⬇️
postgres 58.32% <15.87%> (-0.16%) ⬇️
presto 41.29% <15.87%> (-0.06%) ⬇️
python 59.78% <15.87%> (-0.16%) ⬇️
sqlite 57.95% <15.87%> (-0.16%) ⬇️
unit 100.00% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Hardens Superset’s MCP service authentication/authorization pipeline by tightening JWT verification behavior and adding scope-aware tool authorization, while preserving backward compatibility via config-gated “strict mode” behavior and warnings.

Changes:

  • Reject unsigned JWTs (alg=none) during token loading and add startup warnings for weak JWT verifier configuration.
  • Add scope-aware authorization to MCP tool RBAC checks (token scopes ∩ DB RBAC), enforced only when scopes are advertised.
  • Warn on potentially ambiguous user resolution when multiple JWT issuers are configured without an issuer-aware user resolver; add unit tests covering these behaviors.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
superset/mcp_service/jwt_verifier.py Adds forbidden-algorithm rejection and weak-config warning helper invoked during verifier initialization.
superset/mcp_service/auth.py Adds token-scope extraction + scope/RBAC intersection enforcement and multi-issuer resolver warning.
tests/unit_tests/mcp_service/test_jwt_verifier.py Adds tests for alg=none rejection and weak-config warning behavior.
tests/unit_tests/mcp_service/test_auth_rbac.py Adds tests for scope-aware authorization outcomes and RBAC-only fallback behavior.
tests/unit_tests/mcp_service/test_auth_user_resolution.py Adds tests validating the multi-issuer warning behavior and suppression with a custom resolver.

Comment thread superset/mcp_service/jwt_verifier.py
@bito-code-review
Copy link
Copy Markdown
Contributor

The warning about 'algorithm not pinned' not triggering in normal configuration appears to be a design choice in the implementation. Since create_default_mcp_auth_factory() ensures a non-falsy algorithm is always provided (defaulting to 'RS256'), the _warn_on_weak_jwt_config() function does not raise a warning in cases where the algorithm is not explicitly set. This behavior may contradict the PR's intent if the goal was to enforce explicit algorithm pinning, but it aligns with the current logic of the codebase.

@pull-request-size pull-request-size Bot added size/XL and removed size/L labels Jun 2, 2026
Comment thread superset/mcp_service/auth.py Outdated
Comment thread superset/mcp_service/jwt_verifier.py
@rusackas rusackas force-pushed the fix/mcp-strict-auth branch from c4b02ed to 747bfd2 Compare June 2, 2026 15:25
Base automatically changed from fix/mcp-auth-error-and-logging to master June 2, 2026 15:31
@rusackas rusackas force-pushed the fix/mcp-strict-auth branch from 747bfd2 to 967f32c Compare June 2, 2026 16:41
Copy link
Copy Markdown
Contributor

@bito-code-review bito-code-review Bot left a comment

Choose a reason for hiding this comment

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

Code Review Agent Run #2e13f4

Actionable Suggestions - 1
  • tests/unit_tests/mcp_service/test_auth_rbac.py - 1
Review Details
  • Files reviewed - 5 · Commit Range: 20d42f4..967f32c
    • superset/mcp_service/auth.py
    • superset/mcp_service/jwt_verifier.py
    • tests/unit_tests/mcp_service/test_auth_rbac.py
    • tests/unit_tests/mcp_service/test_auth_user_resolution.py
    • tests/unit_tests/mcp_service/test_jwt_verifier.py
  • Files skipped - 0
  • Tools
    • Whispers (Secret Scanner) - ✔︎ Successful
    • Detect-secrets (Secret Scanner) - ✔︎ Successful
    • MyPy (Static Code Analysis) - ✔︎ Successful
    • Astral Ruff (Static Code Analysis) - ✔︎ Successful

Bito Usage Guide

Commands

Type the following command in the pull request comment and save the comment.

  • /review - Manually triggers a full AI review.

  • /pause - Pauses automatic reviews on this pull request.

  • /resume - Resumes automatic reviews.

  • /resolve - Marks all Bito-posted review comments as resolved.

  • /abort - Cancels all in-progress reviews.

Refer to the documentation for additional commands.

Configuration

This repository uses Superset You can customize the agent settings here or contact your Bito workspace admin at evan@preset.io.

Documentation & Help

AI Code Review powered by Bito Logo

Comment thread tests/unit_tests/mcp_service/test_auth_rbac.py Outdated
@rusackas rusackas force-pushed the fix/mcp-strict-auth branch from 967f32c to bac78d7 Compare June 2, 2026 19:19
Copy link
Copy Markdown
Contributor

@bito-code-review bito-code-review Bot left a comment

Choose a reason for hiding this comment

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

Code Review Agent Run #5970fa

Actionable Suggestions - 1
  • superset/mcp_service/auth.py - 1
Additional Suggestions - 2
  • tests/unit_tests/mcp_service/test_auth_rbac.py - 2
    • Scope enforcement untested for visibility path · Line 366-480
      All 7 new scope-aware tests call `check_tool_permission` directly, bypassing `is_tool_visible_to_current_user`. However, the actual tool-list pipeline calls `is_tool_visible_to_current_user` (auth.py line 337), which internally delegates to `check_tool_permission`. If the `is_tool_visible_to_current_user` call path diverges — e.g., a future change adds logic between line 333–337 — scope enforcement on tool visibility will not be caught by these tests.
      Code suggestion
      --- a/tests/unit_tests/mcp_service/test_auth_rbac.py
      +++ b/tests/unit_tests/mcp_service/test_auth_rbac.py
       @@ -478,3 +478,43 @@ def test_scope_execute_sql_query_requires_write_scope(app_context) -> None:
                with _patch_token_scopes(["superset:read"]):
                    assert check_tool_permission(func) is False
                with _patch_token_scopes(["superset:write"]):
                    assert check_tool_permission(func) is True
      +
      +
      +def test_visibility_denied_when_token_lacks_required_scope(app_context) -> None:
      +    """is_tool_visible_to_current_user hides tool when token lacks required scope."""
      +    g.user = MagicMock(username="editor")
      +    func = _make_tool_func(class_perm="Chart", method_perm="write")
      +    tool = _make_mock_tool(fn=func)
      +
      +    mock_sm = MagicMock()
      +    mock_sm.can_access = MagicMock(return_value=True)
      +    with (
      +        patch("superset.security_manager", mock_sm),
      +        _patch_token_scopes(["superset:read"]),
      +    ):
      +        result = is_tool_visible_to_current_user(tool)
      +
      +    assert result is False
      +
      +
      +def test_visibility_allows_when_token_has_required_scope(app_context) -> None:
      +    """is_tool_visible_to_current_user shows tool when token has required scope."""
      +    g.user = MagicMock(username="editor")
      +    func = _make_tool_func(class_perm="Chart", method_perm="write")
      +    tool = _make_mock_tool(fn=func)
      +
      +    mock_sm = MagicMock()
      +    mock_sm.can_access = MagicMock(return_value=True)
      +    with (
      +        patch("superset.security_manager", mock_sm),
      +        _patch_token_scopes(["superset:read", "superset:write"]),
      +    ):
      +        result = is_tool_visible_to_current_user(tool)
      +
      +    assert result is True
      +
      +
      +def test_visibility_falls_back_to_rbac_when_no_jwt_context_for_visibility(app_context) -> None:
      +    """is_tool_visible_to_current_user shows tool when no JWT context (RBAC-only)."""
      +    g.user = MagicMock(username="editor")
      +    func = _make_tool_func(class_perm="Chart", method_perm="write")
      +    tool = _make_mock_tool(fn=func)
      +
      +    mock_sm = MagicMock()
      +    mock_sm.can_access = MagicMock(return_value=True)
      +    with (
      +        patch("superset.security_manager", mock_sm),
      +        _patch_token_scopes(None),
      +    ):
      +        result = is_tool_visible_to_current_user(tool)
      +
      +    assert result is True
    • Missing scope test for delete method permission · Line 366-480
      The `_METHOD_TO_REQUIRED_SCOPE` map at auth.py line 109 maps `delete` → `superset:write`, but the 7 new scope tests never use the `delete` method permission. Without a dedicated test, adding/changing the `delete` entry could silently break without detection.
      Code suggestion
      --- a/tests/unit_tests/mcp_service/test_auth_rbac.py
      +++ b/tests/unit_tests/mcp_service/test_auth_rbac.py
       @@ -478,3 +478,18 @@ def test_scope_execute_sql_query_requires_write_scope(app_context) -> None:
                with _patch_token_scopes(["superset:read"]):
                    assert check_tool_permission(func) is False
                with _patch_token_scopes(["superset:write"]):
                    assert check_tool_permission(func) is True
      +
      +
      +def test_scope_delete_requires_write_scope(app_context) -> None:
      +    """Delete method permission requires superset:write scope."""
      +    g.user = MagicMock(username="editor")
      +    func = _make_tool_func(class_perm="Chart", method_perm="delete")
      +
      +    mock_sm = MagicMock()
      +    mock_sm.can_access = MagicMock(return_value=True)
      +    with patch("superset.security_manager", mock_sm):
      +        with _patch_token_scopes(["superset:read"]):
      +            assert check_tool_permission(func) is False
      +        with _patch_token_scopes(["superset:write"]):
      +            assert check_tool_permission(func) is True
Filtered by Review Rules

Bito filtered these suggestions based on rules created automatically for your feedback. Manage rules.

  • superset/mcp_service/auth.py - 1
Review Details
  • Files reviewed - 5 · Commit Range: 42bec5e..b9a2004
    • superset/mcp_service/auth.py
    • superset/mcp_service/jwt_verifier.py
    • tests/unit_tests/mcp_service/test_auth_rbac.py
    • tests/unit_tests/mcp_service/test_auth_user_resolution.py
    • tests/unit_tests/mcp_service/test_jwt_verifier.py
  • Files skipped - 0
  • Tools
    • Whispers (Secret Scanner) - ✔︎ Successful
    • Detect-secrets (Secret Scanner) - ✔︎ Successful
    • MyPy (Static Code Analysis) - ✔︎ Successful
    • Astral Ruff (Static Code Analysis) - ✔︎ Successful

Bito Usage Guide

Commands

Type the following command in the pull request comment and save the comment.

  • /review - Manually triggers a full AI review.

  • /pause - Pauses automatic reviews on this pull request.

  • /resume - Resumes automatic reviews.

  • /resolve - Marks all Bito-posted review comments as resolved.

  • /abort - Cancels all in-progress reviews.

Refer to the documentation for additional commands.

Configuration

This repository uses Superset You can customize the agent settings here or contact your Bito workspace admin at evan@preset.io.

Documentation & Help

AI Code Review powered by Bito Logo

Comment thread superset/mcp_service/auth.py Outdated
@bito-code-review
Copy link
Copy Markdown
Contributor

bito-code-review Bot commented Jun 3, 2026

Code Review Agent Run #e38378

Actionable Suggestions - 0
Review Details
  • Files reviewed - 1 · Commit Range: b9a2004..0f1786a
    • superset/mcp_service/auth.py
  • Files skipped - 0
  • Tools
    • Whispers (Secret Scanner) - ✔︎ Successful
    • Detect-secrets (Secret Scanner) - ✔︎ Successful
    • MyPy (Static Code Analysis) - ✔︎ Successful
    • Astral Ruff (Static Code Analysis) - ✔︎ Successful

Bito Usage Guide

Commands

Type the following command in the pull request comment and save the comment.

  • /review - Manually triggers a full AI review.

  • /pause - Pauses automatic reviews on this pull request.

  • /resume - Resumes automatic reviews.

  • /resolve - Marks all Bito-posted review comments as resolved.

  • /abort - Cancels all in-progress reviews.

Refer to the documentation for additional commands.

Configuration

This repository uses Superset You can customize the agent settings here or contact your Bito workspace admin at evan@preset.io.

Documentation & Help

AI Code Review powered by Bito Logo

@rusackas rusackas requested a review from aminghadersohi June 5, 2026 18:09
claude and others added 7 commits June 5, 2026 15:20
…es (strict mode)

Adds config-gated, fail-closed-only-when-configured hardening to the MCP
JWT auth path, with back-compat fallbacks so unconfigured/single-service
deployments keep working:

- Audience: warn at verifier init when no audience is configured while auth
  is enabled (validation stays unchanged when an audience IS set).
- Algorithm: always reject unsigned ("none") tokens regardless of pinning;
  warn at init when no algorithm is pinned.
- Issuer binding: keep the existing username/email lookup for single-issuer
  (the verifier already pins the issuer); warn for multi-issuer configs that
  lack an issuer-aware MCP_USER_RESOLVER.
- Token scopes: enforce the intersection of token scopes and DB RBAC, but
  ONLY when the token actually advertises scopes — scope-less tokens, API
  keys and dev-mode fall back to RBAC-only behavior.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Harden the JWKS key-retrieval step in DetailedJWTVerifier so any failure
to fetch verification keys from a remote identity provider results in a
clean authentication failure (token rejected) rather than an unhandled
500. The step previously caught only ValueError, relying on the upstream
verifier to normalize all transport failures. We now also catch raw
httpx errors, asyncio timeouts, and OS-level connection errors so a
fetch failure always fails CLOSED and can never be treated as a skipped
or successful signature check.

Adds parametrized unit tests covering connect/read timeouts, connection
refused, non-200 responses, and OS errors, asserting the token is
rejected with a generic, non-leaking failure reason.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
… attribute

The factory (create_default_mcp_auth_factory) always supplies algorithm='RS256'
when MCP_JWT_ALGORITHM is unset, so self.algorithm is always truthy by the time
_warn_on_weak_jwt_config checks it — the "algorithm not pinned" warning never
fired. Fix by reading current_app.config.get('MCP_JWT_ALGORITHM') directly,
which returns None when the operator didn't explicitly configure an algorithm.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…t in MCPJWTVerifier

When MCPJWTVerifier is instantiated outside a Flask application context
(e.g. in unit tests), current_app.config.get raises RuntimeError. Guard
the config lookup with try/except and fall back to the explicit algorithm
kwarg so the weak-config warning fires correctly in both app-context and
test-context paths.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…SQL exec

Address review feedback: scope enforcement previously failed open for any
method permission absent from _METHOD_TO_REQUIRED_SCOPE, so a scoped token
could reach tools using custom permissions (notably execute_sql_query) with
no scope check. Map execute_sql_query to the write scope and deny-by-default
any unmapped method permission when a scoped token is presented, so adding a
tool with a new custom permission can no longer silently bypass scope checks.

Also move the _patch_token_scopes test helper into the contiguous helper
block so a future test inserted before its definition cannot NameError.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Drop the duplicate _sanitize_iss_for_log helper in auth.py, which was
byte-for-byte identical to sanitize_for_log in
superset/mcp_service/utils/error_sanitization.py (already used by
jwt_verifier.py). Import and reuse the shared utility to avoid divergence.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…patch target

After rebasing onto master, the merged check_tool_permission exceeded the
C901 cyclomatic complexity limit; extract the scope-denial logging into a
helper. Also correct the security_manager patch target in the scope tests
(superset.mcp_service.auth.security_manager, matching the rest of the file).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@rusackas rusackas force-pushed the fix/mcp-strict-auth branch from 0f1786a to 32546c6 Compare June 5, 2026 22:24
Copy link
Copy Markdown
Contributor

@bito-code-review bito-code-review Bot left a comment

Choose a reason for hiding this comment

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

Code Review Agent Run #912c9e

Actionable Suggestions - 2
  • superset/mcp_service/auth.py - 2
    • CWE-117: Log Injection in _log_scope_denial · Line 216-216
    • CWE-117: Log Injection in _log_scope_denial (debug path) · Line 225-225
Review Details
  • Files reviewed - 5 · Commit Range: 4699243..32546c6
    • superset/mcp_service/auth.py
    • superset/mcp_service/jwt_verifier.py
    • tests/unit_tests/mcp_service/test_auth_rbac.py
    • tests/unit_tests/mcp_service/test_auth_user_resolution.py
    • tests/unit_tests/mcp_service/test_jwt_verifier.py
  • Files skipped - 0
  • Tools
    • Whispers (Secret Scanner) - ✔︎ Successful
    • Detect-secrets (Secret Scanner) - ✔︎ Successful
    • MyPy (Static Code Analysis) - ✔︎ Successful
    • Astral Ruff (Static Code Analysis) - ✔︎ Successful

Bito Usage Guide

Commands

Type the following command in the pull request comment and save the comment.

  • /review - Manually triggers a full AI review.

  • /pause - Pauses automatic reviews on this pull request.

  • /resume - Resumes automatic reviews.

  • /resolve - Marks all Bito-posted review comments as resolved.

  • /abort - Cancels all in-progress reviews.

Refer to the documentation for additional commands.

Configuration

This repository uses Superset You can customize the agent settings here or contact your Bito workspace admin at evan@preset.io.

Documentation & Help

AI Code Review powered by Bito Logo

Comment thread superset/mcp_service/auth.py Outdated
Comment thread superset/mcp_service/auth.py Outdated
…tion

Apply _sanitize_for_log to g.user.username in both the warning and debug
branches of _log_scope_denial, consistent with how token_iss is already
sanitized in this file (CWE-117).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@bito-code-review
Copy link
Copy Markdown
Contributor

bito-code-review Bot commented Jun 6, 2026

Code Review Agent Run #7b0f95

Actionable Suggestions - 0
Review Details
  • Files reviewed - 1 · Commit Range: 32546c6..ec536cc
    • superset/mcp_service/auth.py
  • Files skipped - 0
  • Tools
    • Whispers (Secret Scanner) - ✔︎ Successful
    • Detect-secrets (Secret Scanner) - ✔︎ Successful
    • MyPy (Static Code Analysis) - ✔︎ Successful
    • Astral Ruff (Static Code Analysis) - ✔︎ Successful

Bito Usage Guide

Commands

Type the following command in the pull request comment and save the comment.

  • /review - Manually triggers a full AI review.

  • /pause - Pauses automatic reviews on this pull request.

  • /resume - Resumes automatic reviews.

  • /resolve - Marks all Bito-posted review comments as resolved.

  • /abort - Cancels all in-progress reviews.

Refer to the documentation for additional commands.

Configuration

This repository uses Superset You can customize the agent settings here or contact your Bito workspace admin at evan@preset.io.

Documentation & Help

AI Code Review powered by Bito Logo

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

Labels

authentication Related to authentication change:backend Requires changing the backend hold! On hold size/XL

Projects

Status: Needs Review

Development

Successfully merging this pull request may close these issues.

3 participants