Skip to content

fix: make install scripts usable immediately without terminal restart#433

Merged
Aureliolo merged 2 commits intomainfrom
fix/install-script-path
Mar 15, 2026
Merged

fix: make install scripts usable immediately without terminal restart#433
Aureliolo merged 2 commits intomainfrom
fix/install-script-path

Conversation

@Aureliolo
Copy link
Copy Markdown
Owner

Summary

  • PowerShell (install.ps1): update session $env:PATH independently of the persistent user PATH check, so synthorg works immediately after install — both on first install and re-runs where the persistent PATH already has it but the session doesn't
  • Bash (install.sh): warn when custom INSTALL_DIR is not in PATH and print the exact export command needed (default /usr/local/bin is typically already in PATH, so most users won't see the warning)

Problem

  • PowerShell: after install, synthorg init fails with "not recognized" because the script only set the registry-level user PATH without updating the current session. Re-running the script also didn't help — the persistent PATH check passed (already added from first run), skipping the entire block silently.
  • Bash: when using a custom INSTALL_DIR outside of PATH, the script gave no indication that the binary wouldn't be found.

Test plan

  • Run irm .../install.ps1 | iex in a fresh PowerShell session → synthorg version works immediately without restart
  • Re-run the same install command in the same session → still works (session PATH updated on re-runs too)
  • Run INSTALL_DIR=/tmp/synthorg-test curl ... | bash → warning printed with correct export command
  • Run bash installer without custom INSTALL_DIR (default /usr/local/bin) → no warning shown

Review coverage

Quick mode — automated checks only (no substantive code changes, shell scripts only)

🤖 Generated with Claude Code

PowerShell: update session $env:PATH after setting persistent user PATH
so 'synthorg' works immediately. Handles both first install and re-runs
where persistent PATH already has the directory but the session doesn't.

Bash: warn when custom INSTALL_DIR is not in PATH and print the exact
export command needed (default /usr/local/bin is typically already in PATH).
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 15, 2026

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

Scanned Files

None

@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request enhances the user experience for synthorg CLI installations by addressing immediate usability issues across both PowerShell and Bash environments. It ensures that the synthorg command is instantly accessible after installation, eliminating the need for manual terminal restarts or troubleshooting PATH configurations.

Highlights

  • PowerShell PATH Update: The install.ps1 script was updated to immediately add the installation directory to the current PowerShell session's $env:PATH, ensuring synthorg is usable without requiring a terminal restart.
  • Bash PATH Warning: The install.sh script now includes a check to warn users if a custom INSTALL_DIR is not in their PATH and provides the exact export command needed to add it.
Changelog
  • cli/scripts/install.ps1
    • Added logic to update the current PowerShell session's $env:PATH with the installation directory.
    • Modified the Write-Host message to remove the instruction about restarting the terminal.
  • cli/scripts/install.sh
    • Implemented a check to determine if the INSTALL_DIR is present in the user's PATH.
    • Added a warning message and an export command suggestion if INSTALL_DIR is not in PATH.
Activity
  • The pull request was generated using Claude Code.
  • The review process is set to 'Quick mode,' focusing on automated checks due to the nature of the changes (shell scripts only, no substantive code changes).
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Mar 15, 2026

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 54dba8aa-1130-4c60-82ea-2981e6b2a59e

📥 Commits

Reviewing files that changed from the base of the PR and between 3a9ed37 and eaf1d74.

📒 Files selected for processing (2)
  • cli/scripts/install.ps1
  • cli/scripts/install.sh

📝 Walkthrough

Summary by CodeRabbit

  • Chores
    • Improved PowerShell installer: installation now ensures the installed binary is normalized against PATH and is added to the current session immediately without prompting for a restart.
    • Improved shell installer: added a post-installation PATH check and clear guidance for exporting the install directory if it isn’t already on PATH, so users can make the change permanent.

Walkthrough

PowerShell and Bash installer scripts were updated to improve PATH handling and user guidance: PowerShell now normalizes InstallDir, performs exact-match checks, updates user PATH and the current process PATH without restart messaging; Bash adds a post-install warning with export instructions if INSTALL_DIR is absent from PATH.

Changes

Cohort / File(s) Summary
PowerShell installer
cli/scripts/install.ps1
Normalize InstallDir (trim trailing backslashes), switch to exact-match PATH checks, update user PATH only if missing, and also update the current process PATH in-session; remove restart guidance.
Bash installer
cli/scripts/install.sh
Add a post-installation PATH safety notice: check for INSTALL_DIR in PATH and print a warning with export instructions if missing.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately describes the main change—making install scripts work immediately without a terminal restart—which directly addresses the core problems fixed in both the PowerShell and Bash scripts.
Description check ✅ Passed The description is clearly related to the changeset, providing detailed context about the problems being solved, the solutions implemented, and a test plan for verification.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

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

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch fix/install-script-path
✨ Simplify code
  • Create PR with simplified code
  • Commit simplified code in branch fix/install-script-path
📝 Coding Plan
  • Generate coding plan for human review comments

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

@Aureliolo Aureliolo temporarily deployed to cloudflare-preview March 15, 2026 09:10 — with GitHub Actions Inactive
Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

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 the installation scripts for PowerShell and Bash to make the synthorg CLI usable immediately after installation without a terminal restart. The changes are well-aligned with this goal. The PowerShell script is updated to modify the current session's PATH, and the Bash script now warns users if the installation directory isn't in their PATH. I've added a couple of suggestions to make the PATH variable checks in both scripts more robust against edge cases, such as paths with trailing slashes or substring conflicts.

Comment on lines 86 to 88
if ($env:PATH -notlike "*$InstallDir*") {
$env:PATH = "$env:PATH;$InstallDir"
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

The -notlike check for the directory's existence in PATH is not fully robust. It can return a false positive if $InstallDir is a substring of another directory in PATH. For instance, if PATH includes C:\Program Files\synthorg-tools and $InstallDir is C:\Program Files\synthorg, the check would incorrectly assume the path is already present. A more reliable method is to split the PATH string by its separator and check for an exact match in the resulting array of paths. Note that the same potential issue exists on line 82 for the $UserPath check.

    if (($env:PATH -split ';') -notcontains $InstallDir) {
        $env:PATH = "$env:PATH;$InstallDir"
    }


# Warn if INSTALL_DIR is not in PATH.
case ":${PATH}:" in
*":${INSTALL_DIR}:"*) ;;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

The check for INSTALL_DIR in PATH might fail if INSTALL_DIR has a trailing slash (e.g., INSTALL_DIR=/tmp/foo/) but PATH contains the path without it (e.g., /tmp/foo). It's good practice to normalize the path by removing any trailing slash before the check. You can do this directly within the case statement pattern using shell parameter expansion.

Suggested change
*":${INSTALL_DIR}:"*) ;;
*":${INSTALL_DIR%/}:"*) ;;

@greptile-apps
Copy link
Copy Markdown

greptile-apps bot commented Mar 15, 2026

Greptile Summary

This PR fixes two usability issues in the CLI install scripts: the PowerShell script now updates the current session's $env:PATH immediately (so synthorg is usable without restarting the terminal), and the Bash script now warns — to stderr — when a custom INSTALL_DIR is not present in PATH, including a ready-to-paste export command and guidance on multiple shell profile files.

Key changes:

  • install.ps1: Replaces the fragile substring match (-notlike "*$InstallDir*") with an exact, split-and-normalise entry check (-notcontains $NormalizedInstallDir), properly handles an initially-empty user PATH, and unconditionally updates the process-level $env:PATH so the binary is callable immediately.
  • install.sh: Adds a case-based PATH check after installation that prints a warning (with four >&2-redirected echo lines) and lists common shell profile files — including login-shell files (~/.bash_profile, ~/.profile) — where the export should be persisted.
  • Minor edge case: The Bash PATH check normalises INSTALL_DIR's trailing slash via ${INSTALL_DIR%/} but does not normalise PATH entries themselves, so a PATH entry with a trailing slash for the same directory can produce a spurious warning (see inline comments).

Confidence Score: 4/5

  • Safe to merge; changes are targeted and correct, with only minor edge-case style issues in the PATH normalisation logic.
  • Both fixes correctly address the stated problems. The PowerShell changes are robust (exact match, empty-PATH guard, session update). The Bash warning is properly directed to stderr and covers login shells. The only issues found are a potential false-positive warning when PATH entries carry a trailing slash, and an inherent limitation of testing PATH inside a piped subprocess — neither blocks shipping.
  • No files require special attention; both scripts are low-risk, single-purpose changes.

Important Files Changed

Filename Overview
cli/scripts/install.ps1 Improves PATH handling: switches from substring match to exact entry match (fixing false-positives), handles empty UserPath gracefully, and adds session-level PATH update so the binary is immediately usable. Logic is sound; minor edge case around forward-slash paths.
cli/scripts/install.sh Adds a post-install PATH warning correctly routed to stderr with shell-profile guidance. PATH check normalises INSTALL_DIR's trailing slash but does not normalise PATH entries themselves, which can produce a spurious warning in the rare case where PATH contains the same directory with a trailing slash.
Prompt To Fix All With AI
This is a comment left during a code review.
Path: cli/scripts/install.sh
Line: 117-118

Comment:
**PATH check only normalises INSTALL_DIR's trailing slash, not PATH entries**

`${INSTALL_DIR%/}` strips a trailing slash from `INSTALL_DIR` before building the pattern, but individual entries in `$PATH` are not normalised. If the user's `PATH` contains the same directory _with_ a trailing slash (e.g. `/usr/local/bin/`), the pattern `*":/usr/local/bin:"*` won't match `:/usr/local/bin/:`, and a spurious warning will be printed even though the binary is perfectly reachable.

A simple guard that covers this common case:
```suggestion
case ":${PATH}:" in
    *":${INSTALL_DIR%/}:"* | *":${INSTALL_DIR%/}/:"*) ;;
```
This matches both the normalised form and the same path with one trailing slash present in `$PATH`.

How can I resolve this? If you propose a fix, please make it concise.

---

This is a comment left during a code review.
Path: cli/scripts/install.sh
Line: 116-128

Comment:
**PATH check reflects the installer subprocess's PATH, not the user's interactive shell**

When the script is run via `curl … | bash`, the spawned bash process inherits `PATH` from whatever invoked `curl` (e.g. a cron job, a CI runner, a minimal Docker container), not necessarily from the user's interactive login shell. This means:

- A false positive is possible: the warning fires even though the directory _is_ in the user's interactive `~/.profile`-sourced `PATH`.
- A false negative is possible: no warning fires because the parent process happened to have that directory in its `PATH`, even though the user's interactive shell does not.

This is an inherent limitation of piped installers and is hard to work around completely, but it may be worth adding a brief caveat to the warning message such as `"(checked against the current process PATH)"` so users aren't confused when `which synthorg` works in a new terminal despite the warning having fired.

How can I resolve this? If you propose a fix, please make it concise.

Last reviewed commit: eaf1d74

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

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 `@cli/scripts/install.ps1`:
- Around line 81-87: Replace the wildcard substring checks against PATH with
exact, normalized entry membership checks: split $UserPath and $env:PATH on ';',
trim entries and optionally normalize/case-insensitize them, then test
membership of $InstallDir using -contains (or a case-insensitive comparison)
before calling [Environment]::SetEnvironmentVariable or mutating $env:PATH;
update the checks that currently use "-notlike "*$InstallDir*"" to use the
split-and-contains approach for both $UserPath and $env:PATH to avoid
false-positive matches like "C:\Tools2" when $InstallDir is "C:\Tools".
🪄 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: ASSERTIVE

Plan: Pro

Run ID: 60d195dd-7b38-4048-9e88-7f1acd707344

📥 Commits

Reviewing files that changed from the base of the PR and between 1f5120e and 3a9ed37.

📒 Files selected for processing (2)
  • cli/scripts/install.ps1
  • cli/scripts/install.sh
📜 Review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: CLI Test (windows-latest)
  • GitHub Check: Greptile Review
  • GitHub Check: Analyze (python)
🧰 Additional context used
🪛 PSScriptAnalyzer (1.24.0)
cli/scripts/install.ps1

[warning] 84-84: File 'install.ps1' uses Write-Host. Avoid using Write-Host because it might not work in all hosts, does not work when there is no host, and (prior to PS 5.0) cannot be suppressed, captured, or redirected. Instead, use Write-Output, Write-Verbose, or Write-Information.

(PSAvoidUsingWriteHost)


[warning] Missing BOM encoding for non-ASCII encoded file 'install.ps1'

(PSUseBOMForUnicodeEncodedFile)

🔇 Additional comments (1)
cli/scripts/install.sh (1)

116-128: PATH warning UX is clear and actionable.

This provides the exact command users need and clearly explains persistence, which aligns with the install-flow objective.

- PowerShell: use exact PATH entry matching (-split + -notcontains)
  instead of substring wildcard (-notlike) to avoid false positives
- Bash: normalize trailing slash in PATH check (${INSTALL_DIR%/})
- Bash: send warning output to stderr so it isn't swallowed by
  stdout capture (e.g. OUTPUT=$(curl ... | bash))
- Bash: broaden shell profile hint to include ~/.bash_profile and
  ~/.profile for login-shell users (macOS, SSH)
@Aureliolo Aureliolo merged commit b45533c into main Mar 15, 2026
36 of 38 checks passed
@Aureliolo Aureliolo deleted the fix/install-script-path branch March 15, 2026 09:17
@Aureliolo Aureliolo temporarily deployed to cloudflare-preview March 15, 2026 09:17 — with GitHub Actions Inactive
Comment on lines +117 to +118
case ":${PATH}:" in
*":${INSTALL_DIR%/}:"*) ;;
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

PATH check only normalises INSTALL_DIR's trailing slash, not PATH entries

${INSTALL_DIR%/} strips a trailing slash from INSTALL_DIR before building the pattern, but individual entries in $PATH are not normalised. If the user's PATH contains the same directory with a trailing slash (e.g. /usr/local/bin/), the pattern *":/usr/local/bin:"* won't match :/usr/local/bin/:, and a spurious warning will be printed even though the binary is perfectly reachable.

A simple guard that covers this common case:

Suggested change
case ":${PATH}:" in
*":${INSTALL_DIR%/}:"*) ;;
case ":${PATH}:" in
*":${INSTALL_DIR%/}:"* | *":${INSTALL_DIR%/}/:"*) ;;

This matches both the normalised form and the same path with one trailing slash present in $PATH.

Prompt To Fix With AI
This is a comment left during a code review.
Path: cli/scripts/install.sh
Line: 117-118

Comment:
**PATH check only normalises INSTALL_DIR's trailing slash, not PATH entries**

`${INSTALL_DIR%/}` strips a trailing slash from `INSTALL_DIR` before building the pattern, but individual entries in `$PATH` are not normalised. If the user's `PATH` contains the same directory _with_ a trailing slash (e.g. `/usr/local/bin/`), the pattern `*":/usr/local/bin:"*` won't match `:/usr/local/bin/:`, and a spurious warning will be printed even though the binary is perfectly reachable.

A simple guard that covers this common case:
```suggestion
case ":${PATH}:" in
    *":${INSTALL_DIR%/}:"* | *":${INSTALL_DIR%/}/:"*) ;;
```
This matches both the normalised form and the same path with one trailing slash present in `$PATH`.

How can I resolve this? If you propose a fix, please make it concise.

Comment on lines +116 to +128
# Warn if INSTALL_DIR is not in PATH (normalize trailing slash).
case ":${PATH}:" in
*":${INSTALL_DIR%/}:"*) ;;
*)
echo "Warning: ${INSTALL_DIR} is not in your PATH." >&2
echo "Add it by running:" >&2
echo "" >&2
echo " export PATH=\"${INSTALL_DIR}:\$PATH\"" >&2
echo "" >&2
echo "To make it permanent, add that line to your shell profile (~/.bashrc, ~/.bash_profile, ~/.profile, ~/.zshrc, etc.)." >&2
echo "" >&2
;;
esac
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

PATH check reflects the installer subprocess's PATH, not the user's interactive shell

When the script is run via curl … | bash, the spawned bash process inherits PATH from whatever invoked curl (e.g. a cron job, a CI runner, a minimal Docker container), not necessarily from the user's interactive login shell. This means:

  • A false positive is possible: the warning fires even though the directory is in the user's interactive ~/.profile-sourced PATH.
  • A false negative is possible: no warning fires because the parent process happened to have that directory in its PATH, even though the user's interactive shell does not.

This is an inherent limitation of piped installers and is hard to work around completely, but it may be worth adding a brief caveat to the warning message such as "(checked against the current process PATH)" so users aren't confused when which synthorg works in a new terminal despite the warning having fired.

Prompt To Fix With AI
This is a comment left during a code review.
Path: cli/scripts/install.sh
Line: 116-128

Comment:
**PATH check reflects the installer subprocess's PATH, not the user's interactive shell**

When the script is run via `curl … | bash`, the spawned bash process inherits `PATH` from whatever invoked `curl` (e.g. a cron job, a CI runner, a minimal Docker container), not necessarily from the user's interactive login shell. This means:

- A false positive is possible: the warning fires even though the directory _is_ in the user's interactive `~/.profile`-sourced `PATH`.
- A false negative is possible: no warning fires because the parent process happened to have that directory in its `PATH`, even though the user's interactive shell does not.

This is an inherent limitation of piped installers and is hard to work around completely, but it may be worth adding a brief caveat to the warning message such as `"(checked against the current process PATH)"` so users aren't confused when `which synthorg` works in a new terminal despite the warning having fired.

How can I resolve this? If you propose a fix, please make it concise.

Aureliolo added a commit that referenced this pull request Mar 15, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.2.4](v0.2.3...v0.2.4)
(2026-03-15)


### Bug Fixes

* attach cosign signatures and provenance bundle to release assets
([#438](#438))
([f191a4d](f191a4d))
* create git tag explicitly for draft releases
([#432](#432))
([1f5120e](1f5120e))
* docker healthcheck, CI optimization, and container hardening
([#436](#436))
([4d32bca](4d32bca))
* ensure security headers on all HTTP responses
([#437](#437))
([837f2fc](837f2fc))
* make install scripts usable immediately without terminal restart
([#433](#433))
([b45533c](b45533c))
* migrate pids_limit to deploy.resources.limits.pids
([#439](#439))
([66b94fd](66b94fd))


### Refactoring

* redesign release notes layout
([#434](#434))
([239aaf7](239aaf7))


### Maintenance

* **site:** replace hero CTA with license link and scroll arrow
([#440](#440))
([56af41c](56af41c))
* **web:** adopt @vue/tsconfig preset
([#435](#435))
([7d4b214](7d4b214))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
This was referenced Mar 15, 2026
Aureliolo added a commit that referenced this pull request Mar 15, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.2.4](v0.2.3...v0.2.4)
(2026-03-15)


### Bug Fixes

* attach cosign signatures and provenance bundle to release assets
([#438](#438))
([f191a4d](f191a4d))
* create git tag explicitly for draft releases
([#432](#432))
([1f5120e](1f5120e))
* docker healthcheck, CI optimization, and container hardening
([#436](#436))
([4d32bca](4d32bca))
* ensure security headers on all HTTP responses
([#437](#437))
([837f2fc](837f2fc))
* make install scripts usable immediately without terminal restart
([#433](#433))
([b45533c](b45533c))
* migrate pids_limit to deploy.resources.limits.pids
([#439](#439))
([66b94fd](66b94fd))
* use cosign --bundle flag for checksums signing
([#443](#443))
([19735b9](19735b9))


### Refactoring

* redesign release notes layout
([#434](#434))
([239aaf7](239aaf7))


### Maintenance

* **main:** release 0.2.4
([#431](#431))
([63b03c4](63b03c4))
* remove stale v0.2.4 changelog section from failed release
([#446](#446))
([769de10](769de10))
* reset version to 0.2.3 for re-release
([#444](#444))
([8579993](8579993))
* **site:** replace hero CTA with license link and scroll arrow
([#440](#440))
([56af41c](56af41c))
* **web:** adopt @vue/tsconfig preset
([#435](#435))
([7d4b214](7d4b214))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
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