Skip to content

chore(repo): Add logic to prevent duplication of legacy hooks Typedoc#8074

Open
SarahSoutoul wants to merge 9 commits intomainfrom
ss/fix-duplication-legacy-hooks
Open

chore(repo): Add logic to prevent duplication of legacy hooks Typedoc#8074
SarahSoutoul wants to merge 9 commits intomainfrom
ss/fix-duplication-legacy-hooks

Conversation

@SarahSoutoul
Copy link
Contributor

@SarahSoutoul SarahSoutoul commented Mar 13, 2026

Description

The whole reason for this PR is explained in this Slack comment/ thread. We introduced the extract script to split out Returns/Parameters into standalone Typedoc files. That was working when the legacy useSignIn/useSignUp hooks were the only ones exposed. Now that the new useSignIn/useSignUp hooks are no longer @internal, Typedoc generates outputs for both the new and legacy hooks. This causes:

  • The new hooks to take the canonical filenames (use-sign-in.mdx, use-sign-up.mdx, use-sign-in-return.mdx etc.)
  • The legacy hooks to be renamed by Typedoc to use-sign-in-1*.mdx / use-sign-up-1*.mdx

To prevent this duplication, here are the changes I applied.

Changes

The extractor now detects the legacy hook outputs and:

  1. Moves the legacy hooks into .typedoc/docs/react/legacy/
  2. Drops the -1 suffix
  3. Ensures matching return and params files are also placed in the same folder

Legacy docs are now written to:

  • .typedoc/docs/react/legacy/use-sign-in.mdx
  • .typedoc/docs/react/legacy/use-sign-up.mdx

Legacy returns/params are now written to:

.typedoc/docs/react/legacy/use-sign-in-return.mdx
.typedoc/docs/react/legacy/use-sign-in-params.mdx
.typedoc/docs/react/legacy/use-sign-up-return.mdx
.typedoc/docs/react/legacy/use-sign-up-params.mdx
Screenshot 2026-03-13 at 11 34 08 am

The new signal‑based hooks keep the normal canonical paths:

.typedoc/docs/react/use-sign-in.mdx
.typedoc/docs/react/use-sign-in-return.mdx
.typedoc/docs/react/use-sign-up.mdx
.typedoc/docs/react/use-sign-up-return.mdx

Checklist

  • pnpm test runs as expected.
  • pnpm build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

  • 🐛 Bug fix
  • 🌟 New feature
  • 🔨 Breaking change
  • 📖 Refactoring / dependency upgrade / documentation
  • other:

Summary by CodeRabbit

  • Chores
    • Legacy hook documentation is now grouped into a dedicated legacy section; related "returns" and "parameters" pages are normalized to remove duplicate suffixes and are consistently relocated to tidy output structure. A small changeset marker and lightweight log messages were added to surface relocations and creations.
  • Tests
    • Updated tests to validate top-level and nested folder structures (including legacy folders).

@SarahSoutoul SarahSoutoul self-assigned this Mar 13, 2026
@changeset-bot
Copy link

changeset-bot bot commented Mar 13, 2026

🦋 Changeset detected

Latest commit: 18d5c01

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 0 packages

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@vercel
Copy link

vercel bot commented Mar 13, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
clerk-js-sandbox Ready Ready Preview, Comment Mar 18, 2026 4:43pm

Request Review

@SarahSoutoul SarahSoutoul changed the title docs(repo): Add logic to prevent duplication of legacy hooks Typedoc docs(repo): Add logic to prevent duplication of legacy hooks Typedoc Mar 13, 2026
@pkg-pr-new
Copy link

pkg-pr-new bot commented Mar 13, 2026

Open in StackBlitz

@clerk/agent-toolkit

npm i https://pkg.pr.new/@clerk/agent-toolkit@8074

@clerk/astro

npm i https://pkg.pr.new/@clerk/astro@8074

@clerk/backend

npm i https://pkg.pr.new/@clerk/backend@8074

@clerk/chrome-extension

npm i https://pkg.pr.new/@clerk/chrome-extension@8074

@clerk/clerk-js

npm i https://pkg.pr.new/@clerk/clerk-js@8074

@clerk/dev-cli

npm i https://pkg.pr.new/@clerk/dev-cli@8074

@clerk/expo

npm i https://pkg.pr.new/@clerk/expo@8074

@clerk/expo-passkeys

npm i https://pkg.pr.new/@clerk/expo-passkeys@8074

@clerk/express

npm i https://pkg.pr.new/@clerk/express@8074

@clerk/fastify

npm i https://pkg.pr.new/@clerk/fastify@8074

@clerk/hono

npm i https://pkg.pr.new/@clerk/hono@8074

@clerk/localizations

npm i https://pkg.pr.new/@clerk/localizations@8074

@clerk/nextjs

npm i https://pkg.pr.new/@clerk/nextjs@8074

@clerk/nuxt

npm i https://pkg.pr.new/@clerk/nuxt@8074

@clerk/react

npm i https://pkg.pr.new/@clerk/react@8074

@clerk/react-router

npm i https://pkg.pr.new/@clerk/react-router@8074

@clerk/shared

npm i https://pkg.pr.new/@clerk/shared@8074

@clerk/tanstack-react-start

npm i https://pkg.pr.new/@clerk/tanstack-react-start@8074

@clerk/testing

npm i https://pkg.pr.new/@clerk/testing@8074

@clerk/ui

npm i https://pkg.pr.new/@clerk/ui@8074

@clerk/upgrade

npm i https://pkg.pr.new/@clerk/upgrade@8074

@clerk/vue

npm i https://pkg.pr.new/@clerk/vue@8074

commit: 18d5c01

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Mar 13, 2026

📝 Walkthrough

Walkthrough

Adds legacy-hook handling to the TypeDoc extraction script (.typedoc/extract-returns-and-params.mjs): introduces LEGACY_HOOK_NAMES and getLegacyHookTarget(filePath) to detect legacy hooks and compute outputDir and baseName; updates extractReturnsSection and extractParametersSection to write outputs under a legacy/ subdirectory and strip trailing -1 from base names; adds moveLegacyHookDoc(filePath) and invokes it after extraction and in the main loop. Also adds a new changeset file (.changeset/short-apes-joke.md) and updates a file-structure test to validate top-level and nested folders.

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 71.43% 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
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly describes the main change: adding logic to prevent duplication of legacy hooks in Typedoc, which directly addresses the core issue resolved by this pull request.

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

📝 Coding Plan
  • Generate coding plan for human review comments

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.

Copy link
Contributor

@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: 2

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

Inline comments:
In @.typedoc/extract-returns-and-params.mjs:
- Around line 40-45: Extract the duplicated legacy hook detection and
filename/path rewriting into a single helper (e.g., isLegacyHook(fileName) and
rewriteLegacyOutput(fileName, dirName) or a single getLegacyOutput(fileName,
dirName)) and use it from extractReturnsSection, extractParametersSection and
moveLegacyHookDoc; the helper should encapsulate the logic that currently checks
fileName === 'use-sign-in-1' || fileName === 'use-sign-up-1', produces the
outputBaseName by stripping /-1$/ and appends '-return', and returns the new
outputDir (path.join(dirName, 'legacy')) and ensures fs.mkdirSync(..., {
recursive: true }) is called once; update those three call sites to use the
helper instead of duplicating the checks and rewrites.
- Around line 126-129: Update the JSDoc for the function that handles legacy
hook doc moves (the block currently stating "Renames legacy hook docs to use a
-legacy suffix" with `@param` {string} filePath) to accurately describe what the
code does: it moves files into a legacy/ directory and strips a trailing "-1"
from filenames rather than appending a "-legacy" suffix; ensure the description
and any examples reflect "move into legacy/ and remove -1" so future maintainers
won't be misled.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: ASSERTIVE

Plan: Pro

Run ID: 76db7019-d139-4c33-8890-18be580056e3

📥 Commits

Reviewing files that changed from the base of the PR and between b764267 and f4b11d6.

📒 Files selected for processing (1)
  • .typedoc/extract-returns-and-params.mjs

@alexisintech
Copy link
Member

awesome fix!

but for the current useSignIn and useSignUp hooks, they're not returning the output we'd actually want in the docs:
Screenshot 2026-03-13 at 10 35 26

we'd want the signupsignalvalue type to be a table of those returns:
Screenshot 2026-03-13 at 10 36 55

@SarahSoutoul
Copy link
Contributor Author

but for the current useSignIn and useSignUp hooks, they're not returning the output we'd actually want in the docs:

@alexisintech Yeah that was always the case as they're not JSDoc documented properly, and currently the docs don't use these (they're manually typed). I think I'd prefer to keep the scope of this PR to just fixing the duplication, and can create another PR to make sure the output is good for those if that's okay.

@SarahSoutoul SarahSoutoul changed the title docs(repo): Add logic to prevent duplication of legacy hooks Typedoc chore(repo): Add logic to prevent duplication of legacy hooks Typedoc Mar 13, 2026
@SarahSoutoul SarahSoutoul changed the title chore(repo): Add logic to prevent duplication of legacy hooks Typedoc chore(react): Add logic to prevent duplication of legacy hooks Typedoc Mar 13, 2026
Copy link
Contributor

@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 @.typedoc/extract-returns-and-params.mjs:
- Around line 57-65: When legacyTarget is set the script moves outputs to
legacy/ but does not remove any existing stale files with the old "-1" suffix,
leaving duplicates (e.g. use-sign-in-1-return.mdx); update the logic around
outputBaseName/outputDir/newFilePath to detect and delete those stale artifacts
before writing: when legacyTarget is true compute the originalLegacyPath(s) (the
prior filePath + `${legacyTarget.baseName}-1-return.mdx` and `-1-params.mdx` or
any `*-1-*.mdx` for that base name) and remove them (fs.unlinkSync or fs.rmSync
with exists checks) and/or remove any `*-1-*.mdx` in the original outputDir,
then continue to create the newFilePath in legacyTarget.outputDir as now. Ensure
this cleanup runs only when legacyTarget is truthy to avoid accidental
deletions.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: ASSERTIVE

Plan: Pro

Run ID: a9713ab3-ceca-4322-8997-139cddc57fdc

📥 Commits

Reviewing files that changed from the base of the PR and between f4b11d6 and 7b29be9.

📒 Files selected for processing (1)
  • .typedoc/extract-returns-and-params.mjs

@alexisintech
Copy link
Member

but for the current useSignIn and useSignUp hooks, they're not returning the output we'd actually want in the docs:

@alexisintech Yeah that was always the case as they're not JSDoc documented properly, and currently the docs don't use these (they're manually typed). I think I'd prefer to keep the scope of this PR to just fixing the duplication, and can create another PR to make sure the output is good for those if that's okay.

ohhh the current docs don't use them - okay sounds good!

Copy link
Member

@alexisintech alexisintech left a comment

Choose a reason for hiding this comment

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

LGTM!

@wobsoriano wobsoriano changed the title chore(react): Add logic to prevent duplication of legacy hooks Typedoc chore(repo): Add logic to prevent duplication of legacy hooks Typedoc Mar 13, 2026
Copy link
Contributor

@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 @.changeset/short-apes-joke.md:
- Around line 1-2: The changeset file ".changeset/short-apes-joke.md" is empty
(only '---' delimiters); update it to declare the release intent by replacing
the empty frontmatter with a YAML changeset that lists the packages to bump
(each as package-name@version or package-name: patch/minor/major) and a short
summary message describing the change; ensure the file has the required opening
and closing '---' surrounding the package bump entries and the summary so
release/changelog tooling can parse it.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: ASSERTIVE

Plan: Pro

Run ID: ca16d884-5dae-485a-8ece-ad878dbac729

📥 Commits

Reviewing files that changed from the base of the PR and between 7b29be9 and 69f943a.

📒 Files selected for processing (1)
  • .changeset/short-apes-joke.md

@SarahSoutoul
Copy link
Contributor Author

Thanks for the review @NWylynko 🙏 I can't merge this atm, but would be good to have your feedback/review too @manovotny whenever you've got the time!

… extract script

Read file content and compute legacy target once per file in the main
loop instead of redundantly in each function. Also add test coverage
for the new react/legacy nested folder.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copy link
Contributor

@manovotny manovotny left a comment

Choose a reason for hiding this comment

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

I pushed one commit. If you hate it, we can revert it. f9f3c3f

  1. Small refactor to the extract script: moved the fs.readFileSync and getLegacyHookTarget calls out of the individual functions and into the main() loop so each file is read once and the legacy target is computed once, rather than redundantly in extractReturnsSection, extractParametersSection, and moveLegacyHookDoc. All three functions now accept content and legacyTarget as parameters.
  2. Also added test coverage for the new react/legacy nested directory and fixed the existing "top-level folders" test to filter out nested paths (it would have broken once react/legacy appeared).

Copy link
Contributor

@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

♻️ Duplicate comments (1)
.typedoc/extract-returns-and-params.mjs (1)

56-64: ⚠️ Potential issue | 🟠 Major

Delete stale *-1-* generated files when rerouting legacy outputs.

The new files are written under legacy/, but reruns never remove the previous top-level use-sign-in-1-return.mdx / use-sign-in-1-params.mdx. Since getAllMdxFiles() skips generated files entirely, those stale artifacts will persist in any non-clean workspace and reintroduce the duplication this refactor is trying to eliminate.

💡 Proposed fix
   if (legacyTarget) {
+    const staleReturnPath = path.join(path.dirname(filePath), `${fileName}-return.mdx`);
+    if (fs.existsSync(staleReturnPath)) {
+      fs.unlinkSync(staleReturnPath);
+    }
     outputBaseName = `${legacyTarget.baseName}-return`;
     outputDir = legacyTarget.outputDir;
     fs.mkdirSync(outputDir, { recursive: true });
   }
@@
   if (legacyTarget) {
+    const staleParamsPath = path.join(dirName, `${fileName}-params.mdx`);
+    if (fs.existsSync(staleParamsPath)) {
+      fs.unlinkSync(staleParamsPath);
+    }
     outputDir = legacyTarget.outputDir;
     outputBaseName = legacyTarget.baseName;
     fs.mkdirSync(outputDir, { recursive: true });
   }

Also applies to: 100-104

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

In @.typedoc/extract-returns-and-params.mjs around lines 56 - 64, Before
rerouting into legacyTarget, capture the original target paths (the pre-legacy
outputBaseName and outputDir computed from fileName/filePath) and, when
legacyTarget is truthy, remove any stale top-level generated files that would
have been created previously (e.g. the old `${fileName}-return.mdx` and
`${fileName}-params.mdx` or any `*-1-*` variants) before setting
outputBaseName/outputDir and creating the new legacy file; use the same
variables from the diff (outputBaseName, outputDir, legacyTarget, newFilePath)
to locate and unlink those stale files so getAllMdxFiles won’t skip lingering
artifacts.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.typedoc/__tests__/file-structure.test.ts:
- Around line 29-30: The isTopLevelPath function incorrectly assumes forward
slashes; normalize the filePath before checking by converting platform-specific
separators to a consistent form (e.g., replace backslashes with forward slashes
or use path.posix/path.normalize) so that nested folders from scanDirectory
(which uses path.relative/path.join) are correctly classified; update the
isTopLevelPath implementation to normalize filePath then perform the
includes('/') check and adjust any tests expecting forward-slash snapshots
accordingly.

---

Duplicate comments:
In @.typedoc/extract-returns-and-params.mjs:
- Around line 56-64: Before rerouting into legacyTarget, capture the original
target paths (the pre-legacy outputBaseName and outputDir computed from
fileName/filePath) and, when legacyTarget is truthy, remove any stale top-level
generated files that would have been created previously (e.g. the old
`${fileName}-return.mdx` and `${fileName}-params.mdx` or any `*-1-*` variants)
before setting outputBaseName/outputDir and creating the new legacy file; use
the same variables from the diff (outputBaseName, outputDir, legacyTarget,
newFilePath) to locate and unlink those stale files so getAllMdxFiles won’t skip
lingering artifacts.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: ASSERTIVE

Plan: Pro

Run ID: 50242401-f561-4e63-a943-594c04712190

📥 Commits

Reviewing files that changed from the base of the PR and between 69f943a and f9f3c3f.

📒 Files selected for processing (2)
  • .typedoc/__tests__/file-structure.test.ts
  • .typedoc/extract-returns-and-params.mjs

Comment on lines +29 to +30
function isTopLevelPath(filePath: string) {
return !filePath.includes('/');
Copy link
Contributor

@coderabbitai coderabbitai bot Mar 17, 2026

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🌐 Web query:

In Node.js, do path.relative()andpath.join()return platform-specific separators, and would a nested path be emitted asreact\legacyon Windows instead ofreact/legacy?

💡 Result:

Yes—path.join() and path.relative() are platform-aware and return paths using the platform’s preferred separator.

  • path.join() “joins … using the platform-specific separator” and normalizes the result. (nodejs.org)
  • path.relative() returns a relative path using platform conventions; the docs’ Windows example returns backslashes (e.g. ..\\..\\impl\\bbb). (nodejs.org)
  • On Windows, Node’s path methods only add backslashes (\) (even though Windows accepts / too). (nodejs.org)

So on Windows a nested path would be produced as react\legacy. If you see react\\legacy, that’s typically just the JavaScript string escaping when printed/serialized (the actual string contains single backslashes). If you need forward slashes regardless of OS, use path.posix.* APIs. (nodejs.org)

Citations:


🏁 Script executed:

# First, locate and examine the test file
find . -name "file-structure.test.ts" -type f

Repository: clerk/javascript

Length of output: 103


🏁 Script executed:

# Read the relevant sections of the test file
wc -l .typedoc/__tests__/file-structure.test.ts

Repository: clerk/javascript

Length of output: 104


🏁 Script executed:

# Examine lines around 29-56 where the issue is flagged
sed -n '20,65p' .typedoc/__tests__/file-structure.test.ts

Repository: clerk/javascript

Length of output: 1240


🏁 Script executed:

# Find scanDirectory() implementation
rg -n "function scanDirectory|const scanDirectory|export.*scanDirectory" --type ts

Repository: clerk/javascript

Length of output: 42


🏁 Script executed:

# Search more broadly for scanDirectory
rg -n "scanDirectory" .typedoc/__tests__/file-structure.test.ts -A 15

Repository: clerk/javascript

Length of output: 1987


🏁 Script executed:

# Check the beginning of the test file to see imports and scanDirectory definition
head -30 .typedoc/__tests__/file-structure.test.ts

Repository: clerk/javascript

Length of output: 985


🏁 Script executed:

# Look for where scanDirectory is defined - might be in same file or imported
rg -n "function scanDirectory|const scanDirectory" --type ts

Repository: clerk/javascript

Length of output: 42


Normalize separators before classifying nested folders.

scanDirectory() uses path.relative() and path.join() (line 17), which return platform-specific separators. On Windows, nested paths become react\legacy instead of react/legacy. The current check !filePath.includes('/') will misclassify them as top-level, and the snapshot expectations with forward slashes will never match.

Proposed fix
+function normalizePath(filePath: string) {
+  return filePath.replace(/\\/g, '/');
+}
+
 function isTopLevelPath(filePath: string) {
-  return !filePath.includes('/');
+  return !normalizePath(filePath).includes('/');
 }
@@
  it('should only have these top-level folders', async () => {
    const folders = await scanDirectory('directory');
-   const topLevelFolders = folders.filter(isTopLevelPath);
+   const topLevelFolders = folders.map(normalizePath).filter(isTopLevelPath);
@@
  it('should only have these nested folders', async () => {
    const folders = await scanDirectory('directory');
-   const nestedFolders = folders.filter(folder => !isTopLevelPath(folder));
+   const nestedFolders = folders.map(normalizePath).filter(folder => !isTopLevelPath(folder));
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.typedoc/__tests__/file-structure.test.ts around lines 29 - 30, The
isTopLevelPath function incorrectly assumes forward slashes; normalize the
filePath before checking by converting platform-specific separators to a
consistent form (e.g., replace backslashes with forward slashes or use
path.posix/path.normalize) so that nested folders from scanDirectory (which uses
path.relative/path.join) are correctly classified; update the isTopLevelPath
implementation to normalize filePath then perform the includes('/') check and
adjust any tests expecting forward-slash snapshots accordingly.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@manovotny just tagging you on this to see if it's sth we need to fix?

Copy link
Contributor

Choose a reason for hiding this comment

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

Seems like the humans are having a chat. I'll hop back into my burrow for now. If you need me again, just tag @coderabbitai in a new comment, and I'll come hopping out!

Copy link
Contributor

Choose a reason for hiding this comment

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

@coderabbitai no, you clanker! The pre-existing tests in this file already use path.relative/path.join with forward-slash snapshot assertions (see the top-level folders test). If Windows separators were a real problem here, every test in this file would already be failing. This PR just follows the established pattern, normalizing separators across the whole file would be a separate concern.

Copy link
Contributor

Choose a reason for hiding this comment

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

@manovotny, you're absolutely right, and I apologize for the noise. The pre-existing top-level folders test already relies on the same path.relative/path.join calls with forward-slash snapshot assertions — if Windows separators were a real issue, those tests would have been failing long before this PR. The new nested folders test correctly follows that established pattern. I'll withdraw my concern.

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.

5 participants