Skip to content

[Chore] Start CodeRabbit review once Ubuntu tests pass - #1581

Draft
zoomote[bot] wants to merge 1 commit into
mainfrom
chore/coderabbit-after-ubuntu-tests-1t718s4phlzit
Draft

zoomote[bot] wants to merge 1 commit into
mainfrom
chore/coderabbit-after-ubuntu-tests-1t718s4phlzit

Conversation

@zoomote

@zoomote zoomote Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

​Created by Roomote. Follow up by mentioning @roomote, in the web UI, or in Discord.

Related GitHub Issue

Requested by a maintainer in Discord (no tracking issue): CodeRabbit review currently waits for the entire required CI matrix, including the slow Windows test jobs, before it starts.

Description

The review-state reconciliation in label-pr-review-state.yml only activated CodeRabbit after every required check passed. This change keeps the full-CI gate (state labels, Zoo Code / PR review gate status, review-guide messaging) exactly as it is, but computes a separate activation condition in the CI-pending branch: CodeRabbit is activated once all required checks except the Windows test jobs (platform-unit-test (windows-…)) have concluded successfully, provided nothing — including Windows — has failed.

Details reviewers may care about:

  • Windows jobs are identified by a /\(windows-[^)]*\)/ match on the required check context, matching the platform-unit-test (windows-latest) matrix job in code-qa.yml.
  • On early activation the guide comment records the existing coderabbit-review-label:<sha> marker, so when the remaining Windows jobs later go green the already-bound activation is kept instead of being recycled (which would re-trigger CodeRabbit on the same commit). An activation label left over from an older head is still recycled.
  • Fail-closed behavior is preserved: Ubuntu (or any other non-Windows required check) pending/failed, a failed Windows run, or unavailable branch rules all keep CodeRabbit deactivated.

Test Procedure

  • pnpm --dir src exec vitest run services/__tests__/pr-review-state-workflow.test.ts — 111 tests pass, including new coverage for: activation when Ubuntu passed and Windows is still running, no activation while Ubuntu is pending, no activation when Ubuntu failed, no activation when Windows failed, no recycling of an early activation bound to the current head, recycling from an older head, and unchanged all-tests-passed behavior.
  • pnpm --dir src run check-types — clean.
  • Full pnpm test from the repo root — passes (10/10 turbo tasks).
  • Pre-commit hooks (prettier + full lint) pass.

Pre-Submission Checklist

  • Issue Linked: This PR is linked to an approved GitHub Issue (see "Related GitHub Issue" above).
  • Scope: My changes are focused on the linked issue (one major feature/fix per PR).
  • Self-Review: I have performed a thorough self-review of my code.
  • Testing: New and/or updated tests have been added to cover my changes (if applicable).
  • Visual Snapshot (UI changes only): If a user would notice this change at a glance (layout, theme tokens, brand elements, empty/error states), I've added or updated a *.visual.tsx snapshot in webview-ui/. See webview-ui/AGENTS.md → "When a UI change needs a snapshot".
  • Documentation Impact: I have considered if my changes require documentation updates (see "Documentation Updates" section below).
  • Contribution Guidelines: I have read and agree to the Contributor Guidelines.

Documentation Updates

  • No documentation updates are required. (Internal CI/review automation behavior only.)

Additional Notes

The state machine phases, maintainerApprovedAfterAutomatedReview ordering, and gate descriptions are intentionally untouched; only the timing of the coderabbit-review-active label changes.

Get in Touch

Roomote (bot) — reach the requesting maintainer via the linked Discord thread above.

@coderabbitai

coderabbitai Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are limited based on label configuration.

🏷️ Required labels (at least one) (1)
  • coderabbit-review-active

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: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 627eb9d8-905b-4039-8ad3-c0bf6fc3d90b

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

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.

@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Review status

This PR was opened by an automated account. A human maintainer must verify the change intent, provenance, and validation before merging.

Current step: Mark the PR ready. Required CI must pass before CodeRabbit starts.

Review-state labels are managed by this workflow; do not edit them manually.

@codecov

codecov Bot commented Sep 9, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@edelauna

Copy link
Copy Markdown
Contributor

@coderabbitai configuration

@coderabbitai

coderabbitai Bot commented Sep 13, 2026

Copy link
Copy Markdown
Contributor

Configuration used: Path: .coderabbit.yaml

CodeRabbit configuration
# Source: Repository YAML (base)
language: en-US
# Source: Repository YAML (base)
tone_instructions: Be direct and evidence-first. Report only concrete, actionable findings grounded in changed code. Prioritize correctness, security, data loss, lifecycle, and regressions; avoid speculative style comments and unrelated refactors.
# Source: defaults
early_access: false
# Source: defaults
enable_free_tier: true
# Source: defaults
inheritance: false
reviews:
  # Source: Repository YAML (base)
  profile: assertive
  # Source: Repository YAML (base)
  request_changes_workflow: true
  # Source: Repository YAML (base)
  high_level_summary: true
  # Source: defaults
  high_level_summary_instructions: ''
  # Source: defaults
  high_level_summary_placeholder: '`@coderabbitai` summary'
  # Source: Repository YAML (base)
  high_level_summary_in_walkthrough: true
  # Source: defaults
  auto_title_placeholder: '`@coderabbitai`'
  # Source: defaults
  auto_title_instructions: ''
  # Source: Repository YAML (base)
  review_status: true
  # Source: Repository YAML (base)
  review_details: true
  # Source: defaults
  review_progress: true
  # Source: defaults
  commit_status: true
  # Source: defaults
  fail_commit_status: false
  # Source: Repository YAML (base)
  collapse_walkthrough: true
  # Source: Repository YAML (base)
  changed_files_summary: true
  # Source: defaults
  sequence_diagrams: true
  # Source: defaults
  estimate_code_review_effort: true
  # Source: defaults
  assess_linked_issues: true
  # Source: defaults
  related_issues: true
  # Source: defaults
  related_prs: true
  # Source: defaults
  suggested_labels: true
  # Source: defaults
  labeling_instructions: []
  # Source: defaults
  mutually_exclusive_groups: {}
  # Source: defaults
  auto_apply_labels: false
  # Source: defaults
  suggested_reviewers: true
  # Source: defaults
  auto_assign_reviewers: false
  # Source: defaults
  suggested_reviewers_instructions: []
  # Source: defaults
  in_progress_fortune: true
  # Source: Repository YAML (base)
  poem: false
  # Source: defaults
  enable_prompt_for_ai_agents: true
  # Source: Repository YAML (base)
  path_filters:
    - '!**/node_modules/**'
    - '!**/dist/**'
    - '!**/out/**'
    - '!**/coverage/**'
    - '!**/.turbo/**'
    - '!apps/vscode-e2e/.vscode-test/**'
    - '!bin/*.vsix'
    - '!webview-ui/**/__screenshots__/**'
  # Source: Repository YAML (base)
  path_instructions:
    - path: '**/*'
      instructions: Act as an adversarial second-opinion reviewer. Verify PR claims against implementation and contracts. Trace changed inputs through normal, boundary, error, cancellation, retry, and default paths and their consumers. Seek plausible counterexamples and regressions from removed safeguards. Identify assumptions in changed code that depend on facts outside the diff. First verify repository conventions, tests, and related implementations. When a potential finding depends on external behavior, use web search and prefer official documentation, specifications, or upstream repositories. Report only concrete, actionable conflicts or failure modes, citing the relevant repository location or external source. Prioritize correctness, security, data loss, lifecycle, and test gaps. Do not report generic best practices, unsupported concerns, speculative style comments, or unrelated refactors. Search for existing helpers before suggesting abstractions.
    - path: '**/*.{ts,tsx,js,jsx,mts,mjs,cts,cjs}'
      instructions: Check strict typing and exhaustive behavior across normal, boundary, error, cancellation, retry, and compatibility paths. Verify promises and errors are handled, existing helpers are reused, and new code introduces no `any`, unjustified double assertions, floating promises, duplicated helpers, or increased lint suppressions. When a refactor adds early-return guards that redirect a subset of inputs to a new code path, confirm the old branches for those inputs are removed or unreachable.
    - path: '{**/*.{test,spec}.{ts,tsx,js,jsx},**/__tests__/**}'
      instructions: 'Require regression coverage at the lowest valid harness with behavior-focused assertions, including relevant negative, error, false/unset, and boundary cases. Check cleanup and deterministic async behavior and prefer shared typed test helpers. Visible webview changes require a durable Playwright component snapshot; behavior-only changes do not. Reject weak assertions on values that could take multiple forms: .toBeDefined() or .toHaveBeenCalled() alone are not sufficient when the actual type, value, or object identity is verifiable. For listener registration and removal, assert the same function reference was added and removed (not expect.any(Function)). Flag tests that assert in-flight behavior only after the call completes — these cannot prove the behavior fires during execution. Check that describe block names match the actual subjects of the tests they contain. For tests that assert only mock call counts, confirm a corresponding return-value assertion exists; a regression that silently returns stale fallback data can satisfy a call-count check. For code with fallback behavior, verify both the cold-start case (no prior state) and the warm case (prior state exists) are covered, as they exercise different branches.'
    - path: apps/vscode-e2e/**
      instructions: Reserve end-to-end coverage for behavior that requires the real VS Code host, workspace APIs, extension activation, webview messaging, file watchers, or a full workflow. Keep detailed protocol, parsing, storage, retry, and edge cases at lower test layers.
    - path: '{packages/types/src/**,webview-ui/src/components/settings/**,src/core/config/**,src/core/webview/**}'
      instructions: For persisted settings, verify the complete schema/storage/runtime/webview round trip, shared default semantics, and focused true plus false/unset tests. SettingsView controls must read and update local `cachedState`, include the value in the explicit save payload, and receive the persisted value back from extension state.
    - path: src/**
      instructions: Verify extension/webview contracts, cancellation and error propagation, VS Code lifecycle correctness, and behavior under retries and partial failure. Check listeners, resources, and providers are disposed without stale state or duplicate work.
    - path: webview-ui/**
      instructions: Check React state and effect dependencies, cleanup, accessibility, i18n, and light/dark theme behavior. New markup should use Tailwind; add VS Code CSS variables to `src/index.css` before Tailwind use. Use Vitest for behavior and Playwright component snapshots only for durable visible changes.
    - path: '{src/api/**,src/core/prompts/**,src/core/tools/**,src/services/mcp/**,src/services/destructive-command-guard/**}'
      instructions: Treat model, provider, MCP, path, command, and tool data as untrusted. Check approval and allowlist bypasses, injection and traversal risks, secrets/PII exposure in logs, abort and stream behavior, retries, provider compatibility, and enforcement at execution time—not only at presentation or planning time.
    - path: '{src/**/{state,history,task,tasks,service,services,cache,caches,worktree,worktrees}/**,packages/**/{state,history,task,tasks,service,services,cache,caches,worktree,worktrees}/**,webview-ui/src/**/{state,history,task,tasks,service,services,cache,caches,worktree,worktrees}/**}'
      instructions: 'Check persistence and lifecycle invariants: awaited atomic writes, rollback or explicit partial-failure behavior, cross-window state consistency, stale listeners/watchers, cancellation, idempotency, and safe restart/resume without lost or duplicated state. For async functions that read shared mutable state before an `await` and write it back after, verify the captured reference is still valid when the write executes; a concurrent mutation during the await can cause a stale snapshot to overwrite a newer state.'
    - path: .github/**
      instructions: Require full commit SHA pins, least-privilege permissions, safe expression and shell interpolation, and trusted metadata handling. Privileged workflows must never check out, execute, install from, or otherwise trust a fork PR head.
    - path: '{AGENTS.md,**/AGENTS.md,CONTRIBUTING.md,.changeset/**,CHANGELOG.md,src/CHANGELOG.md}'
      instructions: 'Enforce repository policy: routine PRs must not add changesets or edit changelogs except during release preparation. Verify documentation describes real behavior and contracts, and deprioritize prose-only nits that do not affect correctness or usability.'
  # Source: defaults
  abort_on_close: true
  # Source: defaults
  disable_cache: false
  slop_detection:
    # Source: defaults
    enabled: true
    # Source: defaults
    include_all_authors: false
  auto_review:
    # Source: Repository YAML (base)
    enabled: false
    # Source: defaults
    description_keyword: ''
    # Source: Repository YAML (base)
    auto_incremental_review: true
    # Source: Repository YAML (base)
    auto_pause_after_reviewed_commits: 0
    # Source: defaults
    ignore_title_keywords: []
    # Source: Repository YAML (base)
    labels:
      - coderabbit-review-active
    # Source: Repository YAML (base)
    drafts: false
    # Source: defaults
    base_branches: []
    # Source: defaults
    ignore_usernames: []
  finishing_touches:
    docstrings:
      # Source: Repository YAML (base)
      enabled: false
    unit_tests:
      # Source: defaults
      enabled: true
    simplify:
      # Source: defaults
      enabled: false
    autofix:
      # Source: defaults
      enabled: true
    fix_ci:
      # Source: defaults
      enabled: true
    resolve_merge_conflict:
      # Source: defaults
      enabled: true
    # Source: defaults
    custom: []
  pre_merge_checks:
    # Source: Repository YAML (base)
    override_requested_reviewers_only: true
    docstrings:
      # Source: Repository YAML (base)
      mode: 'off'
      # Source: defaults
      threshold: 80
    title:
      # Source: Repository YAML (base)
      mode: warning
      # Source: defaults
      requirements: ''
    description:
      # Source: Repository YAML (base)
      mode: warning
    issue_assessment:
      # Source: Repository YAML (base)
      mode: warning
    # Source: Repository YAML (base)
    custom_checks:
      - mode: warning
        name: Regression evidence
        instructions: Fail only when a concrete changed behavior lacks focused coverage at the lowest valid test layer, tests merely mirror implementation, an affected error/negative/unset branch is omitted, or a durable visible UI change lacks its required Playwright component snapshot. Do not demand tests for unchanged behavior, mechanical configuration, or every branch without a plausible regression scenario. Cite the changed behavior and missing evidence.
      - mode: error
        name: Security boundaries
        instructions: Fail only when a concrete changed path leaks secrets or PII, trusts or executes unvalidated input, or bypasses approval or allowlist controls. Cite the changed path and a plausible triggering scenario; pass when no such changed path exists.
      - mode: error
        name: Persistence integrity
        instructions: Fail only when a concrete changed persistence path can lose or corrupt state because an operation is not awaited, a write is non-atomic, rollback or explicit partial-failure behavior is missing, or a persisted default is not propagated to a consumer. Cite the changed path and a plausible triggering scenario; pass when no such changed path exists.
      - mode: error
        name: Lifecycle resource cleanup
        instructions: Fail only when a concrete changed lifecycle path can leak a listener, watcher, provider, timer, task, or other resource, or can duplicate work after cancellation, disposal, or restart. Cite the changed path and a plausible triggering scenario; pass when no such changed path exists.
  # Source: defaults
  post_merge_actions: []
  tools:
    ast-grep:
      # Source: defaults
      rule_dirs: []
      # Source: defaults
      util_dirs: []
      # Source: defaults
      essential_rules: true
      # Source: defaults
      packages: []
    shellcheck:
      # Source: Repository YAML (base)
      enabled: true
    ruff:
      # Source: defaults
      enabled: true
    markdownlint:
      # Source: defaults
      enabled: true
    github-checks:
      # Source: Repository YAML (base)
      enabled: true
    languagetool:
      # Source: defaults
      enabled: true
      # Source: defaults
      enabled_rules: []
      # Source: defaults
      disabled_rules: []
      # Source: defaults
      enabled_categories: []
      # Source: defaults
      disabled_categories: []
      # Source: defaults
      enabled_only: false
      # Source: defaults
      level: default
    biome:
      # Source: defaults
      enabled: true
    hadolint:
      # Source: defaults
      enabled: true
    swiftlint:
      # Source: defaults
      enabled: true
    phpstan:
      # Source: defaults
      enabled: true
      # Source: defaults
      level: default
    phpmd:
      # Source: defaults
      enabled: true
    phpcs:
      # Source: defaults
      enabled: true
    golangci-lint:
      # Source: defaults
      enabled: true
    yamllint:
      # Source: defaults
      enabled: true
    gitleaks:
      # Source: Repository YAML (base)
      enabled: true
    trufflehog:
      # Source: defaults
      enabled: true
    checkov:
      # Source: defaults
      enabled: true
    tflint:
      # Source: defaults
      enabled: true
    detekt:
      # Source: defaults
      enabled: true
    eslint:
      # Source: Repository YAML (base)
      enabled: true
      e18e:
        # Source: defaults
        enabled: true
    flake8:
      # Source: defaults
      enabled: true
    fbinfer:
      # Source: defaults
      enabled: true
      # Source: defaults
      enable_java: false
    fortitudeLint:
      # Source: defaults
      enabled: true
    rubocop:
      # Source: defaults
      enabled: true
    buf:
      # Source: defaults
      enabled: true
    regal:
      # Source: defaults
      enabled: true
    actionlint:
      # Source: Repository YAML (base)
      enabled: true
    zizmor:
      # Source: defaults
      enabled: true
    pmd:
      # Source: defaults
      enabled: true
    clang:
      # Source: defaults
      enabled: true
    cppcheck:
      # Source: defaults
      enabled: true
    vale:
      # Source: defaults
      enabled: true
    verilator:
      # Source: defaults
      enabled: true
    opengrep:
      # Source: defaults
      enabled: true
    semgrep:
      # Source: Repository YAML (base)
      enabled: true
    circleci:
      # Source: defaults
      enabled: true
    clippy:
      # Source: defaults
      enabled: true
    sqlfluff:
      # Source: defaults
      enabled: true
    squawk:
      # Source: defaults
      enabled: true
    trivy:
      # Source: defaults
      enabled: true
    prismaLint:
      # Source: defaults
      enabled: true
    pylint:
      # Source: defaults
      enabled: true
    oxc:
      # Source: defaults
      enabled: true
    shopifyThemeCheck:
      # Source: defaults
      enabled: true
    luacheck:
      # Source: defaults
      enabled: true
    brakeman:
      # Source: defaults
      enabled: true
    dotenvLint:
      # Source: defaults
      enabled: true
    htmlhint:
      # Source: defaults
      enabled: true
    stylelint:
      # Source: defaults
      enabled: true
    checkmake:
      # Source: defaults
      enabled: true
    osvScanner:
      # Source: defaults
      enabled: true
    oasdiff:
      # Source: defaults
      enabled: true
    reactDoctor:
      # Source: defaults
      enabled: true
    presidio:
      # Source: defaults
      enabled: true
    blinter:
      # Source: defaults
      enabled: true
    smartyLint:
      # Source: defaults
      enabled: true
    emberTemplateLint:
      # Source: defaults
      enabled: true
    skillspector:
      # Source: defaults
      enabled: true
    psscriptanalyzer:
      # Source: defaults
      enabled: true
chat:
  # Source: defaults
  art: true
  # Source: Repository YAML (base)
  allow_non_org_members: false
  # Source: defaults
  auto_reply: true
  integrations:
    jira:
      # Source: defaults
      usage: auto
      # Source: defaults
      issue_template: ''
    linear:
      # Source: defaults
      usage: auto
knowledge_base:
  # Source: defaults
  opt_out: false
  web_search:
    # Source: Repository YAML (base)
    enabled: true
  code_guidelines:
    # Source: defaults
    enabled: true
    # Source: defaults
    filePatterns: []
  learnings:
    # Source: Repository YAML (base)
    scope: local
    # Source: defaults
    approval_delay: 0
  issues:
    # Source: defaults
    scope: auto
  jira:
    # Source: defaults
    usage: auto
    # Source: defaults
    project_keys: []
    # Source: defaults
    excluded_project_keys: []
  linear:
    # Source: defaults
    usage: auto
    # Source: defaults
    team_keys: []
  pull_requests:
    # Source: defaults
    scope: auto
  mcp:
    # Source: defaults
    usage: auto
    # Source: defaults
    disabled_servers: []
  # Source: defaults
  automatic_linking_mode: disabled
  # Source: defaults
  automatic_repository_linking: false
  # Source: defaults
  linked_repositories: []
code_generation:
  docstrings:
    # Source: defaults
    language: en-US
    # Source: defaults
    path_instructions: []
  unit_tests:
    # Source: defaults
    path_instructions: []
issue_enrichment:
  auto_enrich:
    # Source: defaults
    enabled: false
  planning:
    # Source: defaults
    enabled: true
    auto_planning:
      # Source: defaults
      enabled: true
      # Source: defaults
      labels: []
  labeling:
    # Source: defaults
    labeling_instructions: []
    # Source: defaults
    auto_apply_labels: false

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.

2 participants