Skip to content

fix(cli): allow explicit true/false values on all boolean flags and remove dead code - #210

Merged
nh13 merged 1 commit into
mainfrom
nh/fix_bool-flags
Mar 31, 2026
Merged

nh13 merged 1 commit into
mainfrom
nh/fix_bool-flags

Conversation

@nh13

@nh13 nh13 commented Mar 31, 2026 •

Copy link
Copy Markdown
Member

Summary

  • Fix all boolean CLI flags across every command (including feature-gated commands) to accept explicit --flag=true and --flag=false values, matching fgbio/sopt behavior. Previously, flags using ArgAction::SetTrue with default_value = "true" were stuck permanently on — passing --flag false or --flag=false would error or be ignored.
  • Remove the --regenerate-tags flag from the clip command entirely. This was dead code — it was hidden, always true, and had no way to disable it. fgbio's ClipBam never had this flag either; NM/UQ/MD tag regeneration is unconditional.
  • Add CLI parsing tests to verify all boolean flags accept bare, =true, =false, space-separated, and default forms.

Changes

Boolean flag fix (all commands):

  • Changed action from ArgAction::SetTrue/SetFalse to ArgAction::Set
  • Added num_args = 0..=1 and default_missing_value so bare --flag still works
  • Affected commands: clip, codec, common (consensus/overlapping/queue-memory options), compare/bams, dedup, downsample, duplex-metrics, fastq, filter, review, simplex, sort, zipper

Dead code removal (clip):

  • Removed --regenerate-tags field, log line, doc string reference, and all test references

New tests:

  • common.rs: 24 rstest cases covering --output-per-base-tags, --trim, --consensus-call-overlapping-bases, --queue-memory-per-thread (bare, =true, =false, space-separated, default)
  • filter.rs: 18 rstest cases in 3 separate per-flag functions covering --reverse-per-base-tags, --filter-by-template, --require-single-strand-agreement
  • zipper.rs: 12 rstest cases covering --exclude-missing-reads, --skip-pa-tags

Test plan

  • cargo ci-test — all 2052 tests pass
  • cargo ci-fmt — clean
  • cargo ci-lint — clean
  • Verified backwards compatibility: --flag (bare) still works as before
  • Verified --flag=false now correctly disables flags that default to true
  • Verified --flag=true equals form works identically to space-separated form

@nh13
nh13 temporarily deployed to github-actions March 31, 2026 05:51 — with GitHub Actions Inactive
@codecov

codecov Bot commented Mar 31, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 88.05%. Comparing base (90ec6fe) to head (7222648).
⚠️ Report is 2 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #210      +/-   ##
==========================================
- Coverage   88.06%   88.05%   -0.02%     
==========================================
  Files         113      113              
  Lines       52820    52762      -58     
==========================================
- Hits        46518    46460      -58     
  Misses       6302     6302              

☔ View full report in Codecov by Sentry.
📢 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.

@nh13
nh13 marked this pull request as ready for review March 31, 2026 05:53
@nh13

nh13 commented Mar 31, 2026

Copy link
Copy Markdown
Member Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Mar 31, 2026

Copy link
Copy Markdown
✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai

coderabbitai Bot commented Mar 31, 2026 •

Copy link
Copy Markdown

Warning

Rate limit exceeded

@nh13 has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 18 minutes and 56 seconds before requesting another review.

Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 18 minutes and 56 seconds.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: d8b535e5-3dd7-4885-98ae-a9f25b5ac54d

📥 Commits

Reviewing files that changed from the base of the PR and between e629a12 and 7222648.

📒 Files selected for processing (11)
  • src/commands/clip.rs
  • src/commands/common.rs
  • src/commands/compare/bams.rs
  • src/commands/dedup.rs
  • src/commands/downsample.rs
  • src/commands/duplex_metrics.rs
  • src/commands/fastq.rs
  • src/commands/filter.rs
  • src/commands/review.rs
  • src/commands/sort.rs
  • src/commands/zipper.rs
📝 Walkthrough

Walkthrough

This PR standardizes boolean CLI flags across multiple command modules. Many flags were changed to accept an optional value via num_args = 0..=1, use default_missing_value = "true", and action = clap::ArgAction::Set, preserving prior default_value. The regenerate-tags Clip flag was removed and related tests adjusted; new parsing tests were added for several flags.

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed Title clearly and specifically describes the main changes: fixing boolean CLI flags to accept explicit values and removing dead code.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Description check ✅ Passed PR description clearly describes the changes: fixing boolean CLI flags to accept explicit true/false values, removing dead code from clip command, and adding tests.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch nh/fix_bool-flags

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 and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (2)
src/commands/filter.rs (1)

150-170: Add parser coverage for these bool forms.

The tests here validate runtime behavior, but they build Filter directly, so they never exercise the CLI contract this change is introducing. A small Filter::try_parse_from matrix for bare / true / false would lock these flags down cheaply.

As per coding guidelines, "Place unit tests alongside source code in src/ directory" and "Use rstest for parameterized tests".

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/commands/filter.rs` around lines 150 - 170, Add unit tests exercising the
CLI parsing of the boolean flags by calling Filter::try_parse_from with a small
parameterized matrix for the three forms (bare flag present, --flag=true,
--flag=false) to verify reverse_per_base_tags, filter_by_template, and
require_single_strand_agreement parse correctly; put tests next to
src/commands/filter.rs using rstest to generate the combinations and assert the
resulting Filter struct fields match expected booleans for each input vector,
covering default, explicit true, and explicit false cases.
src/commands/common.rs (1)

107-112: Add one wrapper-parser test for the shared optional bool args.

These Args are only tested via direct struct construction right now, so the exact regression this PR is fixing can slip back in unnoticed. A tiny test-only Parser wrapper covering bare / true / false cases would pin the behavior once, especially for --queue-memory-per-thread false.

As per coding guidelines, "Place unit tests alongside source code in src/ directory" and "Use rstest for parameterized tests".

Also applies to: 217-218, 454-455

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/commands/common.rs` around lines 107 - 112, Add a unit test next to src/
that creates a tiny test-only clap Parser wrapper around the existing Args
struct (the struct holding output_per_base_tags and trim) and use rstest to
parameterize three cases for each optional-boolean flag: absent (bare), "--flag
true", and "--flag false" (e.g., test for output_per_base_tags, trim and
similarly for --queue-memory-per-thread), asserting the parsed field values
match expected booleans; place tests in src/ and derive clap::Parser on the
wrapper so the clap parsing behavior is exercised rather than constructing Args
directly.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/commands/clip.rs`:
- Around line 119-120: The regenerate_tags boolean is parsed but ignored: code
paths that currently log and perform tag regeneration must be guarded by the new
flag; wrap the unconditional logging and regeneration calls with a check of
self.regenerate_tags (e.g. if self.regenerate_tags { ... }) so both the log
message and the actual tag-regeneration code only run when the flag is true, and
update the log text to reflect the actual value of self.regenerate_tags instead
of always stating regeneration occurred. Ensure every place that previously
unconditionally invoked tag regeneration uses this guard and that no hidden flag
remains disableable but ignored.

---

Nitpick comments:
In `@src/commands/common.rs`:
- Around line 107-112: Add a unit test next to src/ that creates a tiny
test-only clap Parser wrapper around the existing Args struct (the struct
holding output_per_base_tags and trim) and use rstest to parameterize three
cases for each optional-boolean flag: absent (bare), "--flag true", and "--flag
false" (e.g., test for output_per_base_tags, trim and similarly for
--queue-memory-per-thread), asserting the parsed field values match expected
booleans; place tests in src/ and derive clap::Parser on the wrapper so the clap
parsing behavior is exercised rather than constructing Args directly.

In `@src/commands/filter.rs`:
- Around line 150-170: Add unit tests exercising the CLI parsing of the boolean
flags by calling Filter::try_parse_from with a small parameterized matrix for
the three forms (bare flag present, --flag=true, --flag=false) to verify
reverse_per_base_tags, filter_by_template, and require_single_strand_agreement
parse correctly; put tests next to src/commands/filter.rs using rstest to
generate the combinations and assert the resulting Filter struct fields match
expected booleans for each input vector, covering default, explicit true, and
explicit false cases.
🪄 Autofix (Beta)

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: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: b52b5017-5d9e-4370-a4f6-50c1d1521ad6

📥 Commits

Reviewing files that changed from the base of the PR and between 53463ca and b4549e3.

📒 Files selected for processing (11)
  • src/commands/clip.rs
  • src/commands/common.rs
  • src/commands/compare/bams.rs
  • src/commands/dedup.rs
  • src/commands/downsample.rs
  • src/commands/duplex_metrics.rs
  • src/commands/fastq.rs
  • src/commands/filter.rs
  • src/commands/review.rs
  • src/commands/sort.rs
  • src/commands/zipper.rs

Comment thread src/commands/clip.rs Outdated
@nh13
nh13 force-pushed the nh/fix_bool-flags branch from b4549e3 to 528bd0d Compare March 31, 2026 06:06
@nh13
nh13 temporarily deployed to github-actions March 31, 2026 06:06 — with GitHub Actions Inactive
@nh13
nh13 force-pushed the nh/fix_bool-flags branch from 528bd0d to e629a12 Compare March 31, 2026 06:17
@nh13
nh13 temporarily deployed to github-actions March 31, 2026 06:17 — with GitHub Actions Inactive
@nh13 nh13 changed the title Allow explicit true/false values on all boolean CLI flags fix(cli): allow explicit true/false values on all boolean flags and remove dead code Mar 31, 2026
@nh13

nh13 commented Mar 31, 2026

Copy link
Copy Markdown
Member Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Mar 31, 2026

Copy link
Copy Markdown
✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🧹 Nitpick comments (3)
src/commands/zipper.rs (1)

168-176: Consider parser-level tests for these two flags.

You already validate runtime behavior; adding CLI parse tests for bare and equals forms would lock in this contract (--flag, --flag=true, --flag=false).

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/commands/zipper.rs` around lines 168 - 176, Add parser-level unit tests
that verify CLI parsing for the boolean flags represented by the fields
exclude_missing_reads and skip_pa_tags: cover absent (default false), bare flag
form (--exclude-missing-reads, --skip-pa-tags), and equals forms
(--exclude-missing-reads=true/false, --skip-pa-tags=true/false). Locate the
argument parser instantiation used to populate those fields (the clap-derived
struct or function that parses args for zipper) and add tests that call that
parser with the different argv variants and assert the resulting struct fields
are true/false as expected. Ensure tests exercise both the short/bare and
explicit equals syntaxes to lock the CLI contract.
src/commands/common.rs (1)

1122-1164: Add --flag=<bool> cases to lock the exact contract.

Current tests cover --flag false, but not the explicit equals form (--flag=false) called out in the PR objective.

Suggested test additions
 #[case(&["test", "--output-per-base-tags", "false"], false)]
+#[case(&["test", "--output-per-base-tags=false"], false)]
 fn test_output_per_base_tags_parsing(#[case] args: &[&str], #[case] expected: bool) {

 #[case(&["test", "--trim", "false"], false)]
+#[case(&["test", "--trim=false"], false)]
 fn test_trim_parsing(#[case] args: &[&str], #[case] expected: bool) {

 #[case(&["test", "--consensus-call-overlapping-bases", "false"], false)]
+#[case(&["test", "--consensus-call-overlapping-bases=false"], false)]
 fn test_overlapping_bases_parsing(#[case] args: &[&str], #[case] expected: bool) {

 #[case(&["test", "--queue-memory-per-thread", "false"], false)]
+#[case(&["test", "--queue-memory-per-thread=false"], false)]
 fn test_queue_memory_per_thread_parsing(#[case] args: &[&str], #[case] expected: bool) {
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/commands/common.rs` around lines 1122 - 1164, The boolean-flag parsing
tests (test_output_per_base_tags_parsing, test_trim_parsing,
test_overlapping_bases_parsing, test_queue_memory_per_thread_parsing) currently
check space-separated and positional "false"/"true" forms but miss the explicit
equals form (--flag=false / --flag=true); update each TestBoolFlags invocation
to add cases with the equals syntax (e.g. "--output-per-base-tags=false" and
"--output-per-base-tags=true" for consensus.output_per_base_tags;
"--trim=false"/"=true" for consensus.trim;
"--consensus-call-overlapping-bases=false"/"=true" for
overlapping.consensus_call_overlapping_bases; and
"--queue-memory-per-thread=false"/"=true" for
queue_memory.queue_memory_per_thread) so the tests lock the exact CLI contract.
src/commands/filter.rs (1)

3952-3981: Add --flag=<bool> cases and remove contains(...) dispatch in the test.

Current cases don’t directly cover the exact --flag=false/--flag=true form from the PR goal, and the contains-based branch on Line 3969 is fragile.

Proposed test hardening
 #[rstest]
-#[case(&["filter", "-i", "in.bam", "-o", "out.bam", "-M", "1", "--reverse-per-base-tags"], true)]
-#[case(&["filter", "-i", "in.bam", "-o", "out.bam", "-M", "1", "--reverse-per-base-tags", "true"], true)]
-#[case(&["filter", "-i", "in.bam", "-o", "out.bam", "-M", "1", "--reverse-per-base-tags", "false"], false)]
-#[case(&["filter", "-i", "in.bam", "-o", "out.bam", "-M", "1"], false)]
+#[case(&["filter", "-i", "in.bam", "-o", "out.bam", "-M", "1"], false, true, false)]
+#[case(&["filter", "-i", "in.bam", "-o", "out.bam", "-M", "1", "--reverse-per-base-tags"], true, true, false)]
+#[case(&["filter", "-i", "in.bam", "-o", "out.bam", "-M", "1", "--reverse-per-base-tags=true"], true, true, false)]
+#[case(&["filter", "-i", "in.bam", "-o", "out.bam", "-M", "1", "--reverse-per-base-tags=false"], false, true, false)]
 #[case(&["filter", "-i", "in.bam", "-o", "out.bam", "-M", "1", "--filter-by-template"], true)]
-#[case(&["filter", "-i", "in.bam", "-o", "out.bam", "-M", "1", "--filter-by-template", "true"], true)]
-#[case(&["filter", "-i", "in.bam", "-o", "out.bam", "-M", "1", "--filter-by-template", "false"], false)]
+#[case(&["filter", "-i", "in.bam", "-o", "out.bam", "-M", "1", "--filter-by-template=true"], false, true, false)]
+#[case(&["filter", "-i", "in.bam", "-o", "out.bam", "-M", "1", "--filter-by-template=false"], false, false, false)]
 #[case(&["filter", "-i", "in.bam", "-o", "out.bam", "-M", "1", "--require-single-strand-agreement"], true)]
-#[case(&["filter", "-i", "in.bam", "-o", "out.bam", "-M", "1", "--require-single-strand-agreement", "false"], false)]
-fn test_bool_flag_parsing(#[case] args: &[&str], #[case] expected: bool) {
+#[case(&["filter", "-i", "in.bam", "-o", "out.bam", "-M", "1", "--require-single-strand-agreement=true"], false, true, true)]
+#[case(&["filter", "-i", "in.bam", "-o", "out.bam", "-M", "1", "--require-single-strand-agreement=false"], false, true, false)]
+fn test_bool_flag_parsing(
+    #[case] args: &[&str],
+    #[case] expected_reverse: bool,
+    #[case] expected_template: bool,
+    #[case] expected_ssa: bool,
+) {
     let cmd = Filter::try_parse_from(args).unwrap();
-    // Determine which flag was under test by checking which non-default args are present
-    if args.iter().any(|a| a.contains("reverse-per-base-tags")) {
-        assert_eq!(cmd.reverse_per_base_tags, expected);
-    } else if args.iter().any(|a| a.contains("filter-by-template")) {
-        assert_eq!(cmd.filter_by_template, expected);
-    } else if args.iter().any(|a| a.contains("require-single-strand-agreement")) {
-        assert_eq!(cmd.require_single_strand_agreement, expected);
-    } else {
-        // Default case (no bool flags specified): check defaults
-        assert!(!cmd.reverse_per_base_tags);
-        assert!(cmd.filter_by_template);
-        assert!(!cmd.require_single_strand_agreement);
-    }
+    assert_eq!(cmd.reverse_per_base_tags, expected_reverse);
+    assert_eq!(cmd.filter_by_template, expected_template);
+    assert_eq!(cmd.require_single_strand_agreement, expected_ssa);
 }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/commands/filter.rs` around lines 3952 - 3981, The test
test_bool_flag_parsing is fragile because it uses args.iter().any(|a|
a.contains(...)) to decide which flag to assert and it lacks explicit
--flag=true/false forms; update the cases to include exact
"--reverse-per-base-tags=true"/"--reverse-per-base-tags=false",
"--filter-by-template=true"/"--filter-by-template=false", and
"--require-single-strand-agreement=true"/"...=false" variants, and replace the
contains-based dispatch with explicit per-case identification (e.g., add a third
#[case_flag] parameter or encode the flag name in the case) so the test directly
asserts the corresponding Filter field (reverse_per_base_tags,
filter_by_template, require_single_strand_agreement) after parsing via
Filter::try_parse_from(args).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@src/commands/common.rs`:
- Around line 1122-1164: The boolean-flag parsing tests
(test_output_per_base_tags_parsing, test_trim_parsing,
test_overlapping_bases_parsing, test_queue_memory_per_thread_parsing) currently
check space-separated and positional "false"/"true" forms but miss the explicit
equals form (--flag=false / --flag=true); update each TestBoolFlags invocation
to add cases with the equals syntax (e.g. "--output-per-base-tags=false" and
"--output-per-base-tags=true" for consensus.output_per_base_tags;
"--trim=false"/"=true" for consensus.trim;
"--consensus-call-overlapping-bases=false"/"=true" for
overlapping.consensus_call_overlapping_bases; and
"--queue-memory-per-thread=false"/"=true" for
queue_memory.queue_memory_per_thread) so the tests lock the exact CLI contract.

In `@src/commands/filter.rs`:
- Around line 3952-3981: The test test_bool_flag_parsing is fragile because it
uses args.iter().any(|a| a.contains(...)) to decide which flag to assert and it
lacks explicit --flag=true/false forms; update the cases to include exact
"--reverse-per-base-tags=true"/"--reverse-per-base-tags=false",
"--filter-by-template=true"/"--filter-by-template=false", and
"--require-single-strand-agreement=true"/"...=false" variants, and replace the
contains-based dispatch with explicit per-case identification (e.g., add a third
#[case_flag] parameter or encode the flag name in the case) so the test directly
asserts the corresponding Filter field (reverse_per_base_tags,
filter_by_template, require_single_strand_agreement) after parsing via
Filter::try_parse_from(args).

In `@src/commands/zipper.rs`:
- Around line 168-176: Add parser-level unit tests that verify CLI parsing for
the boolean flags represented by the fields exclude_missing_reads and
skip_pa_tags: cover absent (default false), bare flag form
(--exclude-missing-reads, --skip-pa-tags), and equals forms
(--exclude-missing-reads=true/false, --skip-pa-tags=true/false). Locate the
argument parser instantiation used to populate those fields (the clap-derived
struct or function that parses args for zipper) and add tests that call that
parser with the different argv variants and assert the resulting struct fields
are true/false as expected. Ensure tests exercise both the short/bare and
explicit equals syntaxes to lock the CLI contract.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: f1207d68-734c-487d-8a61-5093712617a9

📥 Commits

Reviewing files that changed from the base of the PR and between b4549e3 and e629a12.

📒 Files selected for processing (11)
  • src/commands/clip.rs
  • src/commands/common.rs
  • src/commands/compare/bams.rs
  • src/commands/dedup.rs
  • src/commands/downsample.rs
  • src/commands/duplex_metrics.rs
  • src/commands/fastq.rs
  • src/commands/filter.rs
  • src/commands/review.rs
  • src/commands/sort.rs
  • src/commands/zipper.rs
🚧 Files skipped from review as they are similar to previous changes (7)
  • src/commands/compare/bams.rs
  • src/commands/downsample.rs
  • src/commands/duplex_metrics.rs
  • src/commands/sort.rs
  • src/commands/fastq.rs
  • src/commands/dedup.rs
  • src/commands/clip.rs

Boolean flags using `default_value` with clap's default `SetTrue` action
rejected explicit values like `--flag true` or `--flag false`. This was
especially broken for 5 flags defaulting to true (--output-per-base-tags,
--consensus-call-overlapping-bases, --queue-memory-per-thread,
--filter-by-template, --regenerate-tags) which were stuck permanently
on with no way to disable them.

Adds `action = ArgAction::Set, num_args = 0..=1, default_missing_value
= "true"` to all 22 boolean flags, matching sopt/fgbio behavior where
both `--flag` (implies true) and `--flag=false` (explicit) are accepted.

Backwards compatible: existing `--flag` usage continues to work.
@nh13
nh13 force-pushed the nh/fix_bool-flags branch from e629a12 to 7222648 Compare March 31, 2026 06:30
@nh13
nh13 temporarily deployed to github-actions March 31, 2026 06:30 — with GitHub Actions Inactive
@nh13

nh13 commented Mar 31, 2026

Copy link
Copy Markdown
Member Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Mar 31, 2026

Copy link
Copy Markdown
✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@nh13
nh13 merged commit 481f2d4 into main Mar 31, 2026
7 checks passed
@nh13
nh13 deleted the nh/fix_bool-flags branch March 31, 2026 06:36
@nh13 nh13 mentioned this pull request Mar 31, 2026

This branch was previously deployed

1 inactive deployment
github-actions — 7222648a Deployed Mar 31, 2026 by nh13 via coverage #790
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.

1 participant