carson 2.20.0 → 2.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1baa45e25838165768104a260d5641a4f3cfe25fbfe3f7c1d430a9d62dc53cf1
4
- data.tar.gz: 99ea0d1c0ba2b332cd10c599ea472f8b2d0b1ca016bfc73ec879f421b32dffae
3
+ metadata.gz: 9dee8662b3f59ea5f375d5c0dac6c774dc7b7202ca88e3457344fef3ae0cdce9
4
+ data.tar.gz: bb1c5b9605b13f3ca64d3ea31f915a38980532c8a2f21b215979f5475562b2bb
5
5
  SHA512:
6
- metadata.gz: f746f1fb2d74940e0e5b21d6ab0a9d5857aa78972453202016345214b5b77504792ab490ac5afda8028b1b2b07618d0451c4a996a004ca2e1908c29a3de82c78
7
- data.tar.gz: 95ad47ab82a4a617d6fe590c2ead6e15c8b11e36695e0039447158f35c07790fa001997bfc180f56cc441387a32e259af19d0ef02b3d01580d9a449d1ff337ee
6
+ metadata.gz: a5de52e709279bcd53d54244cd04cb01041c4f81c84d857dec19b6970925ca7bf91321494dd6dd21ce9fb8deb09e8a2ed7c41a6d5c3b95b6aa9095e1628c2adb
7
+ data.tar.gz: dc945ebe5c2a391dbacd4e530637430a4f3ee65eb07a8de23d162af13cc1da9d376ad056f6f1ca081c1ae5c41bce076ec8e36348e0afdb4a066eee3fdf83c01c
data/MANUAL.md CHANGED
@@ -345,6 +345,7 @@ Common environment overrides:
345
345
  | `CARSON_REVIEW_DISPOSITION_PREFIX` | Required prefix for disposition comments. |
346
346
  | `CARSON_REVIEW_SWEEP_WINDOW_DAYS` | Lookback window for review sweep. |
347
347
  | `CARSON_REVIEW_SWEEP_STATES` | PR states to include in sweep. |
348
+ | `CARSON_REVIEW_BOT_USERNAMES` | Comma-separated bot usernames to ignore in review gate and sweep. |
348
349
  | `CARSON_WORKFLOW_STYLE` | Workflow style override (`branch` or `trunk`). |
349
350
  | `CARSON_RUBY_INDENTATION` | Ruby indentation policy (`tabs`, `spaces`, or `either`). |
350
351
 
data/RELEASE.md CHANGED
@@ -5,6 +5,13 @@ Release-note scope rule:
5
5
  - `RELEASE.md` records only version deltas, breaking changes, and migration actions.
6
6
  - Operational usage guides live in `MANUAL.md` and `API.md`.
7
7
 
8
+ ## 2.21.0 — Review Sweep Skips Bot Authors
9
+
10
+ ### What changed
11
+
12
+ - **Review sweep now skips bot-authored findings.** The sweep uses the same `bot_username?` guard as the review gate — comments, reviews, and review thread comments from configured bot usernames are excluded from sweep findings.
13
+ - **Default bot usernames populated.** `review.bot_usernames` now ships with `gemini-code-assist[bot]`, `github-actions[bot]`, and `dependabot[bot]`. Previously empty, requiring manual configuration. Override via `CARSON_REVIEW_BOT_USERNAMES` or `~/.carson/config.json`.
14
+
8
15
  ## 2.20.0 — Prune Orphan Branches
9
16
 
10
17
  ### What changed
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.20.0
1
+ 2.21.0
data/lib/carson/config.rb CHANGED
@@ -59,7 +59,7 @@ module Carson
59
59
  "style" => "branch"
60
60
  },
61
61
  "review" => {
62
- "bot_usernames" => [],
62
+ "bot_usernames" => [ "gemini-code-assist[bot]", "github-actions[bot]", "dependabot[bot]" ],
63
63
  "wait_seconds" => 10,
64
64
  "poll_seconds" => 15,
65
65
  "max_polls" => 20,
@@ -27,6 +27,7 @@ module Carson
27
27
 
28
28
  Array( details.fetch( :comments ) ).each do |comment|
29
29
  next if comment.fetch( :author ) == pr_author
30
+ next if bot_username?( author: comment.fetch( :author ) )
30
31
  hits = matched_risk_keywords( text: comment.fetch( :body ) )
31
32
  next if hits.empty?
32
33
  event_time = parse_time_or_nil( text: comment.fetch( :created_at ) )
@@ -43,6 +44,7 @@ module Carson
43
44
 
44
45
  Array( details.fetch( :reviews ) ).each do |review|
45
46
  next if review.fetch( :author ) == pr_author
47
+ next if bot_username?( author: review.fetch( :author ) )
46
48
  hits = matched_risk_keywords( text: review.fetch( :body ) )
47
49
  next if hits.empty?
48
50
  event_time = parse_time_or_nil( text: review.fetch( :created_at ) )
@@ -59,6 +61,7 @@ module Carson
59
61
 
60
62
  Array( details.fetch( :review_threads ) ).flat_map { |thread| thread.fetch( :comments ) }.each do |comment|
61
63
  next if comment.fetch( :author ) == pr_author
64
+ next if bot_username?( author: comment.fetch( :author ) )
62
65
  hits = matched_risk_keywords( text: comment.fetch( :body ) )
63
66
  next if hits.empty?
64
67
  event_time = parse_time_or_nil( text: comment.fetch( :created_at ) )
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: carson
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.20.0
4
+ version: 2.21.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hailei Wang