feat: implement issue #509 — SonarCloud: JavaScript/TypeScript code quality - #512
feat: implement issue #509 — SonarCloud: JavaScript/TypeScript code quality#512don-petry wants to merge 300 commits into
Conversation
🤖 CodeAnt AI — Review Status
|
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
ⓘ Your Qodo trial ends soon. Ask your workspace admin to set up billing to keep reviews running after the trial. Manage billing |
|
Warning Review limit reached
Next review available in: 47 minutes You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (4)
📝 WalkthroughWalkthroughThe change restricts email-header regex whitespace matching, removes obsolete calendar synchronization tests, and replaces a Gmail integration benchmark with a direct 100-item mapping benchmark. ChangesQuality fixes and test maintenance
Estimated code review effort: 2 (Simple) | ~10 minutes Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (1 warning, 1 inconclusive)
✅ Passed checks (3 passed)
✨ Finishing Touches 💡 1🛠️ Fix failing CI checks 💡
📝 Generate docstrings
🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
Code Review
This pull request removes several test cases from src/calendar-to-sheets/tests/index.test.js and updates the regex patterns in src/gas-utils.js to use [^\S\r\n]* instead of \s* at the start of lines. The review feedback notes that other instances of the \s shorthand within those regex patterns can still match newlines, potentially causing unintended multi-line matches, and suggests replacing them with horizontal whitespace [^\S\r\n].
PR Summary by QodoRefine GAS email body parsing and prune calendar-to-sheets GAS tests
AI Description
Diagram
High-Level Assessment
Files changed (2)
|
Automated activity budget exhausted — human attention neededThis PR has reached 10 automated actions (agent commits + review cycles + acks) since the last human interaction, without converging. To prevent a runaway loop (see #926 / the #860 post-mortem), all automated commits, reviews, and acknowledgements on this PR are now paused, auto-merge is disabled, and Re-engaging is human-gated. A human reviewing, commenting, or pushing to this PR resets the budget; a machine action will not. Removing |
Code Review by Qodo
1.
|
|
Auto-rebase failed — merge conflict — this branch has conflicts with dev-lead will attempt to resolve this automatically. If it cannot, a follow-up comment will explain what needs manual attention. To resolve manually instead: |
…st run and adjust tests accordingly
…ng in calendar sync
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: don-petry <36422719+don-petry@users.noreply.github.com>
Co-authored-by: don-petry <36422719+don-petry@users.noreply.github.com>
Co-authored-by: don-petry <36422719+don-petry@users.noreply.github.com>
…ub (#481) * chore: sync 4 org-standard workflow stub(s) from petry-projects/.github * chore: sync 4 org-standard workflow stub(s) from petry-projects/.github * chore: sync 4 org-standard workflow stub(s) from petry-projects/.github * chore: sync 4 org-standard workflow stub(s) from petry-projects/.github
Bumps [actions/checkout](https://github.com/actions/checkout) from 7.0.0 to 7.0.1. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](actions/checkout@9c091bb...3d3c42e) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: 7.0.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* docs: add AI-Powered Gemini Semantic Classifier feature proposal * docs: update proposal with 7-Domain Standard Taxonomy Matrix & MECE Validation * docs: add Inbox Preservation rule (processing to Drive does NOT remove from INBOX) * docs: use Single Global Processed Label marker to eliminate sidebar label duplication * docs: detail Idempotency & Single-Click Reprocessing workflows * feat: add native Gemini AI classifier and auto-filter engine module * chore: dev-lead update (review-changes) [skip ci-relay] * chore: dev-lead update (review-changes) [skip ci-relay] * chore: dev-lead update (review-changes) [skip ci-relay] * fix(ci): auto-fix for SonarCloud Code Analysis [skip ci-relay] * fix(ci): auto-fix for SonarCloud Code Analysis [skip ci-relay] * fix(ci): auto-fix for SonarCloud Code Analysis [skip ci-relay] * chore: dev-lead update (review-changes) [skip ci-relay] * fix(ci): auto-fix for SonarCloud Code Analysis [skip ci-relay] * fix(reviews): address review comments [skip ci-relay] * fix(ci): auto-fix for SonarCloud Code Analysis [skip ci-relay] * fix(ci): auto-fix for SonarCloud Code Analysis [skip ci-relay] * fix(ci): auto-fix for SonarCloud Code Analysis [skip ci-relay] * fix(ci): auto-fix for SonarCloud Code Analysis [skip ci-relay] * docs: detail Unclassified & Edge-Case email handling safety nets * feat: add native Google Apps Script GitHub Sync module (UrlFetchApp -> GitHub REST API) * chore(ci): apply prettier/eslint auto-fixes * fix(bot): address bot feedback [skip ci-relay] * fix(bot): address bot feedback [skip ci-relay] * test: add performance and scalability benchmark test suite for long documents and SHA retries * feat: enhance gitHubSync with targeted insertion and 409 SHA collision retries * chore: dev-lead update (review-changes) [skip ci-relay] * feat: add Option A multi-account user email resolution and deployment guide * chore(ci): apply prettier/eslint auto-fixes * feat: add modelEndpoint to classifier config The classifyEmailWithGemini function requires config.modelEndpoint to be defined, but it was missing from the returned config object in getClassifierConfig(). Added the Gemini 1.5 Flash model endpoint to resolve the configuration dependency. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * feat: add appsscript.json manifest for clasp deployment * chore: add .claspignore to exclude Node.js Jest test files from Apps Script runtime * fix: export getAiClassifierConfig and standalone GAS logic * fix: safe Gemini API HTTP status checking and response guards * fix: update Gemini API endpoint to gemini-2.0-flash with automatic fallbacks * feat: add listAvailableGeminiModels helper and expanded model endpoints * feat: set gemini-3.1-flash-lite as 2nd fallback endpoint * feat: add 404 auto-create note functionality with Progressive Disclosure front-matter * feat: reorder endpoints to highest-level model first and add HTTP 429 failover * feat: set Gemini 3.5 Flash Lite as primary endpoint #1 * feat: set Gemini 3.5 Flash Lite as #1 and Gemini 3.1 Flash Lite as #2 * chore: remove deprecated 1.x and 2.x Gemini models, use 3.x models only * chore: dev-lead update (review-changes) [skip ci-relay] * feat: add Family/DJ-Rachel sub-label and strict prompt classification rules * feat: exclude health newsletters and news bulletins from 04_Family_Health * feat: add setupFiveMinuteTrigger and stopAllTriggers for automated background classification * feat: map student college/career planning meetings to Family/School * feat: map MyBroodMinder alerts to 07_Community_NonProfit with sub-label Projects/Beekeeping * feat: map ParentSquare and MCAA school emails to Family/School-Toby * fix: add 2-second rate limit backoff delay on HTTP 429 and stabilize model endpoints * feat: parse and honor Retry-After header and retryDelay on HTTP 429 * chore: strictly enforce Gemini 3.x models ONLY * feat: add Gemma 4 31B (gemma-4-31b-it) as primary endpoint #1 * fix: add extractJsonSubstring helper to parse Gemma 4 31B markdown formatting * feat: exclude tech webinars and commercial store marketing from core domain tags * feat: add automated action execution (trash, archive, mark_read) and Gmail category routing --------- Co-authored-by: donpetry-bot <281750570+donpetry-bot@users.noreply.github.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com>
…eview.yml-on (#507) Co-authored-by: donpetry-bot <281750570+donpetry-bot@users.noreply.github.com>
* feat: implement issue #495 — SonarCloud: miscellaneous findings * chore(ci): apply prettier/eslint auto-fixes * fix: add AgentShield and Dependency audit to pr-auto-review workflow_run allowlist Sync the readiness-gate trigger with main and merge in upstream changes. The allowlist previously omitted two required-check workflows, so the readiness gate never re-evaluated if either was the last check to finish. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: donpetry-bot <281750570+donpetry-bot@users.noreply.github.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Rachel Petry <Rachel.L.Petry@gmail.com> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
…deation.yml-permissions (#463) * feat: implement issue #450 — Compliance: stub-surface-drift-feature-ideation.yml-permissions * chore: dev-lead update (review-changes) [skip ci-relay] --------- Co-authored-by: donpetry-bot <281750570+donpetry-bot@users.noreply.github.com> Co-authored-by: Rachel Petry <Rachel.L.Petry@gmail.com>
…(S3776, CRITICAL) (×4) (#464) * feat: implement issue #418 — SonarCloud: reduce cognitive complexity (S3776, CRITICAL) (×4) * chore: dev-lead update (review-changes) [skip ci-relay] * chore: dev-lead update (review-changes) [skip ci-relay] * fix: address SonarCloud coverage gap in deploy/index.html Extracted testable helper functions (escapeHtml, buildDeploySuccessHtml, buildDeployErrorHtml) from deploy/index.html to src/deploy/index.js with comprehensive Jest test coverage. Added 60+ test cases covering HTML escaping, success/error banner generation, and edge cases. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * fix: exclude deploy/** from SonarCloud coverage scanning deploy/index.html contains UI code that's frontend-only. The testable functions (escapeHtml, buildDeploySuccessHtml, buildDeployErrorHtml) have been extracted to src/deploy/index.js and are fully covered by tests in src/deploy/tests/index.test.js. Excluding deploy/** from SonarCloud coverage prevents false negatives on HTML UI code while preserving coverage checks for the actual tested modules. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> * chore: dev-lead update (review-changes) [skip ci-relay] * chore: dev-lead update (review-changes) [skip ci-relay] * fix(ci): auto-fix for SonarCloud Code Analysis [skip ci-relay] * fix(ci): auto-fix for SonarCloud Code Analysis [skip ci-relay] * fix(ci): auto-fix for SonarCloud Code Analysis [skip ci-relay] * fix(ci): auto-fix for SonarCloud Code Analysis [skip ci-relay] * fix(reviews): address review comments [skip ci-relay] * fix(ci): auto-fix for SonarCloud Code Analysis [skip ci-relay] * chore: dev-lead update (review-changes) [skip ci-relay] * chore: dev-lead update (review-changes) [skip ci-relay] --------- Co-authored-by: donpetry-bot <281750570+donpetry-bot@users.noreply.github.com> Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com> Co-authored-by: Rachel Petry <Rachel.L.Petry@gmail.com>
… code (#465) * Create README.md * Create code.gs * Create config.gs * Update README.md * Update README.md * enhanced Readme * ci: add CodeQL analysis workflow for PRs * feat(tests): add Jest tests, mocks, setup, and CI workflow * docs: add agents.md (canonical AGENTS.md guidance adapted) * docs: normalize to AGENTS.md and add canonical guidance * feat(calendar-to-sheets): add package implementation, tests, and README * chore(calendar-to-sheets): add GAS wrapper (code.gs) and config (config.gs); document files in README * Move scripts into src/, update tests/README/jest config, regenerate coverage * calendar-to-sheets: export GAS wrapper for testing; add test for syncAllCalendarsToSheetsGAS to handle multiple configs * Initial plan * Initial plan * Initial plan * Initial plan * Initial plan * Initial plan * Initial plan * Handle missing or malformed config gracefully - Modified getConfigs() to return legacy/default config when SYNC_CONFIGS is empty array - Added null checks in getCheckpointKey() to handle null cfg - Added null checks in syncAllCalendarsToSheetsGAS() error logging - Added comprehensive tests for empty and malformed SYNC_CONFIGS scenarios - All tests passing Co-authored-by: don-petry <36422719+don-petry@users.noreply.github.com> * Initial plan * feat(codeql): upgrade CodeQL action versions to v3 for improved analysis * feat(tests): add tests for full resync functionality and error handling in calendar sync * Initial plan * fix: remove empty lines after unused variable cleanup Co-authored-by: don-petry <36422719+don-petry@users.noreply.github.com> * Initial plan * Initial plan * Initial plan * Initial plan * fix(calendar-to-sheets): improve regex to catch leading whitespace/control chars before formula injection Co-authored-by: don-petry <36422719+don-petry@users.noreply.github.com> * test(calendar-to-sheets): cover ensureHeader path * Initial plan * Issue #24 - Add document rebuild capability to gmail-to-drive-by-labels (#25) * Initial plan * Add rebuild doc functionality to gmail-to-drive-by-labels Co-authored-by: don-petry <36422719+don-petry@users.noreply.github.com> * Address code review feedback and improve documentation clarity Co-authored-by: don-petry <36422719+don-petry@users.noreply.github.com> * Use setText('') for more efficient document clearing Co-authored-by: don-petry <36422719+don-petry@users.noreply.github.com> * Update test-utils/mocks.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/gmail-to-drive-by-labels/tests/rebuild.test.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Address code review feedback: fix imports, comments, and add error handling tests Co-authored-by: don-petry <36422719+don-petry@users.noreply.github.com> * Implement batching and resumable state for rebuild to handle large labels Co-authored-by: don-petry <36422719+don-petry@users.noreply.github.com> * Fix logging message for remaining threads calculation Co-authored-by: don-petry <36422719+don-petry@users.noreply.github.com> * Fix syntax error in mocks.js - add missing comma after setText Co-authored-by: don-petry <36422719+don-petry@users.noreply.github.com> * Add comprehensive tests for gmail-to-drive-by-labels/code.gs functions Co-authored-by: don-petry <36422719+don-petry@users.noreply.github.com> * Improve test coverage with additional edge case tests - 99.48% lines Co-authored-by: don-petry <36422719+don-petry@users.noreply.github.com> * Add istanbul ignore comments for uncoverable defensive error handling Co-authored-by: don-petry <36422719+don-petry@users.noreply.github.com> * Make rebuild batch size configurable with default of 250 Co-authored-by: don-petry <36422719+don-petry@users.noreply.github.com> * Remove istanbul ignore comments and adjust coverage threshold to 99% Co-authored-by: don-petry <36422719+don-petry@users.noreply.github.com> * Add rule to AGENTS.md prohibiting coverage ignore comments Co-authored-by: don-petry <36422719+don-petry@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: don-petry <36422719+don-petry@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * chore: add pre-commit config, commitlint, and husky hooks for code quality (#35) * Initial plan * Add TypeScript, ESLint, Prettier with CI Pipeline Co-authored-by: don-petry <36422719+don-petry@users.noreply.github.com> * Fix CI: upgrade Node.js from 18 to 20 (ESLint 10 requires Node 20+) Co-authored-by: don-petry <36422719+don-petry@users.noreply.github.com> * Fix prettier formatting in AGENTS.md Co-authored-by: don-petry <36422719+don-petry@users.noreply.github.com> * Fix createThread addLabel using arrow function with this Co-authored-by: don-petry <36422719+don-petry@users.noreply.github.com> * Update package.json Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update test-utils/mocks.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update .github/workflows/ci.yml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/calendar-to-sheets/code.gs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Upgrade jest to v30 to align with @types/jest v30 Co-authored-by: don-petry <36422719+don-petry@users.noreply.github.com> * Fix prettier CI failure, add husky pre-commit hook with shared check script Co-authored-by: don-petry <36422719+don-petry@users.noreply.github.com> * chore: add .pre-commit-config.yaml with check-merge-conflict and check-yaml hooks Co-authored-by: don-petry <36422719+don-petry@users.noreply.github.com> * Also enable typecheck in pre-commit hook Co-authored-by: don-petry <36422719+don-petry@users.noreply.github.com> * chore: add commitlint with conventional commits config and commit-msg hook Co-authored-by: don-petry <36422719+don-petry@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: don-petry <36422719+don-petry@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * chore(deps): bump github/codeql-action from 3 to 4 (#41) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3 to 4. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](github/codeql-action@v3...v4) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: '4' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump actions/checkout from 4 to 6 (#43) Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 6. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](actions/checkout@v4...v6) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * docs(agents): add guidance to resolve PR review threads after addressing comments Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add Claude Code GitHub Action (#81) * Add Claude Code GitHub Action for PR reviews * fix: address review feedback on Claude Code workflow - Restrict issue_comment trigger to PR comments only - Add author-association check (OWNER/MEMBER/COLLABORATOR) - Add pull_request_review_comment trigger - Add timeout-minutes to prevent runaway jobs Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: use CLAUDE_CODE_OAUTH_TOKEN org secret Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: add id-token: write permission for OAuth auth Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: address remaining review comments - Pin claude-code-action to commit SHA for supply-chain safety - Add fork PR guard (secrets unavailable for fork PRs) - Scope pull_request trigger to main branch - Use >- folded scalar for if expression Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: DJ <dj@Rachels-MacBook-Air.local> Co-authored-by: DJ <dj@Rachels-Air.localdomain> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: address OpenSSF Scorecard findings (#91) * fix: address OpenSSF Scorecard findings - Add SECURITY.md (#85) - Scope workflow token permissions to least privilege (#86) - Pin all GitHub Action dependencies to commit SHAs (#87) - Update vulnerable dependencies via npm audit fix (#88) - Add schedule trigger to CodeQL for full SAST coverage (#89) - Ensure CI and SAST run on all pushes and PRs (#90) Closes #85, #86, #87, #88, #89, #90 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: address PR review comments - Replace permissions: read-all with permissions: {} (deny-by-default) - Use concrete version target (main branch) in SECURITY.md Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: add actions: write permission for cache and artifact jobs Jobs using actions/cache and actions/upload-artifact need actions: write permission at the job level to function correctly with deny-by-default workflow permissions. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore(ci): apply prettier/eslint auto-fixes * chore: re-trigger CI checks * fix: use claude_code_oauth_token instead of anthropic_api_key The action has separate inputs for API keys vs OAuth tokens. CLAUDE_CODE_OAUTH_TOKEN is an OAuth token, not an API key. --------- Co-authored-by: DJ <dj@Rachels-Air.localdomain> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * chore(deps): bump anthropics/claude-code-action from 1.0.80 to 1.0.82 (#96) Bumps [anthropics/claude-code-action](https://github.com/anthropics/claude-code-action) from 1.0.80 to 1.0.82. - [Release notes](https://github.com/anthropics/claude-code-action/releases) - [Commits](anthropics/claude-code-action@094bd24...88c168b) --- updated-dependencies: - dependency-name: anthropics/claude-code-action dependency-version: 1.0.82 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * ci: skip Claude Code reviewer on Dependabot PRs (#100) * ci: skip Claude Code reviewer on Dependabot PRs The claude workflow fails on Dependabot PRs because secrets (CLAUDE_CODE_OAUTH_TOKEN) are not available to the dependabot actor. This blocks the dependabot auto-merge automation when claude is a required status check. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * ci: use PR author login instead of github.actor for Dependabot check github.actor reflects who triggered the workflow run (e.g. a maintainer reopening), not the PR author. Use github.event.pull_request.user.login for reliable Dependabot detection, consistent with dependabot-automerge.yml. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: DJ <dj@Rachels-Air.localdomain> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * ci: move Dependabot exclusion to step-level in Claude workflow (#101) * ci: move Dependabot exclusion to step-level in Claude workflow Move the dependabot[bot] check from job-level `if` to step-level `if` so the claude job runs and reports SUCCESS (with a skipped step) instead of being skipped entirely. A skipped job doesn't satisfy required status checks in branch protection, but a successful job with a skipped step does. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * ci: guard step-level Dependabot check for pull_request events only The step-level if needs to handle issue_comment and pull_request_review_comment events where github.event.pull_request is not present. Use event_name guard to avoid null dereference. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: DJ <dj@Rachels-Air.localdomain> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore: enable Claude issue trigger per org CI standard (#119) Add issues:[labeled] event trigger and claude label support so Claude can work issues autonomously — reading the issue, creating a branch, implementing the fix, and opening a PR. Changes: - Add issues:[labeled] trigger to on: block - Add issue label condition to job if: guard - Upgrade contents permission to write (needed for branch creation) - Pin claude-code-action to v1.0.89 (6e2bd528) - Add label_trigger: "claude" input - Add dependabot skip condition on step - Add permission comment for contents: write Matches the standard defined in petry-projects/.github#24. Co-authored-by: DJ <dj@Rachels-MacBook-Air.local> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: add checkout step to Claude workflow for issue-triggered mode (#120) * fix: add checkout step to Claude workflow for issue-triggered mode The claude-code-action runs git fetch/checkout internally during branch setup but requires the repository to already be cloned on the runner. Without actions/checkout, issue-triggered runs fail with: fatal: not a git repository Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * style: apply prettier formatting to claude.yml Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: DJ <dj@Rachels-MacBook-Air.local> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: add concurrency group to dependabot update workflow (#130) Prevents overlapping runs when multiple pushes to main happen in quick succession. Co-authored-by: DJ <dj@Rachels-MacBook-Air.local> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat: split Claude workflow into interactive + issue automation jobs (#132) * feat: split Claude workflow into interactive + issue automation jobs Align with org CI standard. The single `claude` job is now split into: - `claude`: interactive mode for PR reviews and @claude mentions - `claude-issue`: automation mode triggered by the `claude` label on issues, with explicit allowed tools, progress tracking, and a structured prompt that implements, opens a PR, self-reviews, checks CI, and notifies owners. Adds `actions: read` and `checks: read` permissions to both jobs. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: add concurrency guard and comment tools to claude-issue job - Add concurrency group keyed on issue number to prevent duplicate runs - Add gh pr comment and gh issue comment to allowedTools for review replies, thread resolution, and code owner tagging - Remove Bash(cat:*) since the Read tool already covers file reads Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * style: use single quotes for prettier consistency Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: DJ <dj@Rachels-MacBook-Air.local> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat: switch to org-level reusable Claude Code workflow (#134) * chore: add CODEOWNERS file for code owner review enforcement Resolves missing-codeowners compliance finding by adding .github/CODEOWNERS with @don-petry as the default owner for all files in the repository. Closes #113 Co-authored-by: don-petry <don-petry@users.noreply.github.com> * chore(workflows): adopt centralized stubs from petry-projects/.github (#149) Replace inline copies of standardized workflows with the canonical thin caller stubs from petry-projects/.github/standards/workflows/. Each stub delegates to a versioned reusable workflow at petry-projects/.github/.github/workflows/<name>-reusable.yml@v1, so future updates to the standard propagate automatically and drift is caught by the org-wide compliance audit. See petry-projects/.github#87, #88, #89 for context. Co-authored-by: DJ <dj@Rachels-MacBook-Air.local> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * ci: add codeql.yml with javascript-typescript and actions scanning (#153) Renames codeql-analysis.yml → codeql.yml to satisfy the compliance requirement (issue #103). Updates the configuration to match org standards: - Use javascript-typescript language (required for repos with package.json) - Add actions language (required for repos with .github/workflows/*.yml) - Multi-language matrix strategy with per-language category tags - Weekly schedule aligned to org standard (Friday 17:00 UTC) Closes #103 Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: don-petry <don-petry@users.noreply.github.com> * ci: add auto-rebase workflow and check_run trigger to claude.yml * add check_run trigger to claude.yml * add auto-rebase.yml workflow * chore: add bot accounts to CODEOWNERS for auto-merge support Add @petry-projects-pr-review-agent and @dependabot-automerge-petry as co-owners so their approvals satisfy require_code_owner_review in the pr-quality ruleset. * chore(deps): bump github/codeql-action from 4.35.1 to 4.35.3 (#244) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 4.35.1 to 4.35.3. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](github/codeql-action@c10b806...e46ed2c) --- updated-dependencies: - dependency-name: github/codeql-action dependency-version: 4.35.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore: standardize CODEOWNERS on @petry-projects/org-leads (#252) Per the org-wide standard defined in petry-projects/.github (standards/codeowners-standard.md), replace individual user/bot listings with the @petry-projects/org-leads team. Closes the CODEOWNERS gap from pr-review-agent#27. Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> * chore(dev-lead): remove claude.yml — replaced by dev-lead.yml (#277) * chore: ignore .dev-lead directory (#291) feat: implement issue #255 — Compliance: codeowners-no-catchall Co-authored-by: donpetry-bot <281750570+donpetry-bot@users.noreply.github.com> * ci: remove drift codeql.yml and enable GitHub-managed default setup (#216) Per ci-standards §2, the GitHub-managed default setup is the required approach for CodeQL scanning. A per-repo codeql.yml is treated as drift by the compliance audit and causes double CI billing when both run. Enabled default setup via API (state=configured, query_suite=default, run_id=24189972152). Removes the inline codeql.yml workflow file. Closes #168 Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: don-petry <don-petry@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * chore(deps-dev): bump fast-uri from 3.1.1 to 3.1.2 in the npm_and_yarn group across 1 directory (#263) chore(deps-dev): bump fast-uri Bumps the npm_and_yarn group with 1 update in the / directory: [fast-uri](https://github.com/fastify/fast-uri). Updates `fast-uri` from 3.1.1 to 3.1.2 - [Release notes](https://github.com/fastify/fast-uri/releases) - [Commits](fastify/fast-uri@v3.1.1...v3.1.2) --- updated-dependencies: - dependency-name: fast-uri dependency-version: 3.1.2 dependency-type: indirect dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: dependabot-automerge-petry[bot] <270452309+dependabot-automerge-petry[bot]@users.noreply.github.com> * feat: implement issue #254 — Compliance: codeowners-org-leads-not-first (#300) * feat: implement issue #254 — Compliance: codeowners-org-leads-not-first * ci: trigger CI for compliance PR #300 --------- Co-authored-by: donpetry-bot <281750570+donpetry-bot@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * feat: implement issue #258 — Compliance: check-suite-auto-trigger-347564 (#307) Co-authored-by: donpetry-bot <281750570+donpetry-bot@users.noreply.github.com> * feat: implement issue #442 — SonarCloud modernization (1/3): src/ app code * chore: dev-lead update (review-changes) [skip ci-relay] * chore: sync 1 org-standard workflow stub(s) from petry-projects/.github (#474) * chore: sync 1 org-standard workflow stub(s) from petry-projects/.github * chore: dev-lead update (review-changes) [skip ci-relay] * fix(bot): address bot feedback [skip ci-relay] --------- Co-authored-by: donpetry-bot <281750570+donpetry-bot@users.noreply.github.com> * chore(deps-dev): bump fast-uri from 3.1.2 to 3.1.4 in the npm_and_yarn group across 1 directory (#469) chore(deps-dev): bump fast-uri Bumps the npm_and_yarn group with 1 update in the / directory: [fast-uri](https://github.com/fastify/fast-uri). Updates `fast-uri` from 3.1.2 to 3.1.4 - [Release notes](https://github.com/fastify/fast-uri/releases) - [Commits](fastify/fast-uri@v3.1.2...v3.1.4) --- updated-dependencies: - dependency-name: fast-uri dependency-version: 3.1.4 dependency-type: indirect dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: petry-projects-dependabot-automrg[bot] <270452309+petry-projects-dependabot-automrg[bot]@users.noreply.github.com> * chore: sync 4 org-standard workflow stub(s) from petry-projects/.github (#479) * chore: sync 4 org-standard workflow stub(s) from petry-projects/.github * chore: sync 4 org-standard workflow stub(s) from petry-projects/.github * chore: sync 4 org-standard workflow stub(s) from petry-projects/.github * chore: sync 4 org-standard workflow stub(s) from petry-projects/.github * chore: sync 1 org-standard workflow stub(s) from petry-projects/.github (#489) * chore: dev-lead update (review-changes) [skip ci-relay] * chore: dev-lead update (review-changes) [skip ci-relay] --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Don Petry <don.petry@gmail.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: DJ <dj@Rachels-MacBook-Air.local> Co-authored-by: DJ <dj@Rachels-Air.localdomain> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: don-petry <don-petry@users.noreply.github.com> Co-authored-by: donpetry-bot <281750570+donpetry-bot@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: dependabot-automerge-petry[bot] <270452309+dependabot-automerge-petry[bot]@users.noreply.github.com> Co-authored-by: petry-projects-dependabot-automrg[bot] <270452309+petry-projects-dependabot-automrg[bot]@users.noreply.github.com>
…uality (#467) * feat: implement issue #428 — SonarCloud: JavaScript/TypeScript code quality * chore: dev-lead update (review-changes) [skip ci-relay] * fix(reviews): address review comments [skip ci-relay] --------- Co-authored-by: donpetry-bot <281750570+donpetry-bot@users.noreply.github.com> Co-authored-by: Rachel Petry <Rachel.L.Petry@gmail.com>
…ub (#508) * chore: sync 1 org-standard workflow stub(s) from petry-projects/.github * fix(reviews): address review comments [skip ci-relay] --------- Co-authored-by: donpetry-bot <281750570+donpetry-bot@users.noreply.github.com>
396dabb to
ace9ce2
Compare
Dev-Lead — rebase (applied)Rebase completed and pushed. |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/gmail-ai-classifier/tests/performance-scalability.test.js`:
- Around line 80-88: Replace the test-local items.map implementation in the
scalability benchmark with a call through the mocked production path, such as
processThreadBatch and its classifier/parsing logic. Ensure the benchmark
duration and result assertions measure actual production processing rather than
merely Array.prototype.map, or extract and invoke the shared production mapping
function instead.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: 17c611e8-dad2-4081-8071-e62ee9de3caf
⛔ Files ignored due to path filters (1)
package-lock.jsonis excluded by!**/package-lock.json
📒 Files selected for processing (3)
src/calendar-to-sheets/tests/index.test.jssrc/gas-utils.jssrc/gmail-ai-classifier/tests/performance-scalability.test.js
💤 Files with no reviewable changes (1)
- src/calendar-to-sheets/tests/index.test.js
Dev-Lead — review-changes (applied)Changes committed and pushed. |
Dev-Lead — review-changes (applied)Changes committed and pushed. |
|
Dev-Lead — review-changes (no-changes)No changes were needed for this PR. |



User description
Closes #509
Implemented by dev-lead agent. Please review.
CodeAnt-AI Description
Prevent email quote cleanup from matching across unrelated lines
What Changed
Impact
✅ Preserved email content during cleanup✅ More accurate removal of quoted replies💡 Usage Guide
Checking Your Pull Request
Every time you make a pull request, our system automatically looks through it. We check for security issues, mistakes in how you're setting up your infrastructure, and common code problems. We do this to make sure your changes are solid and won't cause any trouble later.
Talking to CodeAnt AI
Got a question or need a hand with something in your pull request? You can easily get in touch with CodeAnt AI right here. Just type the following in a comment on your pull request, and replace "Your question here" with whatever you want to ask:
This lets you have a chat with CodeAnt AI about your pull request, making it easier to understand and improve your code.
Example
Preserve Org Learnings with CodeAnt
You can record team preferences so CodeAnt AI applies them in future reviews. Reply directly to the specific CodeAnt AI suggestion (in the same thread) and replace "Your feedback here" with your input:
This helps CodeAnt AI learn and adapt to your team's coding style and standards.
Example
Retrigger review
Ask CodeAnt AI to review the PR again, by typing:
Check Your Repository Health
To analyze the health of your code repository, visit our dashboard at https://app.codeant.ai. This tool helps you identify potential issues and areas for improvement in your codebase, ensuring your repository maintains high standards of code health.
Summary by CodeRabbit
Bug Fixes
Tests