Skip to content

feat(lib): add NonEmptyArray helper, tighten preferredRunner - #125

Merged
wyattjoh merged 1 commit into
mainfrom
feat/lib-non-empty-array
Apr 15, 2026
Merged

feat(lib): add NonEmptyArray helper, tighten preferredRunner#125
wyattjoh merged 1 commit into
mainfrom
feat/lib-non-empty-array

Conversation

@wyattjoh

Copy link
Copy Markdown
Contributor

Summary

  • Adds lib/helpers/arrays.ts with a NonEmptyArray<T> type alias and an isNonEmpty<T> type-guard predicate.
  • Tightens preferredRunner to require a NonEmptyArray<Runner> input and return Runner (no longer | undefined).
  • Updates the two call sites (init/skills.ts, init/format.ts) to use isNonEmpty for the non-empty check, and drops the now-provably-unreachable defensive if (!preferred) branch in skills.ts. The type system enforces the invariant that runtime code previously checked.

Stacked on #124.

Test plan

  • bun run test passes (60 passed)
  • bun test packages/cli-core/src/lib/helpers/arrays.test.ts covers the type guard

@wyattjoh

wyattjoh commented Apr 7, 2026

Copy link
Copy Markdown
ContributorAuthor

@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from 47dc327 to 21072f9CompareApril 7, 2026 19:40
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 26405f7 to 1e94859CompareApril 7, 2026 19:40
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from 21072f9 to d52abd4CompareApril 7, 2026 20:23
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch 2 times, most recently from 670617f to 10da1dbCompareApril 7, 2026 21:58
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch 2 times, most recently from 133bd4a to ecae3c7CompareApril 8, 2026 21:39
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch 2 times, most recently from a4185bb to a45b262CompareApril 9, 2026 20:23
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from ecae3c7 to 3f687c8CompareApril 9, 2026 20:23
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from a45b262 to c95a429CompareApril 9, 2026 22:54
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch 2 times, most recently from 207adbd to dcb4afaCompareApril 11, 2026 06:48
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from c95a429 to 79d474fCompareApril 11, 2026 06:48
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from dcb4afa to d700db1CompareApril 11, 2026 06:54
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch 2 times, most recently from 08653a1 to a8903e7CompareApril 13, 2026 20:01
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch 2 times, most recently from 0262797 to 523c58aCompareApril 13, 2026 22:49
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from a8903e7 to 190c5d5CompareApril 13, 2026 22:49
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from 523c58a to 3a3375eCompareApril 13, 2026 23:20
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 190c5d5 to 09c9f9bCompareApril 13, 2026 23:20
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from 3a3375e to f7ab840CompareApril 14, 2026 18:56
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 09c9f9b to 59ca3dbCompareApril 14, 2026 18:56
Base automatically changed from refactor/format-uses-runners to mainApril 14, 2026 19:13
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 59ca3db to 5f34cb8CompareApril 14, 2026 20:09
@wyattjoh
wyattjoh marked this pull request as ready for review April 14, 2026 20:10
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 5f34cb8 to b30a809CompareApril 14, 2026 20:12
@coderabbitai

coderabbitaiBot commented Apr 14, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 8293af40-5596-4c25-b0d2-d6af154d8da7

📥 Commits

Reviewing files that changed from the base of the PR and between 5ae8ed6 and f9c2e28.

📒 Files selected for processing (7)
  • .changeset/fiery-comics-shave.md
  • packages/cli-core/src/commands/init/format.ts
  • packages/cli-core/src/commands/init/skills.ts
  • packages/cli-core/src/lib/helpers/arrays.test.ts
  • packages/cli-core/src/lib/helpers/arrays.ts
  • packages/cli-core/src/lib/runners.test.ts
  • packages/cli-core/src/lib/runners.ts
✅ Files skipped from review due to trivial changes (2)
  • .changeset/fiery-comics-shave.md
  • packages/cli-core/src/lib/helpers/arrays.test.ts
🚧 Files skipped from review as they are similar to previous changes (4)
  • packages/cli-core/src/commands/init/format.ts
  • packages/cli-core/src/lib/runners.ts
  • packages/cli-core/src/lib/helpers/arrays.ts
  • packages/cli-core/src/lib/runners.test.ts

📝 Walkthrough

Walkthrough

Adds a NonEmptyArray<T> type and an isNonEmpty() type guard with tests. preferredRunner() signature changed to require available: NonEmptyArray<Runner> and to always return a Runner (removed empty-array handling). Call sites in init/format and init/skills now gate with isNonEmpty(available) and no longer treat preferredRunner() as possibly undefined. Runner tests were updated to use non-empty inputs and removed empty-list assertions. A new empty changeset file was added.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 75.00% 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 nameStatusExplanation
Title check✅ PassedThe title accurately describes the main changes: adding a NonEmptyArray helper utility and tightening the preferredRunner function signature.
Description check✅ PassedThe description is directly related to the changeset, providing a clear summary of the new utilities added and the function signature changes made.

✏️ 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.

@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from b30a809 to 6e469c7CompareApril 14, 2026 21:35
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch 2 times, most recently from c7f94fa to 78613e5CompareApril 15, 2026 20:06
@changeset-bot

changeset-botBot commented Apr 15, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: f9c2e28

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

@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 78613e5 to 5ae8ed6CompareApril 15, 2026 21:13
Adds `lib/helpers/arrays.ts` with a NonEmptyArray<T> type alias and an
isNonEmpty<T> type-guard predicate. Tightens preferredRunner to require
a NonEmptyArray<Runner> input and return Runner (no longer | undefined).
Updates the two call sites (init/skills.ts, init/format.ts) to use
isNonEmpty for the non-empty check, and drops the now-provably-unreachable
defensive `if (!preferred)` branch in skills.ts. The type system enforces
the invariant that runtime code previously checked.
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 5ae8ed6 to f9c2e28CompareApril 15, 2026 22:23
@wyattjoh
wyattjoh merged commit 3b840b8 into mainApr 15, 2026
10 checks passed
@wyattjoh
wyattjoh deleted the feat/lib-non-empty-array branch April 15, 2026 22:38
Sign up for freeto 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.

2 participants

@wyattjoh@rafa-thayto
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
feat(lib): add NonEmptyArray helper, tighten preferredRunner by wyattjoh · Pull Request #125 · clerk/cli · GitHub
Skip to content

feat(lib): add NonEmptyArray helper, tighten preferredRunner - #125

Merged
wyattjoh merged 1 commit into
mainfrom
feat/lib-non-empty-array
Apr 15, 2026
Merged

feat(lib): add NonEmptyArray helper, tighten preferredRunner#125
wyattjoh merged 1 commit into
mainfrom
feat/lib-non-empty-array

Conversation

@wyattjoh

Copy link
Copy Markdown
Contributor

Summary

  • Adds lib/helpers/arrays.ts with a NonEmptyArray<T> type alias and an isNonEmpty<T> type-guard predicate.
  • Tightens preferredRunner to require a NonEmptyArray<Runner> input and return Runner (no longer | undefined).
  • Updates the two call sites (init/skills.ts, init/format.ts) to use isNonEmpty for the non-empty check, and drops the now-provably-unreachable defensive if (!preferred) branch in skills.ts. The type system enforces the invariant that runtime code previously checked.

Stacked on #124.

Test plan

  • bun run test passes (60 passed)
  • bun test packages/cli-core/src/lib/helpers/arrays.test.ts covers the type guard

@wyattjoh

wyattjoh commented Apr 7, 2026

Copy link
Copy Markdown
ContributorAuthor

@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from 47dc327 to 21072f9CompareApril 7, 2026 19:40
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 26405f7 to 1e94859CompareApril 7, 2026 19:40
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from 21072f9 to d52abd4CompareApril 7, 2026 20:23
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch 2 times, most recently from 670617f to 10da1dbCompareApril 7, 2026 21:58
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch 2 times, most recently from 133bd4a to ecae3c7CompareApril 8, 2026 21:39
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch 2 times, most recently from a4185bb to a45b262CompareApril 9, 2026 20:23
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from ecae3c7 to 3f687c8CompareApril 9, 2026 20:23
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from a45b262 to c95a429CompareApril 9, 2026 22:54
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch 2 times, most recently from 207adbd to dcb4afaCompareApril 11, 2026 06:48
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from c95a429 to 79d474fCompareApril 11, 2026 06:48
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from dcb4afa to d700db1CompareApril 11, 2026 06:54
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch 2 times, most recently from 08653a1 to a8903e7CompareApril 13, 2026 20:01
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch 2 times, most recently from 0262797 to 523c58aCompareApril 13, 2026 22:49
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from a8903e7 to 190c5d5CompareApril 13, 2026 22:49
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from 523c58a to 3a3375eCompareApril 13, 2026 23:20
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 190c5d5 to 09c9f9bCompareApril 13, 2026 23:20
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from 3a3375e to f7ab840CompareApril 14, 2026 18:56
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 09c9f9b to 59ca3dbCompareApril 14, 2026 18:56
Base automatically changed from refactor/format-uses-runners to mainApril 14, 2026 19:13
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 59ca3db to 5f34cb8CompareApril 14, 2026 20:09
@wyattjoh
wyattjoh marked this pull request as ready for review April 14, 2026 20:10
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 5f34cb8 to b30a809CompareApril 14, 2026 20:12
@coderabbitai

coderabbitaiBot commented Apr 14, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 8293af40-5596-4c25-b0d2-d6af154d8da7

📥 Commits

Reviewing files that changed from the base of the PR and between 5ae8ed6 and f9c2e28.

📒 Files selected for processing (7)
  • .changeset/fiery-comics-shave.md
  • packages/cli-core/src/commands/init/format.ts
  • packages/cli-core/src/commands/init/skills.ts
  • packages/cli-core/src/lib/helpers/arrays.test.ts
  • packages/cli-core/src/lib/helpers/arrays.ts
  • packages/cli-core/src/lib/runners.test.ts
  • packages/cli-core/src/lib/runners.ts
✅ Files skipped from review due to trivial changes (2)
  • .changeset/fiery-comics-shave.md
  • packages/cli-core/src/lib/helpers/arrays.test.ts
🚧 Files skipped from review as they are similar to previous changes (4)
  • packages/cli-core/src/commands/init/format.ts
  • packages/cli-core/src/lib/runners.ts
  • packages/cli-core/src/lib/helpers/arrays.ts
  • packages/cli-core/src/lib/runners.test.ts

📝 Walkthrough

Walkthrough

Adds a NonEmptyArray<T> type and an isNonEmpty() type guard with tests. preferredRunner() signature changed to require available: NonEmptyArray<Runner> and to always return a Runner (removed empty-array handling). Call sites in init/format and init/skills now gate with isNonEmpty(available) and no longer treat preferredRunner() as possibly undefined. Runner tests were updated to use non-empty inputs and removed empty-list assertions. A new empty changeset file was added.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 75.00% 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 nameStatusExplanation
Title check✅ PassedThe title accurately describes the main changes: adding a NonEmptyArray helper utility and tightening the preferredRunner function signature.
Description check✅ PassedThe description is directly related to the changeset, providing a clear summary of the new utilities added and the function signature changes made.

✏️ 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.

@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from b30a809 to 6e469c7CompareApril 14, 2026 21:35
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch 2 times, most recently from c7f94fa to 78613e5CompareApril 15, 2026 20:06
@changeset-bot

changeset-botBot commented Apr 15, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: f9c2e28

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

@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 78613e5 to 5ae8ed6CompareApril 15, 2026 21:13
Adds `lib/helpers/arrays.ts` with a NonEmptyArray<T> type alias and an
isNonEmpty<T> type-guard predicate. Tightens preferredRunner to require
a NonEmptyArray<Runner> input and return Runner (no longer | undefined).
Updates the two call sites (init/skills.ts, init/format.ts) to use
isNonEmpty for the non-empty check, and drops the now-provably-unreachable
defensive `if (!preferred)` branch in skills.ts. The type system enforces
the invariant that runtime code previously checked.
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 5ae8ed6 to f9c2e28CompareApril 15, 2026 22:23
@wyattjoh
wyattjoh merged commit 3b840b8 into mainApr 15, 2026
10 checks passed
@wyattjoh
wyattjoh deleted the feat/lib-non-empty-array branch April 15, 2026 22:38
Sign up for freeto 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.

2 participants

@wyattjoh@rafa-thayto
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' feat(lib): add NonEmptyArray helper, tighten preferredRunner by wyattjoh · Pull Request #125 · clerk/cli · GitHub
Skip to content

feat(lib): add NonEmptyArray helper, tighten preferredRunner - #125

Merged
wyattjoh merged 1 commit into
mainfrom
feat/lib-non-empty-array
Apr 15, 2026
Merged

feat(lib): add NonEmptyArray helper, tighten preferredRunner#125
wyattjoh merged 1 commit into
mainfrom
feat/lib-non-empty-array

Conversation

@wyattjoh

Copy link
Copy Markdown
Contributor

Summary

  • Adds lib/helpers/arrays.ts with a NonEmptyArray<T> type alias and an isNonEmpty<T> type-guard predicate.
  • Tightens preferredRunner to require a NonEmptyArray<Runner> input and return Runner (no longer | undefined).
  • Updates the two call sites (init/skills.ts, init/format.ts) to use isNonEmpty for the non-empty check, and drops the now-provably-unreachable defensive if (!preferred) branch in skills.ts. The type system enforces the invariant that runtime code previously checked.

Stacked on #124.

Test plan

  • bun run test passes (60 passed)
  • bun test packages/cli-core/src/lib/helpers/arrays.test.ts covers the type guard

@wyattjoh

wyattjoh commented Apr 7, 2026

Copy link
Copy Markdown
ContributorAuthor

@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from 47dc327 to 21072f9CompareApril 7, 2026 19:40
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 26405f7 to 1e94859CompareApril 7, 2026 19:40
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from 21072f9 to d52abd4CompareApril 7, 2026 20:23
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch 2 times, most recently from 670617f to 10da1dbCompareApril 7, 2026 21:58
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch 2 times, most recently from 133bd4a to ecae3c7CompareApril 8, 2026 21:39
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch 2 times, most recently from a4185bb to a45b262CompareApril 9, 2026 20:23
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from ecae3c7 to 3f687c8CompareApril 9, 2026 20:23
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from a45b262 to c95a429CompareApril 9, 2026 22:54
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch 2 times, most recently from 207adbd to dcb4afaCompareApril 11, 2026 06:48
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from c95a429 to 79d474fCompareApril 11, 2026 06:48
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from dcb4afa to d700db1CompareApril 11, 2026 06:54
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch 2 times, most recently from 08653a1 to a8903e7CompareApril 13, 2026 20:01
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch 2 times, most recently from 0262797 to 523c58aCompareApril 13, 2026 22:49
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from a8903e7 to 190c5d5CompareApril 13, 2026 22:49
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from 523c58a to 3a3375eCompareApril 13, 2026 23:20
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 190c5d5 to 09c9f9bCompareApril 13, 2026 23:20
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from 3a3375e to f7ab840CompareApril 14, 2026 18:56
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 09c9f9b to 59ca3dbCompareApril 14, 2026 18:56
Base automatically changed from refactor/format-uses-runners to mainApril 14, 2026 19:13
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 59ca3db to 5f34cb8CompareApril 14, 2026 20:09
@wyattjoh
wyattjoh marked this pull request as ready for review April 14, 2026 20:10
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 5f34cb8 to b30a809CompareApril 14, 2026 20:12
@coderabbitai

coderabbitaiBot commented Apr 14, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 8293af40-5596-4c25-b0d2-d6af154d8da7

📥 Commits

Reviewing files that changed from the base of the PR and between 5ae8ed6 and f9c2e28.

📒 Files selected for processing (7)
  • .changeset/fiery-comics-shave.md
  • packages/cli-core/src/commands/init/format.ts
  • packages/cli-core/src/commands/init/skills.ts
  • packages/cli-core/src/lib/helpers/arrays.test.ts
  • packages/cli-core/src/lib/helpers/arrays.ts
  • packages/cli-core/src/lib/runners.test.ts
  • packages/cli-core/src/lib/runners.ts
✅ Files skipped from review due to trivial changes (2)
  • .changeset/fiery-comics-shave.md
  • packages/cli-core/src/lib/helpers/arrays.test.ts
🚧 Files skipped from review as they are similar to previous changes (4)
  • packages/cli-core/src/commands/init/format.ts
  • packages/cli-core/src/lib/runners.ts
  • packages/cli-core/src/lib/helpers/arrays.ts
  • packages/cli-core/src/lib/runners.test.ts

📝 Walkthrough

Walkthrough

Adds a NonEmptyArray<T> type and an isNonEmpty() type guard with tests. preferredRunner() signature changed to require available: NonEmptyArray<Runner> and to always return a Runner (removed empty-array handling). Call sites in init/format and init/skills now gate with isNonEmpty(available) and no longer treat preferredRunner() as possibly undefined. Runner tests were updated to use non-empty inputs and removed empty-list assertions. A new empty changeset file was added.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 75.00% 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 nameStatusExplanation
Title check✅ PassedThe title accurately describes the main changes: adding a NonEmptyArray helper utility and tightening the preferredRunner function signature.
Description check✅ PassedThe description is directly related to the changeset, providing a clear summary of the new utilities added and the function signature changes made.

✏️ 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.

@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from b30a809 to 6e469c7CompareApril 14, 2026 21:35
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch 2 times, most recently from c7f94fa to 78613e5CompareApril 15, 2026 20:06
@changeset-bot

changeset-botBot commented Apr 15, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: f9c2e28

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

@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 78613e5 to 5ae8ed6CompareApril 15, 2026 21:13
Adds `lib/helpers/arrays.ts` with a NonEmptyArray<T> type alias and an
isNonEmpty<T> type-guard predicate. Tightens preferredRunner to require
a NonEmptyArray<Runner> input and return Runner (no longer | undefined).
Updates the two call sites (init/skills.ts, init/format.ts) to use
isNonEmpty for the non-empty check, and drops the now-provably-unreachable
defensive `if (!preferred)` branch in skills.ts. The type system enforces
the invariant that runtime code previously checked.
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 5ae8ed6 to f9c2e28CompareApril 15, 2026 22:23
@wyattjoh
wyattjoh merged commit 3b840b8 into mainApr 15, 2026
10 checks passed
@wyattjoh
wyattjoh deleted the feat/lib-non-empty-array branch April 15, 2026 22:38
Sign up for freeto 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.

2 participants

@wyattjoh@rafa-thayto
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' feat(lib): add NonEmptyArray helper, tighten preferredRunner by wyattjoh · Pull Request #125 · clerk/cli · GitHub
Skip to content

feat(lib): add NonEmptyArray helper, tighten preferredRunner - #125

Merged
wyattjoh merged 1 commit into
mainfrom
feat/lib-non-empty-array
Apr 15, 2026
Merged

feat(lib): add NonEmptyArray helper, tighten preferredRunner#125
wyattjoh merged 1 commit into
mainfrom
feat/lib-non-empty-array

Conversation

@wyattjoh

Copy link
Copy Markdown
Contributor

Summary

  • Adds lib/helpers/arrays.ts with a NonEmptyArray<T> type alias and an isNonEmpty<T> type-guard predicate.
  • Tightens preferredRunner to require a NonEmptyArray<Runner> input and return Runner (no longer | undefined).
  • Updates the two call sites (init/skills.ts, init/format.ts) to use isNonEmpty for the non-empty check, and drops the now-provably-unreachable defensive if (!preferred) branch in skills.ts. The type system enforces the invariant that runtime code previously checked.

Stacked on #124.

Test plan

  • bun run test passes (60 passed)
  • bun test packages/cli-core/src/lib/helpers/arrays.test.ts covers the type guard

@wyattjoh

wyattjoh commented Apr 7, 2026

Copy link
Copy Markdown
ContributorAuthor

@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from 47dc327 to 21072f9CompareApril 7, 2026 19:40
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 26405f7 to 1e94859CompareApril 7, 2026 19:40
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from 21072f9 to d52abd4CompareApril 7, 2026 20:23
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch 2 times, most recently from 670617f to 10da1dbCompareApril 7, 2026 21:58
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch 2 times, most recently from 133bd4a to ecae3c7CompareApril 8, 2026 21:39
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch 2 times, most recently from a4185bb to a45b262CompareApril 9, 2026 20:23
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from ecae3c7 to 3f687c8CompareApril 9, 2026 20:23
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from a45b262 to c95a429CompareApril 9, 2026 22:54
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch 2 times, most recently from 207adbd to dcb4afaCompareApril 11, 2026 06:48
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from c95a429 to 79d474fCompareApril 11, 2026 06:48
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from dcb4afa to d700db1CompareApril 11, 2026 06:54
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch 2 times, most recently from 08653a1 to a8903e7CompareApril 13, 2026 20:01
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch 2 times, most recently from 0262797 to 523c58aCompareApril 13, 2026 22:49
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from a8903e7 to 190c5d5CompareApril 13, 2026 22:49
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from 523c58a to 3a3375eCompareApril 13, 2026 23:20
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 190c5d5 to 09c9f9bCompareApril 13, 2026 23:20
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from 3a3375e to f7ab840CompareApril 14, 2026 18:56
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 09c9f9b to 59ca3dbCompareApril 14, 2026 18:56
Base automatically changed from refactor/format-uses-runners to mainApril 14, 2026 19:13
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 59ca3db to 5f34cb8CompareApril 14, 2026 20:09
@wyattjoh
wyattjoh marked this pull request as ready for review April 14, 2026 20:10
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 5f34cb8 to b30a809CompareApril 14, 2026 20:12
@coderabbitai

coderabbitaiBot commented Apr 14, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 8293af40-5596-4c25-b0d2-d6af154d8da7

📥 Commits

Reviewing files that changed from the base of the PR and between 5ae8ed6 and f9c2e28.

📒 Files selected for processing (7)
  • .changeset/fiery-comics-shave.md
  • packages/cli-core/src/commands/init/format.ts
  • packages/cli-core/src/commands/init/skills.ts
  • packages/cli-core/src/lib/helpers/arrays.test.ts
  • packages/cli-core/src/lib/helpers/arrays.ts
  • packages/cli-core/src/lib/runners.test.ts
  • packages/cli-core/src/lib/runners.ts
✅ Files skipped from review due to trivial changes (2)
  • .changeset/fiery-comics-shave.md
  • packages/cli-core/src/lib/helpers/arrays.test.ts
🚧 Files skipped from review as they are similar to previous changes (4)
  • packages/cli-core/src/commands/init/format.ts
  • packages/cli-core/src/lib/runners.ts
  • packages/cli-core/src/lib/helpers/arrays.ts
  • packages/cli-core/src/lib/runners.test.ts

📝 Walkthrough

Walkthrough

Adds a NonEmptyArray<T> type and an isNonEmpty() type guard with tests. preferredRunner() signature changed to require available: NonEmptyArray<Runner> and to always return a Runner (removed empty-array handling). Call sites in init/format and init/skills now gate with isNonEmpty(available) and no longer treat preferredRunner() as possibly undefined. Runner tests were updated to use non-empty inputs and removed empty-list assertions. A new empty changeset file was added.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 75.00% 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 nameStatusExplanation
Title check✅ PassedThe title accurately describes the main changes: adding a NonEmptyArray helper utility and tightening the preferredRunner function signature.
Description check✅ PassedThe description is directly related to the changeset, providing a clear summary of the new utilities added and the function signature changes made.

✏️ 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.

@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from b30a809 to 6e469c7CompareApril 14, 2026 21:35
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch 2 times, most recently from c7f94fa to 78613e5CompareApril 15, 2026 20:06
@changeset-bot

changeset-botBot commented Apr 15, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: f9c2e28

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

@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 78613e5 to 5ae8ed6CompareApril 15, 2026 21:13
Adds `lib/helpers/arrays.ts` with a NonEmptyArray<T> type alias and an
isNonEmpty<T> type-guard predicate. Tightens preferredRunner to require
a NonEmptyArray<Runner> input and return Runner (no longer | undefined).
Updates the two call sites (init/skills.ts, init/format.ts) to use
isNonEmpty for the non-empty check, and drops the now-provably-unreachable
defensive `if (!preferred)` branch in skills.ts. The type system enforces
the invariant that runtime code previously checked.
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 5ae8ed6 to f9c2e28CompareApril 15, 2026 22:23
@wyattjoh
wyattjoh merged commit 3b840b8 into mainApr 15, 2026
10 checks passed
@wyattjoh
wyattjoh deleted the feat/lib-non-empty-array branch April 15, 2026 22:38
Sign up for freeto 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.

2 participants

@wyattjoh@rafa-thayto
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' feat(lib): add NonEmptyArray helper, tighten preferredRunner by wyattjoh · Pull Request #125 · clerk/cli · GitHub
Skip to content

feat(lib): add NonEmptyArray helper, tighten preferredRunner - #125

Merged
wyattjoh merged 1 commit into
mainfrom
feat/lib-non-empty-array
Apr 15, 2026
Merged

feat(lib): add NonEmptyArray helper, tighten preferredRunner#125
wyattjoh merged 1 commit into
mainfrom
feat/lib-non-empty-array

Conversation

@wyattjoh

Copy link
Copy Markdown
Contributor

Summary

  • Adds lib/helpers/arrays.ts with a NonEmptyArray<T> type alias and an isNonEmpty<T> type-guard predicate.
  • Tightens preferredRunner to require a NonEmptyArray<Runner> input and return Runner (no longer | undefined).
  • Updates the two call sites (init/skills.ts, init/format.ts) to use isNonEmpty for the non-empty check, and drops the now-provably-unreachable defensive if (!preferred) branch in skills.ts. The type system enforces the invariant that runtime code previously checked.

Stacked on #124.

Test plan

  • bun run test passes (60 passed)
  • bun test packages/cli-core/src/lib/helpers/arrays.test.ts covers the type guard

@wyattjoh

wyattjoh commented Apr 7, 2026

Copy link
Copy Markdown
ContributorAuthor

@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from 47dc327 to 21072f9CompareApril 7, 2026 19:40
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 26405f7 to 1e94859CompareApril 7, 2026 19:40
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from 21072f9 to d52abd4CompareApril 7, 2026 20:23
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch 2 times, most recently from 670617f to 10da1dbCompareApril 7, 2026 21:58
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch 2 times, most recently from 133bd4a to ecae3c7CompareApril 8, 2026 21:39
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch 2 times, most recently from a4185bb to a45b262CompareApril 9, 2026 20:23
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from ecae3c7 to 3f687c8CompareApril 9, 2026 20:23
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from a45b262 to c95a429CompareApril 9, 2026 22:54
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch 2 times, most recently from 207adbd to dcb4afaCompareApril 11, 2026 06:48
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from c95a429 to 79d474fCompareApril 11, 2026 06:48
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from dcb4afa to d700db1CompareApril 11, 2026 06:54
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch 2 times, most recently from 08653a1 to a8903e7CompareApril 13, 2026 20:01
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch 2 times, most recently from 0262797 to 523c58aCompareApril 13, 2026 22:49
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from a8903e7 to 190c5d5CompareApril 13, 2026 22:49
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from 523c58a to 3a3375eCompareApril 13, 2026 23:20
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 190c5d5 to 09c9f9bCompareApril 13, 2026 23:20
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from 3a3375e to f7ab840CompareApril 14, 2026 18:56
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 09c9f9b to 59ca3dbCompareApril 14, 2026 18:56
Base automatically changed from refactor/format-uses-runners to mainApril 14, 2026 19:13
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 59ca3db to 5f34cb8CompareApril 14, 2026 20:09
@wyattjoh
wyattjoh marked this pull request as ready for review April 14, 2026 20:10
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 5f34cb8 to b30a809CompareApril 14, 2026 20:12
@coderabbitai

coderabbitaiBot commented Apr 14, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 8293af40-5596-4c25-b0d2-d6af154d8da7

📥 Commits

Reviewing files that changed from the base of the PR and between 5ae8ed6 and f9c2e28.

📒 Files selected for processing (7)
  • .changeset/fiery-comics-shave.md
  • packages/cli-core/src/commands/init/format.ts
  • packages/cli-core/src/commands/init/skills.ts
  • packages/cli-core/src/lib/helpers/arrays.test.ts
  • packages/cli-core/src/lib/helpers/arrays.ts
  • packages/cli-core/src/lib/runners.test.ts
  • packages/cli-core/src/lib/runners.ts
✅ Files skipped from review due to trivial changes (2)
  • .changeset/fiery-comics-shave.md
  • packages/cli-core/src/lib/helpers/arrays.test.ts
🚧 Files skipped from review as they are similar to previous changes (4)
  • packages/cli-core/src/commands/init/format.ts
  • packages/cli-core/src/lib/runners.ts
  • packages/cli-core/src/lib/helpers/arrays.ts
  • packages/cli-core/src/lib/runners.test.ts

📝 Walkthrough

Walkthrough

Adds a NonEmptyArray<T> type and an isNonEmpty() type guard with tests. preferredRunner() signature changed to require available: NonEmptyArray<Runner> and to always return a Runner (removed empty-array handling). Call sites in init/format and init/skills now gate with isNonEmpty(available) and no longer treat preferredRunner() as possibly undefined. Runner tests were updated to use non-empty inputs and removed empty-list assertions. A new empty changeset file was added.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 75.00% 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 nameStatusExplanation
Title check✅ PassedThe title accurately describes the main changes: adding a NonEmptyArray helper utility and tightening the preferredRunner function signature.
Description check✅ PassedThe description is directly related to the changeset, providing a clear summary of the new utilities added and the function signature changes made.

✏️ 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.

@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from b30a809 to 6e469c7CompareApril 14, 2026 21:35
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch 2 times, most recently from c7f94fa to 78613e5CompareApril 15, 2026 20:06
@changeset-bot

changeset-botBot commented Apr 15, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: f9c2e28

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

@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 78613e5 to 5ae8ed6CompareApril 15, 2026 21:13
Adds `lib/helpers/arrays.ts` with a NonEmptyArray<T> type alias and an
isNonEmpty<T> type-guard predicate. Tightens preferredRunner to require
a NonEmptyArray<Runner> input and return Runner (no longer | undefined).
Updates the two call sites (init/skills.ts, init/format.ts) to use
isNonEmpty for the non-empty check, and drops the now-provably-unreachable
defensive `if (!preferred)` branch in skills.ts. The type system enforces
the invariant that runtime code previously checked.
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 5ae8ed6 to f9c2e28CompareApril 15, 2026 22:23
@wyattjoh
wyattjoh merged commit 3b840b8 into mainApr 15, 2026
10 checks passed
@wyattjoh
wyattjoh deleted the feat/lib-non-empty-array branch April 15, 2026 22:38
Sign up for freeto 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.

2 participants

@wyattjoh@rafa-thayto
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' feat(lib): add NonEmptyArray helper, tighten preferredRunner by wyattjoh · Pull Request #125 · clerk/cli · GitHub
Skip to content

feat(lib): add NonEmptyArray helper, tighten preferredRunner - #125

Merged
wyattjoh merged 1 commit into
mainfrom
feat/lib-non-empty-array
Apr 15, 2026
Merged

feat(lib): add NonEmptyArray helper, tighten preferredRunner#125
wyattjoh merged 1 commit into
mainfrom
feat/lib-non-empty-array

Conversation

@wyattjoh

Copy link
Copy Markdown
Contributor

Summary

  • Adds lib/helpers/arrays.ts with a NonEmptyArray<T> type alias and an isNonEmpty<T> type-guard predicate.
  • Tightens preferredRunner to require a NonEmptyArray<Runner> input and return Runner (no longer | undefined).
  • Updates the two call sites (init/skills.ts, init/format.ts) to use isNonEmpty for the non-empty check, and drops the now-provably-unreachable defensive if (!preferred) branch in skills.ts. The type system enforces the invariant that runtime code previously checked.

Stacked on #124.

Test plan

  • bun run test passes (60 passed)
  • bun test packages/cli-core/src/lib/helpers/arrays.test.ts covers the type guard

@wyattjoh

wyattjoh commented Apr 7, 2026

Copy link
Copy Markdown
ContributorAuthor

@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from 47dc327 to 21072f9CompareApril 7, 2026 19:40
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 26405f7 to 1e94859CompareApril 7, 2026 19:40
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from 21072f9 to d52abd4CompareApril 7, 2026 20:23
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch 2 times, most recently from 670617f to 10da1dbCompareApril 7, 2026 21:58
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch 2 times, most recently from 133bd4a to ecae3c7CompareApril 8, 2026 21:39
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch 2 times, most recently from a4185bb to a45b262CompareApril 9, 2026 20:23
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from ecae3c7 to 3f687c8CompareApril 9, 2026 20:23
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from a45b262 to c95a429CompareApril 9, 2026 22:54
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch 2 times, most recently from 207adbd to dcb4afaCompareApril 11, 2026 06:48
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from c95a429 to 79d474fCompareApril 11, 2026 06:48
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from dcb4afa to d700db1CompareApril 11, 2026 06:54
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch 2 times, most recently from 08653a1 to a8903e7CompareApril 13, 2026 20:01
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch 2 times, most recently from 0262797 to 523c58aCompareApril 13, 2026 22:49
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from a8903e7 to 190c5d5CompareApril 13, 2026 22:49
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from 523c58a to 3a3375eCompareApril 13, 2026 23:20
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 190c5d5 to 09c9f9bCompareApril 13, 2026 23:20
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from 3a3375e to f7ab840CompareApril 14, 2026 18:56
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 09c9f9b to 59ca3dbCompareApril 14, 2026 18:56
Base automatically changed from refactor/format-uses-runners to mainApril 14, 2026 19:13
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 59ca3db to 5f34cb8CompareApril 14, 2026 20:09
@wyattjoh
wyattjoh marked this pull request as ready for review April 14, 2026 20:10
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 5f34cb8 to b30a809CompareApril 14, 2026 20:12
@coderabbitai

coderabbitaiBot commented Apr 14, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 8293af40-5596-4c25-b0d2-d6af154d8da7

📥 Commits

Reviewing files that changed from the base of the PR and between 5ae8ed6 and f9c2e28.

📒 Files selected for processing (7)
  • .changeset/fiery-comics-shave.md
  • packages/cli-core/src/commands/init/format.ts
  • packages/cli-core/src/commands/init/skills.ts
  • packages/cli-core/src/lib/helpers/arrays.test.ts
  • packages/cli-core/src/lib/helpers/arrays.ts
  • packages/cli-core/src/lib/runners.test.ts
  • packages/cli-core/src/lib/runners.ts
✅ Files skipped from review due to trivial changes (2)
  • .changeset/fiery-comics-shave.md
  • packages/cli-core/src/lib/helpers/arrays.test.ts
🚧 Files skipped from review as they are similar to previous changes (4)
  • packages/cli-core/src/commands/init/format.ts
  • packages/cli-core/src/lib/runners.ts
  • packages/cli-core/src/lib/helpers/arrays.ts
  • packages/cli-core/src/lib/runners.test.ts

📝 Walkthrough

Walkthrough

Adds a NonEmptyArray<T> type and an isNonEmpty() type guard with tests. preferredRunner() signature changed to require available: NonEmptyArray<Runner> and to always return a Runner (removed empty-array handling). Call sites in init/format and init/skills now gate with isNonEmpty(available) and no longer treat preferredRunner() as possibly undefined. Runner tests were updated to use non-empty inputs and removed empty-list assertions. A new empty changeset file was added.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 75.00% 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 nameStatusExplanation
Title check✅ PassedThe title accurately describes the main changes: adding a NonEmptyArray helper utility and tightening the preferredRunner function signature.
Description check✅ PassedThe description is directly related to the changeset, providing a clear summary of the new utilities added and the function signature changes made.

✏️ 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.

@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from b30a809 to 6e469c7CompareApril 14, 2026 21:35
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch 2 times, most recently from c7f94fa to 78613e5CompareApril 15, 2026 20:06
@changeset-bot

changeset-botBot commented Apr 15, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: f9c2e28

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

@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 78613e5 to 5ae8ed6CompareApril 15, 2026 21:13
Adds `lib/helpers/arrays.ts` with a NonEmptyArray<T> type alias and an
isNonEmpty<T> type-guard predicate. Tightens preferredRunner to require
a NonEmptyArray<Runner> input and return Runner (no longer | undefined).
Updates the two call sites (init/skills.ts, init/format.ts) to use
isNonEmpty for the non-empty check, and drops the now-provably-unreachable
defensive `if (!preferred)` branch in skills.ts. The type system enforces
the invariant that runtime code previously checked.
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 5ae8ed6 to f9c2e28CompareApril 15, 2026 22:23
@wyattjoh
wyattjoh merged commit 3b840b8 into mainApr 15, 2026
10 checks passed
@wyattjoh
wyattjoh deleted the feat/lib-non-empty-array branch April 15, 2026 22:38
Sign up for freeto 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.

2 participants

@wyattjoh@rafa-thayto
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' feat(lib): add NonEmptyArray helper, tighten preferredRunner by wyattjoh · Pull Request #125 · clerk/cli · GitHub
Skip to content

feat(lib): add NonEmptyArray helper, tighten preferredRunner - #125

Merged
wyattjoh merged 1 commit into
mainfrom
feat/lib-non-empty-array
Apr 15, 2026
Merged

feat(lib): add NonEmptyArray helper, tighten preferredRunner#125
wyattjoh merged 1 commit into
mainfrom
feat/lib-non-empty-array

Conversation

@wyattjoh

Copy link
Copy Markdown
Contributor

Summary

  • Adds lib/helpers/arrays.ts with a NonEmptyArray<T> type alias and an isNonEmpty<T> type-guard predicate.
  • Tightens preferredRunner to require a NonEmptyArray<Runner> input and return Runner (no longer | undefined).
  • Updates the two call sites (init/skills.ts, init/format.ts) to use isNonEmpty for the non-empty check, and drops the now-provably-unreachable defensive if (!preferred) branch in skills.ts. The type system enforces the invariant that runtime code previously checked.

Stacked on #124.

Test plan

  • bun run test passes (60 passed)
  • bun test packages/cli-core/src/lib/helpers/arrays.test.ts covers the type guard

@wyattjoh

wyattjoh commented Apr 7, 2026

Copy link
Copy Markdown
ContributorAuthor

@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from 47dc327 to 21072f9CompareApril 7, 2026 19:40
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 26405f7 to 1e94859CompareApril 7, 2026 19:40
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from 21072f9 to d52abd4CompareApril 7, 2026 20:23
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch 2 times, most recently from 670617f to 10da1dbCompareApril 7, 2026 21:58
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch 2 times, most recently from 133bd4a to ecae3c7CompareApril 8, 2026 21:39
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch 2 times, most recently from a4185bb to a45b262CompareApril 9, 2026 20:23
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from ecae3c7 to 3f687c8CompareApril 9, 2026 20:23
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from a45b262 to c95a429CompareApril 9, 2026 22:54
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch 2 times, most recently from 207adbd to dcb4afaCompareApril 11, 2026 06:48
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from c95a429 to 79d474fCompareApril 11, 2026 06:48
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from dcb4afa to d700db1CompareApril 11, 2026 06:54
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch 2 times, most recently from 08653a1 to a8903e7CompareApril 13, 2026 20:01
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch 2 times, most recently from 0262797 to 523c58aCompareApril 13, 2026 22:49
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from a8903e7 to 190c5d5CompareApril 13, 2026 22:49
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from 523c58a to 3a3375eCompareApril 13, 2026 23:20
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 190c5d5 to 09c9f9bCompareApril 13, 2026 23:20
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from 3a3375e to f7ab840CompareApril 14, 2026 18:56
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 09c9f9b to 59ca3dbCompareApril 14, 2026 18:56
Base automatically changed from refactor/format-uses-runners to mainApril 14, 2026 19:13
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 59ca3db to 5f34cb8CompareApril 14, 2026 20:09
@wyattjoh
wyattjoh marked this pull request as ready for review April 14, 2026 20:10
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 5f34cb8 to b30a809CompareApril 14, 2026 20:12
@coderabbitai

coderabbitaiBot commented Apr 14, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 8293af40-5596-4c25-b0d2-d6af154d8da7

📥 Commits

Reviewing files that changed from the base of the PR and between 5ae8ed6 and f9c2e28.

📒 Files selected for processing (7)
  • .changeset/fiery-comics-shave.md
  • packages/cli-core/src/commands/init/format.ts
  • packages/cli-core/src/commands/init/skills.ts
  • packages/cli-core/src/lib/helpers/arrays.test.ts
  • packages/cli-core/src/lib/helpers/arrays.ts
  • packages/cli-core/src/lib/runners.test.ts
  • packages/cli-core/src/lib/runners.ts
✅ Files skipped from review due to trivial changes (2)
  • .changeset/fiery-comics-shave.md
  • packages/cli-core/src/lib/helpers/arrays.test.ts
🚧 Files skipped from review as they are similar to previous changes (4)
  • packages/cli-core/src/commands/init/format.ts
  • packages/cli-core/src/lib/runners.ts
  • packages/cli-core/src/lib/helpers/arrays.ts
  • packages/cli-core/src/lib/runners.test.ts

📝 Walkthrough

Walkthrough

Adds a NonEmptyArray<T> type and an isNonEmpty() type guard with tests. preferredRunner() signature changed to require available: NonEmptyArray<Runner> and to always return a Runner (removed empty-array handling). Call sites in init/format and init/skills now gate with isNonEmpty(available) and no longer treat preferredRunner() as possibly undefined. Runner tests were updated to use non-empty inputs and removed empty-list assertions. A new empty changeset file was added.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 75.00% 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 nameStatusExplanation
Title check✅ PassedThe title accurately describes the main changes: adding a NonEmptyArray helper utility and tightening the preferredRunner function signature.
Description check✅ PassedThe description is directly related to the changeset, providing a clear summary of the new utilities added and the function signature changes made.

✏️ 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.

@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from b30a809 to 6e469c7CompareApril 14, 2026 21:35
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch 2 times, most recently from c7f94fa to 78613e5CompareApril 15, 2026 20:06
@changeset-bot

changeset-botBot commented Apr 15, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: f9c2e28

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

@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 78613e5 to 5ae8ed6CompareApril 15, 2026 21:13
Adds `lib/helpers/arrays.ts` with a NonEmptyArray<T> type alias and an
isNonEmpty<T> type-guard predicate. Tightens preferredRunner to require
a NonEmptyArray<Runner> input and return Runner (no longer | undefined).
Updates the two call sites (init/skills.ts, init/format.ts) to use
isNonEmpty for the non-empty check, and drops the now-provably-unreachable
defensive `if (!preferred)` branch in skills.ts. The type system enforces
the invariant that runtime code previously checked.
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 5ae8ed6 to f9c2e28CompareApril 15, 2026 22:23
@wyattjoh
wyattjoh merged commit 3b840b8 into mainApr 15, 2026
10 checks passed
@wyattjoh
wyattjoh deleted the feat/lib-non-empty-array branch April 15, 2026 22:38
Sign up for freeto 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.

2 participants

@wyattjoh@rafa-thayto
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); feat(lib): add NonEmptyArray helper, tighten preferredRunner by wyattjoh · Pull Request #125 · clerk/cli · GitHub
Skip to content

feat(lib): add NonEmptyArray helper, tighten preferredRunner - #125

Merged
wyattjoh merged 1 commit into
mainfrom
feat/lib-non-empty-array
Apr 15, 2026
Merged

feat(lib): add NonEmptyArray helper, tighten preferredRunner#125
wyattjoh merged 1 commit into
mainfrom
feat/lib-non-empty-array

Conversation

@wyattjoh

Copy link
Copy Markdown
Contributor

Summary

  • Adds lib/helpers/arrays.ts with a NonEmptyArray<T> type alias and an isNonEmpty<T> type-guard predicate.
  • Tightens preferredRunner to require a NonEmptyArray<Runner> input and return Runner (no longer | undefined).
  • Updates the two call sites (init/skills.ts, init/format.ts) to use isNonEmpty for the non-empty check, and drops the now-provably-unreachable defensive if (!preferred) branch in skills.ts. The type system enforces the invariant that runtime code previously checked.

Stacked on #124.

Test plan

  • bun run test passes (60 passed)
  • bun test packages/cli-core/src/lib/helpers/arrays.test.ts covers the type guard

@wyattjoh

wyattjoh commented Apr 7, 2026

Copy link
Copy Markdown
ContributorAuthor

@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from 47dc327 to 21072f9CompareApril 7, 2026 19:40
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 26405f7 to 1e94859CompareApril 7, 2026 19:40
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from 21072f9 to d52abd4CompareApril 7, 2026 20:23
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch 2 times, most recently from 670617f to 10da1dbCompareApril 7, 2026 21:58
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch 2 times, most recently from 133bd4a to ecae3c7CompareApril 8, 2026 21:39
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch 2 times, most recently from a4185bb to a45b262CompareApril 9, 2026 20:23
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from ecae3c7 to 3f687c8CompareApril 9, 2026 20:23
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from a45b262 to c95a429CompareApril 9, 2026 22:54
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch 2 times, most recently from 207adbd to dcb4afaCompareApril 11, 2026 06:48
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from c95a429 to 79d474fCompareApril 11, 2026 06:48
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from dcb4afa to d700db1CompareApril 11, 2026 06:54
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch 2 times, most recently from 08653a1 to a8903e7CompareApril 13, 2026 20:01
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch 2 times, most recently from 0262797 to 523c58aCompareApril 13, 2026 22:49
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from a8903e7 to 190c5d5CompareApril 13, 2026 22:49
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from 523c58a to 3a3375eCompareApril 13, 2026 23:20
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 190c5d5 to 09c9f9bCompareApril 13, 2026 23:20
@wyattjoh
wyattjohforce-pushed the refactor/format-uses-runners branch from 3a3375e to f7ab840CompareApril 14, 2026 18:56
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 09c9f9b to 59ca3dbCompareApril 14, 2026 18:56
Base automatically changed from refactor/format-uses-runners to mainApril 14, 2026 19:13
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 59ca3db to 5f34cb8CompareApril 14, 2026 20:09
@wyattjoh
wyattjoh marked this pull request as ready for review April 14, 2026 20:10
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 5f34cb8 to b30a809CompareApril 14, 2026 20:12
@coderabbitai

coderabbitaiBot commented Apr 14, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 8293af40-5596-4c25-b0d2-d6af154d8da7

📥 Commits

Reviewing files that changed from the base of the PR and between 5ae8ed6 and f9c2e28.

📒 Files selected for processing (7)
  • .changeset/fiery-comics-shave.md
  • packages/cli-core/src/commands/init/format.ts
  • packages/cli-core/src/commands/init/skills.ts
  • packages/cli-core/src/lib/helpers/arrays.test.ts
  • packages/cli-core/src/lib/helpers/arrays.ts
  • packages/cli-core/src/lib/runners.test.ts
  • packages/cli-core/src/lib/runners.ts
✅ Files skipped from review due to trivial changes (2)
  • .changeset/fiery-comics-shave.md
  • packages/cli-core/src/lib/helpers/arrays.test.ts
🚧 Files skipped from review as they are similar to previous changes (4)
  • packages/cli-core/src/commands/init/format.ts
  • packages/cli-core/src/lib/runners.ts
  • packages/cli-core/src/lib/helpers/arrays.ts
  • packages/cli-core/src/lib/runners.test.ts

📝 Walkthrough

Walkthrough

Adds a NonEmptyArray<T> type and an isNonEmpty() type guard with tests. preferredRunner() signature changed to require available: NonEmptyArray<Runner> and to always return a Runner (removed empty-array handling). Call sites in init/format and init/skills now gate with isNonEmpty(available) and no longer treat preferredRunner() as possibly undefined. Runner tests were updated to use non-empty inputs and removed empty-list assertions. A new empty changeset file was added.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 75.00% 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 nameStatusExplanation
Title check✅ PassedThe title accurately describes the main changes: adding a NonEmptyArray helper utility and tightening the preferredRunner function signature.
Description check✅ PassedThe description is directly related to the changeset, providing a clear summary of the new utilities added and the function signature changes made.

✏️ 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.

@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from b30a809 to 6e469c7CompareApril 14, 2026 21:35
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch 2 times, most recently from c7f94fa to 78613e5CompareApril 15, 2026 20:06
@changeset-bot

changeset-botBot commented Apr 15, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: f9c2e28

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

@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 78613e5 to 5ae8ed6CompareApril 15, 2026 21:13
Adds `lib/helpers/arrays.ts` with a NonEmptyArray<T> type alias and an
isNonEmpty<T> type-guard predicate. Tightens preferredRunner to require
a NonEmptyArray<Runner> input and return Runner (no longer | undefined).
Updates the two call sites (init/skills.ts, init/format.ts) to use
isNonEmpty for the non-empty check, and drops the now-provably-unreachable
defensive `if (!preferred)` branch in skills.ts. The type system enforces
the invariant that runtime code previously checked.
@wyattjoh
wyattjohforce-pushed the feat/lib-non-empty-array branch from 5ae8ed6 to f9c2e28CompareApril 15, 2026 22:23
@wyattjoh
wyattjoh merged commit 3b840b8 into mainApr 15, 2026
10 checks passed
@wyattjoh
wyattjoh deleted the feat/lib-non-empty-array branch April 15, 2026 22:38
Sign up for freeto 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.

2 participants

@wyattjoh@rafa-thayto