Skip to content

feat(versioning): version-history retention cleanup job - #41075

Merged
rusackas merged 4 commits into
apache:masterfrom
mikebridge:sc-111099-version-history-retention
Jul 28, 2026
Merged

rusackas merged 4 commits into
apache:masterfrom
mikebridge:sc-111099-version-history-retention

Conversation

@mikebridge

@mikebridge mikebridge commented Jun 15, 2026 •

Copy link
Copy Markdown
Contributor

SUMMARY

Adds a time-based version-history retention cleanup job for the entity-versioning feature. As entities (dashboards, charts, datasets and their columns/metrics) are edited, the versioning subsystem accumulates shadow rows in *_version tables plus version_transaction / version_changes records. Without pruning, those tables grow unbounded. This PR adds a daily Celery beat task that deletes version history older than a configurable window while always preserving each entity's current (live) state.

API: none (background Celery beat task). This PR adds no REST/HTTP surface — only a Celery task, a config key, an index migration, and a startup sanity check.

Depends on the entity-versioning base infrastructure (#41176), which has merged — this PR's diff is standalone.

What this adds

  • superset/tasks/version_history_retention.py — the version_history.prune_old_versions Celery task. For every version_transaction whose issued_at is older than the retention window it deletes the owned parent + child + M2M (dashboard_slices_version) shadow rows and the version_transaction row itself; version_changes rows are removed by ON DELETE CASCADE.
  • Preservation rule: if any shadow row anchored at a transaction is live (end_transaction_id IS NULL) — parent, child, or the M2M association — the whole transaction and all of its shadow/change rows are kept, regardless of age. This keeps a still-live child (e.g. an unedited column anchored at an older transaction than its parent's current row) from being silently stripped. Baseline rows (operation_type = 0) and closed historical rows age out like everything else.
  • SUPERSET_VERSION_HISTORY_RETENTION_DAYS config (default 30, read from the env var of the same name; 0 or negative disables the prune and short-circuits to a no-op). Read from the global config; a per-workspace override is a planned follow-up and is not in this PR.
  • CELERYBEAT_SCHEDULE entry version_history.prune_old_versions, daily at 03:00.
  • DB migration d3b9a1f6c204 — btree index on version_transaction.issued_at so the candidate scan is a range scan, not a full-table scan. Idempotent (create_index skips if present).
  • Startup _warn_if_retention_beat_missing check — logs a WARN when an operator's custom CELERY_CONFIG silently drops the beat entry (capture keeps writing rows but the prune never runs, so disk grows unbounded).
  • Unit + integration tests.

Safety / correctness properties

  • Idempotent: a second run finds nothing older than the cutoff that isn't preserved.
  • SERIALIZABLE isolation with bounded inline retry (3 attempts, exponential backoff) on serialization conflicts; avoids a TOCTOU window where a save committing mid-prune could drop a row that just became live.
  • Bounded per pass: drains the backlog in id-ordered windows of 1000 candidate transactions; bind-parameter lists chunked at 500 to stay inside SQLite's SQLITE_MAX_VARIABLE_NUMBER floor.
  • Observable: statsd metrics under superset.versioning.retention.* (pruned_transactions gauge per run; .skipped when disabled / no versioned classes; .retried on serialization conflict; .failed on terminal failure). Runs entirely off the save path on its own DB connection.

BEFORE/AFTER SCREENSHOTS OR ANIMATED GIF

N/A — backend-only, no UI.

TESTING INSTRUCTIONS

# Unit (metric/branch coverage: disabled, no-versioned-classes, retry, terminal failure)
pytest tests/unit_tests/tasks/test_version_history_retention.py

# Integration (backdates issued_at; asserts cutoff prune, live row + live child/M2M
# preservation, baseline ages out, serialization-retry behavior)
pytest tests/integration_tests/versioning/retention_prune_tests.py

QA NOTES

Set SUPERSET_VERSION_HISTORY_RETENTION_DAYS and back-date version_transaction.issued_at to simulate aged history:

  • Window cutoff: transactions older than the window are pruned; transactions inside the window are untouched (boundary issued_at < now - N days).
  • Live-row preservation: after pruning, every entity still has its live row (end_transaction_id IS NULL); the historical chain (including the synthetic baseline) is gone for entities not edited within the window.
  • Live child / M2M preservation (key regression): edit a dashboard so a column/metric or a dashboard_slices_version association stays live at an older transaction than the parent's current live row; confirm the prune does not delete that still-live child/association even though its anchoring transaction predates the cutoff.
  • 0 disables: set to 0 (and a negative number); confirm no-op + superset.versioning.retention.skipped, no deletions.
  • Idempotent re-run: run twice back-to-back; the second run deletes nothing (pruned_transactions == 0).
  • Batch behavior: create >1000 prunable transactions; confirm the backlog drains across windows in one invocation and the loop terminates.
  • Cascade: pruned version_transaction rows take their version_changes rows with them; no orphaned shadow rows remain.
  • Beat-missing warning: override CELERY_CONFIG without the version_history.prune_old_versions entry; confirm the startup WARN fires.
  • Migration: apply and roll back d3b9a1f6c204; confirm ix_version_transaction_issued_at is created/dropped and re-applying upgrade is safe.
  • Dialects: exercise on Postgres/MySQL and SQLite (single-writer) — bind-param chunking matters most on SQLite.

ADDITIONAL INFORMATION

  • Has associated issue:
  • Required feature flags:
  • Changes UI
  • Includes DB Migration (follow approval process in SIP-59) — adds an index on version_transaction.issued_at
  • Introduces new feature (Celery beat task + SUPERSET_VERSION_HISTORY_RETENTION_DAYS config key — no HTTP API)
  • Removes existing feature or API

Builds on #41176 (base infrastructure, merged).

@github-actions github-actions Bot added i18n Namespace | Anything related to localization risk:db-migration PRs that require a DB migration i18n:french Translation related to French language api Related to the REST API risk:ci-script PR modifies scripts that execute in CI (supply chain risk) labels Jun 15, 2026
@netlify

netlify Bot commented Jun 15, 2026 •

Copy link
Copy Markdown

✅ Deploy Preview for superset-docs-preview ready!

Name Link
🔨 Latest commit 2af1df9
🔍 Latest deploy log https://app.netlify.com/projects/superset-docs-preview/deploys/6a67101f3ffa7000081a2dfc
😎 Deploy Preview https://deploy-preview-41075--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.

@mikebridge
mikebridge force-pushed the sc-111099-version-history-retention branch 2 times, most recently from 8e13952 to e7848e7 Compare June 15, 2026 23:53
@codecov

codecov Bot commented Jun 16, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 73.88889% with 47 lines in your changes missing coverage. Please review.
✅ Project coverage is 65.26%. Comparing base (6856d0f) to head (672fbda).
⚠️ Report is 13 commits behind head on master.

Files with missing lines Patch % Lines
superset/tasks/version_history_retention.py 80.68% 20 Missing and 8 partials ⚠️
superset/config.py 37.50% 9 Missing and 1 partial ⚠️
superset/initialization/__init__.py 61.53% 2 Missing and 3 partials ⚠️
superset/mcp_service/sql_lab/tool/execute_sql.py 20.00% 4 Missing ⚠️
Additional details and impacted files
@@           Coverage Diff            @@
##           master   #41075    +/-   ##
========================================
  Coverage   65.25%   65.26%            
========================================
  Files        2795     2796     +1     
  Lines      157639   157815   +176     
  Branches    36052    36078    +26     
========================================
+ Hits       102869   102998   +129     
- Misses      52793    52827    +34     
- Partials     1977     1990    +13     
Flag Coverage Δ
hive 38.31% <8.33%> (-0.07%) ⬇️
mysql 57.59% <73.88%> (+0.03%) ⬆️
postgres 57.62% <73.88%> (+0.03%) ⬆️
presto 40.23% <8.33%> (-0.08%) ⬇️
python 59.03% <73.88%> (+0.03%) ⬆️
sqlite 57.25% <73.88%> (+0.04%) ⬆️
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.

@mikebridge
mikebridge force-pushed the sc-111099-version-history-retention branch 3 times, most recently from ac1e444 to 2979f14 Compare June 18, 2026 00:45
@github-actions github-actions Bot removed i18n Namespace | Anything related to localization i18n:french Translation related to French language labels Jun 18, 2026
@mikebridge
mikebridge force-pushed the sc-111099-version-history-retention branch 9 times, most recently from daf5db8 to 145356f Compare June 29, 2026 15:38
@mikebridge
mikebridge force-pushed the sc-111099-version-history-retention branch from 145356f to 997a89f Compare June 29, 2026 17:50
@mikebridge
mikebridge marked this pull request as ready for review June 29, 2026 17:50
mikebridge pushed a commit to mikebridge/superset that referenced this pull request Jul 13, 2026
Apply code-review fixes to the version-history retention job (apache#41075):

- Drop the version_transaction.issued_at index migration. The prune's
  candidate query (ORDER BY id LIMIT) is driven by the primary key on
  every supported engine (clustered on InnoDB, rowid on SQLite, PK index
  on Postgres) and would never choose a standalone issued_at index, which
  would only force a filesort before the LIMIT. ids are monotonic with
  issued_at, so the PK scan already reads prunable rows efficiently.
  Removing it also drops a write-blocking non-concurrent CREATE INDEX at
  deploy.
- Match the retention beat entry by each entry's `task` value, not the
  schedule key, so a task registered under a different key no longer
  triggers a spurious startup warning.
- Replace deprecated datetime.utcnow() with a tz-aware clock reduced to
  naive UTC (preserving the naive-vs-naive comparison against issued_at).
- Fix docs referencing CELERYBEAT_SCHEDULE -> CeleryConfig.beat_schedule
  (task docstring, initializer comment, UPDATING.md).
- Clarify that the OperationalError retry catch is intentionally broad
  (serialization failures plus transient DB errors, all safe to retry).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@github-actions github-actions Bot added the risk:db-migration PRs that require a DB migration label Jul 13, 2026
Comment thread superset/initialization/__init__.py Outdated
Comment thread tests/integration_tests/versioning/retention_prune_tests.py Outdated
Comment thread tests/integration_tests/versioning/retention_prune_tests.py Outdated
Comment thread tests/integration_tests/versioning/retention_prune_tests.py Outdated
Comment thread superset/tasks/version_history_retention.py Outdated
Comment thread superset/tasks/version_history_retention.py Outdated
Comment thread superset/tasks/version_history_retention.py Outdated
Comment thread superset/tasks/version_history_retention.py Outdated
Comment thread superset/tasks/version_history_retention.py Outdated
Comment thread tests/unit_tests/tasks/test_version_history_retention.py Outdated
Comment thread tests/unit_tests/tasks/test_version_history_retention.py Outdated
Comment thread tests/unit_tests/tasks/test_version_history_retention.py Outdated
Comment thread tests/unit_tests/tasks/test_version_history_retention.py Outdated
Comment thread tests/unit_tests/tasks/test_version_history_retention.py Outdated
Comment thread superset/initialization/__init__.py
Comment thread tests/integration_tests/versioning/retention_prune_tests.py
mikebridge pushed a commit to mikebridge/superset that referenced this pull request Jul 13, 2026
Apply code-review fixes to the version-history retention job (apache#41075):

- Drop the version_transaction.issued_at index migration. The prune's
  candidate query (ORDER BY id LIMIT) is driven by the primary key on
  every supported engine (clustered on InnoDB, rowid on SQLite, PK index
  on Postgres) and would never choose a standalone issued_at index, which
  would only force a filesort before the LIMIT. ids are monotonic with
  issued_at, so the PK scan already reads prunable rows efficiently.
  Removing it also drops a write-blocking non-concurrent CREATE INDEX at
  deploy.
- Match the retention beat entry by each entry's `task` value, not the
  schedule key, so a task registered under a different key no longer
  triggers a spurious startup warning.
- Replace deprecated datetime.utcnow() with a tz-aware clock reduced to
  naive UTC (preserving the naive-vs-naive comparison against issued_at).
- Fix docs referencing CELERYBEAT_SCHEDULE -> CeleryConfig.beat_schedule
  (task docstring, initializer comment, UPDATING.md).
- Clarify that the OperationalError retry catch is intentionally broad
  (serialization failures plus transient DB errors, all safe to retry).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@mikebridge
mikebridge force-pushed the sc-111099-version-history-retention branch from 922fe59 to 4acf1d9 Compare July 13, 2026 16:59

@bito-code-review bito-code-review 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.

Code Review Agent Run #072250

Actionable Suggestions - 1
  • superset/migrations/versions/2026-06-15_16-30_d3b9a1f6c204_version_transaction_issued_at_index.py - 1
Additional Suggestions - 1
  • tests/unit_tests/config_test.py - 1
    • Log capture level not configured · Line 50-60
      The `caplog` fixture captures logs at WARNING level by default, but the logger for `superset.config` may not have its level propagated in unit test contexts. Other tests in this repo use `caplog.at_level(logging.WARNING)` explicitly (see `tests/unit_tests/mcp_service/test_auth_safeguards.py:205`). Without this, the log assertion may pass inconsistently depending on pytest configuration.
Filtered by Review Rules

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

  • tests/integration_tests/versioning/retention_prune_tests.py - 2
Review Details
  • Files reviewed - 12 · Commit Range: 3b249a2..4acf1d9
    • superset/config.py
    • superset/initialization/__init__.py
    • superset/mcp_service/sql_lab/tool/execute_sql.py
    • superset/migrations/versions/2026-06-15_16-30_d3b9a1f6c204_version_transaction_issued_at_index.py
    • superset/tasks/celery_app.py
    • superset/tasks/version_history_retention.py
    • superset/versioning/queries.py
    • tests/integration_tests/versioning/retention_prune_tests.py
    • tests/unit_tests/config_test.py
    • tests/unit_tests/initialization_test.py
    • tests/unit_tests/semantic_layers/mapper_test.py
    • tests/unit_tests/tasks/test_version_history_retention.py
  • Files skipped - 1
    • UPDATING.md - Reason: Filter setting
  • Tools
    • MyPy (Static Code Analysis) - ✔︎ Successful
    • Astral Ruff (Static Code Analysis) - ✔︎ Successful
    • Whispers (Secret Scanner) - ✔︎ Successful
    • Detect-secrets (Secret Scanner) - ✔︎ 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

@mikebridge
mikebridge force-pushed the sc-111099-version-history-retention branch from 4acf1d9 to 3d75452 Compare July 13, 2026 22:24
Comment thread superset/config.py Outdated
Comment thread superset/initialization/__init__.py Outdated
Comment thread tests/integration_tests/versioning/retention_prune_tests.py Outdated
Comment thread tests/integration_tests/versioning/retention_prune_tests.py Outdated
Comment thread tests/integration_tests/versioning/retention_prune_tests.py Outdated
Comment thread tests/unit_tests/initialization_test.py Outdated
Comment thread tests/unit_tests/initialization_test.py Outdated
Comment thread tests/unit_tests/initialization_test.py Outdated
Comment thread tests/unit_tests/migrations/test_version_transaction_issued_at_index.py Outdated
Comment thread superset/config.py
@mikebridge
mikebridge force-pushed the sc-111099-version-history-retention branch 2 times, most recently from b415827 to db87a6b Compare July 14, 2026 01:10
@bito-code-review

bito-code-review Bot commented Jul 14, 2026 •

Copy link
Copy Markdown
Contributor

Code Review Agent Run #30a403

Actionable Suggestions - 0
Additional Suggestions - 2
  • superset/config.py - 1
    • Silent under-clamp on oversized retention · Line 1614-1622
      `retention_days > _MAX_VERSION_HISTORY_RETENTION_DAYS` returns the default (30 days) instead of the maximum. A user who intentionally sets a large value silently receives 30-day retention — a 1,000× discrepancy with only a warning log. Clamp to `_MAX_VERSION_HISTORY_RETENTION_DAYS` to make overflow visible and proportional to intent.
  • superset/mcp_service/sql_lab/tool/execute_sql.py - 1
    • Missing docstring on new helper · Line 247-265
      Update the docstring of `_log_execution_result` to include detailed descriptions for `response` and `ctx` parameters, and outline its behavior on success and failure.
Filtered by Review Rules

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

  • tests/unit_tests/tasks/test_version_history_retention.py - 2
  • tests/unit_tests/migrations/test_version_transaction_issued_at_index.py - 1
Review Details
  • Files reviewed - 13 · Commit Range: fc51b23..db87a6b
    • superset/config.py
    • superset/initialization/__init__.py
    • superset/mcp_service/sql_lab/tool/execute_sql.py
    • superset/migrations/versions/2026-06-15_16-30_d3b9a1f6c204_version_transaction_issued_at_index.py
    • superset/tasks/celery_app.py
    • superset/tasks/version_history_retention.py
    • superset/versioning/queries.py
    • tests/integration_tests/versioning/retention_prune_tests.py
    • tests/unit_tests/config_test.py
    • tests/unit_tests/initialization_test.py
    • tests/unit_tests/migrations/test_version_transaction_issued_at_index.py
    • tests/unit_tests/semantic_layers/mapper_test.py
    • tests/unit_tests/tasks/test_version_history_retention.py
  • Files skipped - 1
    • UPDATING.md - Reason: Filter setting
  • Tools
    • MyPy (Static Code Analysis) - ✔︎ Successful
    • Astral Ruff (Static Code Analysis) - ✔︎ Successful
    • Whispers (Secret Scanner) - ✔︎ Successful
    • Detect-secrets (Secret Scanner) - ✔︎ 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 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Good timing, #41176 landed, so this isn't stacked anymore, diff looks simpler. One thing I'm not following though why are execute_sql.py and the semantic_layers/mapper_test.py tweaks are in here, or if either related to the retention job. Maybe bycatch, or just part of the bigger plan?

@rusackas rusackas left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Good timing, #41176 landed, so this isn't stacked anymore, diff looks simpler. One thing I'm not following though why are execute_sql.py and the semantic_layers/mapper_test.py tweaks are in here, or if either related to the retention job. Maybe bycatch, or just part of the bigger plan?

Mike Bridge and others added 2 commits July 27, 2026 08:58
A Celery beat task that prunes version_transaction / version_changes /
shadow rows beyond the configured retention window, so the version tables
don't grow unbounded once capture is enabled. Preserves live child/M2M rows,
batches the deletes with bind/retry hardening, and adds an index on
version_transaction.issued_at for the prune scan. Stacked on the versioning
base infrastructure (apache#41176).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Apply review fixes to the version-history retention job: retain and document the issued_at index based on planner testing, add migration contract tests, match Celery beat entries by task value, use timezone-aware UTC, correct configuration documentation, and clarify retry handling.
@mikebridge
mikebridge force-pushed the sc-111099-version-history-retention branch from db87a6b to 2af1df9 Compare July 27, 2026 08:00
Comment thread tests/unit_tests/tasks/test_version_history_retention.py
Comment thread superset/mcp_service/sql_lab/tool/execute_sql.py
Comment thread superset/versioning/queries.py Outdated
The SQLAlchemy 2.0 enforcement added on master turns the implicit-
autocommit RemovedIn20Warning into an error; run the migration DDL
under engine.begin() instead of a bare connection.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

@bito-code-review bito-code-review 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.

Code Review Agent Run #4b8916

Actionable Suggestions - 1
  • tests/integration_tests/versioning/retention_prune_tests.py - 1
Filtered by Review Rules

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

  • tests/integration_tests/versioning/retention_prune_tests.py - 5
Review Details
  • Files reviewed - 13 · Commit Range: 2038b41..77b4c56
    • superset/config.py
    • superset/initialization/__init__.py
    • superset/mcp_service/sql_lab/tool/execute_sql.py
    • superset/migrations/versions/2026-07-27_10-00_d3b9a1f6c204_version_transaction_issued_at_index.py
    • superset/tasks/celery_app.py
    • superset/tasks/version_history_retention.py
    • superset/versioning/queries.py
    • tests/integration_tests/versioning/retention_prune_tests.py
    • tests/unit_tests/config_test.py
    • tests/unit_tests/initialization_test.py
    • tests/unit_tests/migrations/test_version_transaction_issued_at_index.py
    • tests/unit_tests/semantic_layers/mapper_test.py
    • tests/unit_tests/tasks/test_version_history_retention.py
  • Files skipped - 1
    • UPDATING.md - Reason: Filter setting
  • Tools
    • MyPy (Static Code Analysis) - ✔︎ Successful
    • Astral Ruff (Static Code Analysis) - ✔︎ Successful
    • Whispers (Secret Scanner) - ✔︎ Successful
    • Detect-secrets (Secret Scanner) - ✔︎ 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/integration_tests/versioning/retention_prune_tests.py Outdated
Replace the three deprecated datetime.utcnow() call sites in the prune
tests with the naive-UTC form the fourth site already uses, and soften
the version-number loop docstring: transactions still anchoring a live
row survive past the retention window, bounded by entity size rather
than edit volume.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@bito-code-review

bito-code-review Bot commented Jul 27, 2026 •

Copy link
Copy Markdown
Contributor

Code Review Agent Run #76f279

Actionable Suggestions - 0
Filtered by Review Rules

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

  • tests/integration_tests/versioning/retention_prune_tests.py - 1
Review Details
  • Files reviewed - 2 · Commit Range: 77b4c56..672fbda
    • superset/versioning/queries.py
    • tests/integration_tests/versioning/retention_prune_tests.py
  • Files skipped - 0
  • Tools
    • MyPy (Static Code Analysis) - ✔︎ Successful
    • Astral Ruff (Static Code Analysis) - ✔︎ Successful
    • Whispers (Secret Scanner) - ✔︎ Successful
    • Detect-secrets (Secret Scanner) - ✔︎ 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 merged commit a73e248 into apache:master Jul 28, 2026
60 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk:db-migration PRs that require a DB migration size/XXL

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants