Skip to content

fix: preserve multiline PowerShell quote state and BITS URL matching - #15

Merged
php-workx merged 3 commits into
mainfrom
fix/windows-postmerge-review
Apr 2, 2026
Merged

fix: preserve multiline PowerShell quote state and BITS URL matching#15
php-workx merged 3 commits into
mainfrom
fix/windows-postmerge-review

Conversation

@php-workx

@php-workx php-workx commented Apr 2, 2026

Copy link
Copy Markdown
Owner

Summary

Improve the follow-up Windows review fixes by preserving PowerShell quote state across lines when stripping block comments, and by recognizing positional Start-BitsTransfer source URLs.

Test Plan

  • go test ./internal/inspect -run 'TestScanPowerShell_(MultilineQuotedCommentMarkersAreLiteral|QuotedCommentMarkersAreLiteral|CommentSkipping|NestedBlockComments_ResumesAfterClose|DetectsWindowsSignals)' -count=1
  • go test ./internal/policy ./internal/core -run 'TestEvaluateBuiltins_WindowsStartBitsTransferPositionalURL|TestClassify_GoldenFixtures' -count=1
  • just check-local

Checklist

  • just dev passes
  • Tests added for new functionality
  • CHANGELOG.md updated (if user-facing)

Summary by CodeRabbit

  • Bug Fixes

    • PowerShell scanning now ignores comment markers that appear inside single- or double-quoted strings, preventing misclassification of inline markers.
    • Windows BITS Transfer detection broadened to recognize additional command-line layouts, including positional URL usage.
  • Tests

    • Added tests covering PowerShell quoted comment markers and the positional Start-BitsTransfer URL form.

@kody-ai

This comment has been minimized.

@coderabbitai

coderabbitai Bot commented Apr 2, 2026

Copy link
Copy Markdown

Walkthrough

PowerShell scanner now tracks single/double-quote state to avoid treating <#/#> and # prefixes inside quoted strings as comments, with PowerShell-specific escape handling. Start-BitsTransfer builtin regex now matches positional URL forms. Added tests and a fixture for both behaviors.

Changes

Cohort / File(s) Summary
PowerShell scanning
internal/inspect/powershell.go, internal/inspect/powershell_test.go
Track inSingleQuote/inDoubleQuote in scanning; stripPowerShellBlockComments updated to handle nested <# ... #> only when not in quotes, toggle quotes with PowerShell escape rules (doubled single quotes, backtick-escaped double quotes), and new helper to detect escaped "; added unit tests exercising quoted comment-like markers.
BITS Transfer builtin & tests
internal/policy/builtins_windows_download.go, internal/policy/policy_test.go
Expanded builtin:windows:start-bitstransfer-url regex to also match positional Start-BitsTransfer <url> <path> invocations; added unit test asserting the builtin ID match and approval decision.
Test fixtures
testdata/fixtures/commands.yaml
Added fixture entry for positional Start-BitsTransfer (source URL first) expecting APPROVAL.
🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 16.67% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title directly and clearly summarizes the two main changes: preserving PowerShell quote state and improving BITS URL matching.
Description check ✅ Passed The description covers all required template sections with adequate detail: summary explains the improvements, test plan lists specific commands, and checklist shows completed items.

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


Comment @coderabbitai help to get the list of available commands and usage tips.

@qodo-code-review

Copy link
Copy Markdown

Review Summary by Qodo

Fix PowerShell comment parsing and Start-BitsTransfer URL detection

🐞 Bug fix

Grey Divider

Walkthroughs

Description
• Improve PowerShell block comment parsing to handle quoted markers correctly
• Add quote tracking to distinguish literal comment syntax from actual comments
• Fix Start-BitsTransfer pattern to match positional URL arguments
• Add test coverage for quoted comment markers and positional arguments
Diagram
flowchart LR
  A["PowerShell Parser"] -->|"Add quote tracking"| B["stripPowerShellBlockComments"]
  B -->|"Handle escaped quotes"| C["isEscapedPowerShellDoubleQuote"]
  D["Start-BitsTransfer Pattern"] -->|"Support positional URLs"| E["Improved Regex"]
  F["Test Coverage"] -->|"Quoted markers"| G["New Tests"]
  F -->|"Positional arguments"| G
Loading

Grey Divider

File Changes

1. internal/inspect/powershell.go 🐞 Bug fix +45/-12

Add quote tracking to PowerShell comment parser

• Add inSingleQuote and inDoubleQuote flags to track quote state during parsing
• Restructure block comment detection to skip processing when inside quotes
• Handle PowerShell quote escaping with doubled single quotes ('')
• Add isEscapedPowerShellDoubleQuote() helper to detect backtick-escaped quotes

internal/inspect/powershell.go


2. internal/inspect/powershell_test.go 🧪 Tests +12/-0

Test quoted comment markers handling

• Add TestScanPowerShell_QuotedCommentMarkersAreLiteral() test case
• Verify that <# and #> inside quoted strings are treated as literal text
• Ensure malicious code after quoted markers is still detected

internal/inspect/powershell_test.go


3. internal/policy/builtins_windows_download.go 🐞 Bug fix +1/-1

Support positional URL in Start-BitsTransfer detection

• Update Start-BitsTransfer regex pattern to match both named and positional URL arguments
• Change pattern from requiring -Source flag to also accept positional syntax
• Pattern now matches Start-BitsTransfer https://... without explicit parameter names

internal/policy/builtins_windows_download.go


View more (2)
4. internal/policy/policy_test.go 🧪 Tests +15/-0

Test Start-BitsTransfer positional URL matching

• Add TestEvaluateBuiltins_WindowsStartBitsTransferPositionalURL() test
• Verify positional URL syntax triggers start-bitstransfer-url rule
• Ensure APPROVAL decision is returned for positional argument form

internal/policy/policy_test.go


5. testdata/fixtures/commands.yaml 🧪 Tests +3/-0

Add positional Start-BitsTransfer test fixture

• Add test fixture for Start-BitsTransfer with positional source argument
• Document expected APPROVAL decision for positional URL syntax

testdata/fixtures/commands.yaml


Grey Divider

Qodo Logo

@qodo-code-review

qodo-code-review Bot commented Apr 2, 2026

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (1) 📎 Requirement gaps (0)

Grey Divider


Action required

1. Start-BitsTransfer yields DecisionApproval 📘 Rule violation ⛨ Security
Description
The Windows download builtin rule explicitly returns core.DecisionApproval (and new tests/fixtures
assert APPROVAL) for Start-BitsTransfer with a positional URL. This conflicts with the
requirement that Windows builds must block APPROVAL paths instead of allowing approval-related
behavior to proceed.
Code

internal/policy/builtins_windows_download.go[R44-46]

+			Pattern: regexp.MustCompile(`(?i)\bStart-BitsTransfer\b(?:.*\s-Source\b.*https?://|\s+https?://)`),
			Action:  core.DecisionApproval,
			Reason:  "Downloads content via BITS",
Evidence
PR Compliance ID 224206 requires APPROVAL commands/flows to be blocked on Windows builds. The PR
expands the Start-BitsTransfer Windows builtin to match positional URLs while keeping `Action:
core.DecisionApproval, and adds tests/fixtures that enforce APPROVAL` for this Windows command
pattern.

Rule 224206: Block APPROVAL commands on Windows builds
internal/policy/builtins_windows_download.go[44-46]
internal/policy/policy_test.go[402-415]
testdata/fixtures/commands.yaml[240-242]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Windows-related builtins/tests were extended to produce `APPROVAL` for `Start-BitsTransfer` positional-URL downloads, but the compliance requirement says APPROVAL flows must be blocked on Windows builds.

## Issue Context
The PR updates the Windows download builtin pattern and adds new coverage asserting `APPROVAL`.

## Fix Focus Areas
- internal/policy/builtins_windows_download.go[44-46]
- internal/policy/policy_test.go[402-415]
- testdata/fixtures/commands.yaml[240-242]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

ⓘ The new review experience is currently in Beta. Learn more

Grey Divider

Qodo Logo

Comment on lines +44 to 46
Pattern: regexp.MustCompile(`(?i)\bStart-BitsTransfer\b(?:.*\s-Source\b.*https?://|\s+https?://)`),
Action: core.DecisionApproval,
Reason: "Downloads content via BITS",

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Action required

1. start-bitstransfer yields decisionapproval 📘 Rule violation ⛨ Security

The Windows download builtin rule explicitly returns core.DecisionApproval (and new tests/fixtures
assert APPROVAL) for Start-BitsTransfer with a positional URL. This conflicts with the
requirement that Windows builds must block APPROVAL paths instead of allowing approval-related
behavior to proceed.
Agent Prompt
## Issue description
Windows-related builtins/tests were extended to produce `APPROVAL` for `Start-BitsTransfer` positional-URL downloads, but the compliance requirement says APPROVAL flows must be blocked on Windows builds.

## Issue Context
The PR updates the Windows download builtin pattern and adds new coverage asserting `APPROVAL`.

## Fix Focus Areas
- internal/policy/builtins_windows_download.go[44-46]
- internal/policy/policy_test.go[402-415]
- testdata/fixtures/commands.yaml[240-242]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

@gemini-code-assist gemini-code-assist 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.

Code Review

This pull request improves PowerShell block comment stripping by accounting for string literals and updates the Start-BitsTransfer detection policy to support positional URL arguments. Feedback includes handling backtick-escaped comment markers, supporting double-double quote escaping in strings, refactoring the escape-checking logic for broader applicability, and simplifying the Start-BitsTransfer regex to be less restrictive.

Comment thread internal/inspect/powershell.go Outdated
i += 2
continue
}
if i+1 < len(line) && !inSingleQuote && !inDoubleQuote && line[i] == '<' && line[i+1] == '#' {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

medium

The PowerShell block comment marker <# can be escaped with a backtick (e.g., `<#), in which case it does not start a comment. The current implementation should check for backtick escaping to avoid incorrectly stripping code that contains an escaped marker.

Suggested change
if i+1 < len(line) && !inSingleQuote && !inDoubleQuote && line[i] == '<' && line[i+1] == '#' {
if i+1 < len(line) && !inSingleQuote && !inDoubleQuote && line[i] == '<' && line[i+1] == '#' && !isBacktickEscaped(line, i) {

Comment on lines +139 to +142
case '"':
if !inSingleQuote && !isEscapedPowerShellDoubleQuote(line, i) {
inDoubleQuote = !inDoubleQuote
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

medium

PowerShell supports escaping double quotes within double-quoted strings using a double-double quote (""), similar to how single quotes are handled. The current logic only accounts for backtick escaping (`"), which can lead to incorrect quote state tracking if "" is encountered.

		case '"':
			if !inSingleQuote {
				if inDoubleQuote && i+1 < len(line) && line[i+1] == '"' {
					b.WriteString("\"\"")
					i += 2
					continue
				}
				if !isBacktickEscaped(line, i) {
					inDoubleQuote = !inDoubleQuote
				}
			}

return b.String()
}

func isEscapedPowerShellDoubleQuote(line string, idx int) bool {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

medium

Consider renaming this function to something more generic like isBacktickEscaped. This function checks for backtick escapes which are applicable to various characters in PowerShell (like the <# comment marker), not just double quotes.

Suggested change
func isEscapedPowerShellDoubleQuote(line string, idx int) bool {
func isBacktickEscaped(line string, idx int) bool {

{
ID: "builtin:windows:start-bitstransfer-url",
Pattern: regexp.MustCompile(`(?i)\bStart-BitsTransfer\b.*\s-Source\b.*https?://`),
Pattern: regexp.MustCompile(`(?i)\bStart-BitsTransfer\b(?:.*\s-Source\b.*https?://|\s+https?://)`),

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

medium

The regex for Start-BitsTransfer is too restrictive for positional arguments. It currently only matches if the URL immediately follows the command name (with whitespace) or if the -Source parameter is explicitly used. This will fail to match if other flags (e.g., -Priority, -Description) are placed before a positional URL. A simpler and more robust approach is to match the command followed by any URL.

Suggested change
Pattern: regexp.MustCompile(`(?i)\bStart-BitsTransfer\b(?:.*\s-Source\b.*https?://|\s+https?://)`),
Pattern: regexp.MustCompile("(?i)\\bStart-BitsTransfer\\b.*https?://"),

Comment thread internal/inspect/powershell.go Outdated
Comment thread internal/inspect/powershell_test.go
{
ID: "builtin:windows:start-bitstransfer-url",
Pattern: regexp.MustCompile(`(?i)\bStart-BitsTransfer\b.*\s-Source\b.*https?://`),
Pattern: regexp.MustCompile(`(?i)\bStart-BitsTransfer\b(?:.*\s-Source\b.*https?://|\s+https?://)`),

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

kody code-review Bug medium

The regular expression for Start-BitsTransfer incorrectly matches commands where a URL is used as a destination, not a source. The pattern .*\s-Source\b.*https?:// is too broad, causing it to match a URL anywhere after the -Source flag appears, including in a -Destination parameter. This results in incorrectly flagging uploads as downloads.

Suggested change
Pattern: regexp.MustCompile(`(?i)\bStart-BitsTransfer\b(?:.*\s-Source\b.*https?://|\s+https?://)`),
Pattern: regexp.MustCompile(`(?i)\bStart-BitsTransfer\b(?:(?:.*\s)?-Source\s+['"]?https?://|\s+['"]?https?://)`),
Warning

This is an experimental feature that generates committable changes. Review the diff before applying. Results may be incorrect.

Prompt for LLM

File internal/policy/builtins_windows_download.go:

Line 44:

The following Go regular expression is intended to detect when the PowerShell command `Start-BitsTransfer` is used to download a file from an HTTP URL. It needs to handle both named parameters (e.g., `-Source http://...`) and positional parameters (e.g., `Start-BitsTransfer http://...`). However, the current regex has a flaw where it incorrectly flags uploads (e.g., `Start-BitsTransfer -Source C:\file.txt -Destination http://...`) as downloads. Please analyze the provided regex, identify the part that causes this false positive, and suggest a more precise version that correctly identifies only downloads.

Suggested Code:

Pattern: regexp.MustCompile(`(?i)\bStart-BitsTransfer\b(?:(?:.*\s)?-Source\s+['"]?https?://|\s+['"]?https?://)`),

Talk to Kody by mentioning @kody

Was this suggestion helpful? React with 👍 or 👎 to help Kody learn from this interaction.

@kody-ai kody-ai 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.

@codecov

codecov Bot commented Apr 2, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 86.95652% with 6 lines in your changes missing coverage. Please review.
✅ Project coverage is 74.52%. Comparing base (2fff5d8) to head (dcbda85).
⚠️ Report is 2 commits behind head on main.

Files with missing lines Patch % Lines
internal/inspect/powershell.go 86.66% 4 Missing and 2 partials ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main      #15      +/-   ##
==========================================
+ Coverage   74.50%   74.52%   +0.01%     
==========================================
  Files          84       84              
  Lines       10154    10185      +31     
==========================================
+ Hits         7565     7590      +25     
- Misses       2030     2034       +4     
- Partials      559      561       +2     

☔ 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.

@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

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@internal/inspect/powershell.go`:
- Around line 101-145: The bug is that inSingleQuote and inDoubleQuote are
reinitialized per line, causing multi-line PowerShell strings to be lost and
block-comment detection to misfire; move the declarations for inSingleQuote and
inDoubleQuote out of the per-line scope so their state persists across lines
(e.g., make them fields on the parser struct or function parameters that are
returned/updated), update the calling code to pass/receive these booleans (or
use pointer/struct state) and keep using isEscapedPowerShellDoubleQuote,
blockCommentDepth, and the existing loop logic unchanged so multi-line quoted
strings correctly prevent "<#" from being interpreted as a block comment start.
🪄 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: cb129895-148a-4a98-bca9-36b0bb3f492d

📥 Commits

Reviewing files that changed from the base of the PR and between 2fff5d8 and bdd2d92.

📒 Files selected for processing (5)
  • internal/inspect/powershell.go
  • internal/inspect/powershell_test.go
  • internal/policy/builtins_windows_download.go
  • internal/policy/policy_test.go
  • testdata/fixtures/commands.yaml

Comment thread internal/inspect/powershell.go Outdated
@php-workx php-workx changed the title fix(windows): close remaining PR 14 review gaps fix: preserve multiline PowerShell quote state and BITS URL matching Apr 2, 2026
@kody-ai

This comment has been minimized.

@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

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@internal/inspect/powershell.go`:
- Around line 68-77: Before mutating the quote state with
stripPowerShellBlockComments, save the current line-start quote context (e.g.,
capture inSingleQuote and inDoubleQuote into local vars like
startInSingleQuote/startInDoubleQuote) inside the loop that iterates lines; then
use those saved start-of-line flags when performing the full-line/comment
fast-path check (the logic that treats a line beginning with '#' as a comment)
so a '#' that is inside a string continued from the prior line is not
misclassified as a comment. Ensure you still call stripPowerShellBlockComments
to update the ongoing quote state after saving the start-of-line flags.
🪄 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: eb837947-a4c5-4847-be8f-cee5cd85a1da

📥 Commits

Reviewing files that changed from the base of the PR and between bdd2d92 and bb91653.

📒 Files selected for processing (2)
  • internal/inspect/powershell.go
  • internal/inspect/powershell_test.go
🚧 Files skipped from review as they are similar to previous changes (1)
  • internal/inspect/powershell_test.go

Comment thread internal/inspect/powershell.go
@kody-ai

kody-ai Bot commented Apr 2, 2026

Copy link
Copy Markdown

Kody Review Complete

Great news! 🎉
No issues were found that match your current review configurations.

Keep up the excellent work! 🚀

Kody Guide: Usage and Configuration
Interacting with Kody
  • Request a Review: Ask Kody to review your PR manually by adding a comment with the @kody start-review command at the root of your PR.

  • Validate Business Logic: Ask Kody to validate your code against business rules by adding a comment with the @kody -v business-logic command.

  • Provide Feedback: Help Kody learn and improve by reacting to its comments with a 👍 for helpful suggestions or a 👎 if improvements are needed.

Current Kody Configuration
Review Options

The following review options are enabled or disabled:

Options Enabled
Bug
Performance
Security
Cross File
Business Logic

Access your configuration settings here.

@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 (1)
internal/inspect/powershell.go (1)

141-154: Consider handling doubled double-quote escapes ("") in addition to backtick escapes.

PowerShell supports two escape mechanisms inside double-quoted strings: backtick (`") and doubled quote (""). The current code handles backtick via isEscapedPowerShellDoubleQuote but treats "" as close-then-open, which happens to work for most cases due to the double toggle. However, edge cases like "<#""..." could theoretically confuse the state.

Practical bypass impact is limited since the double-toggle often preserves signal detection, so this is optional.

Potential enhancement for doubled double-quote handling
 		case '"':
-			if !*inSingleQuote && !isEscapedPowerShellDoubleQuote(line, i) {
+			if !*inSingleQuote && !isEscapedPowerShellDoubleQuote(line, i) {
+				// Handle "" escape inside double-quoted string
+				if *inDoubleQuote && i+1 < len(line) && line[i+1] == '"' {
+					b.WriteString(`""`)
+					i += 2
+					continue
+				}
 				*inDoubleQuote = !*inDoubleQuote
 			}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@internal/inspect/powershell.go` around lines 141 - 154, The double-quote case
currently only checks isEscapedPowerShellDoubleQuote but should also treat a
doubled double-quote ("") as an escaped quote when inside a double-quoted
PowerShell string; update the '"' branch so that if not *inSingleQuote and not
isEscapedPowerShellDoubleQuote(line, i) and i+1 < len(line) && line[i+1] == '"'
then append the pair (like b.WriteString(`""`)), advance i by 2 and continue
instead of toggling *inDoubleQuote; otherwise keep the existing toggle behavior
for normal quotes. This uses the existing symbols inDoubleQuote, inSingleQuote,
isEscapedPowerShellDoubleQuote, line and i to locate and fix the logic.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@internal/inspect/powershell.go`:
- Around line 141-154: The double-quote case currently only checks
isEscapedPowerShellDoubleQuote but should also treat a doubled double-quote ("")
as an escaped quote when inside a double-quoted PowerShell string; update the
'"' branch so that if not *inSingleQuote and not
isEscapedPowerShellDoubleQuote(line, i) and i+1 < len(line) && line[i+1] == '"'
then append the pair (like b.WriteString(`""`)), advance i by 2 and continue
instead of toggling *inDoubleQuote; otherwise keep the existing toggle behavior
for normal quotes. This uses the existing symbols inDoubleQuote, inSingleQuote,
isEscapedPowerShellDoubleQuote, line and i to locate and fix the logic.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 3eec9335-9a25-43fd-bcca-7dc267448062

📥 Commits

Reviewing files that changed from the base of the PR and between bb91653 and dcbda85.

📒 Files selected for processing (2)
  • internal/inspect/powershell.go
  • internal/inspect/powershell_test.go

@php-workx
php-workx merged commit d76d87a into main Apr 2, 2026
12 checks passed
@php-workx
php-workx deleted the fix/windows-postmerge-review branch April 2, 2026 16:11
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