Skip to content

feat: Ability to limit combinations#3344

Draft
RobinTail wants to merge 49 commits intomasterfrom
limit-combinations
Draft

feat: Ability to limit combinations#3344
RobinTail wants to merge 49 commits intomasterfrom
limit-combinations

Conversation

@RobinTail
Copy link
Copy Markdown
Owner

@RobinTail RobinTail commented Apr 24, 2026

Summary by CodeRabbit

Release Notes

  • New Features

    • Added maxCombinations configuration option to the Documentation generator, enabling control over example combination generation. Set to 0 to suppress example generation; defaults to unlimited.
  • Improvements

    • Optimized example combination logic and refined security header extraction for improved documentation generation efficiency.

@RobinTail RobinTail added the enhancement New feature or request label Apr 24, 2026
@coveralls-official
Copy link
Copy Markdown

coveralls-official Bot commented Apr 24, 2026

Coverage Status

coverage: 100.0%. remained the same — limit-combinations into master

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 24, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The PR refactors the cartesian product generation in combinations() to use explicit nested loops with configurable limits, updates multiple function signatures to use options objects instead of mixed parameters, extracts security header processing into a dedicated helper, and adds a maxCombinations configuration to the Documentation generator to constrain example generation.

Changes

Cartesian Product Limiting and Parameter Standardization

Layer / File(s) Summary
Core Combination Algorithm
src/common-helpers.ts
combinations() is rewritten from Ramda-based xprod to an explicit nested-loop implementation. Callback signature changes from (pair: [T, T]) to (a, b). A limit parameter and public combinations.limit property (defaulting to Infinity) enable early termination.
Merge Function Adaptations
src/logical-container.ts, src/result-helpers.ts
Callsites updated to pass R.concat or R.mergeRight directly instead of inline merge callbacks, aligning with the new callback signature.
JSON Schema Processing Options
src/json-schema-helpers.ts
processAllOf(), flattenIO(), and mergeExamples() signatures are modernized: mode string parameter is replaced with an options object { isStrict, isOptional }, unifying the API and enabling clearer intent.
Security Header Extraction
src/security.ts, tests/security.spec.ts
New exported function getSecurityHeaders() recursively traverses logical containers to extract header-type security names into a Set, enabling type-safe header lookups.
Documentation Parameter Shape
src/documentation-helpers.ts
defaultIsHeader() now accepts Set<string> and uses .has() for membership checks. depictRequestParams() replaces the security parameter with a pre-computed securityHeaders: Set<string>, shifting responsibility for header extraction upstream.
Documentation Configuration & Integration
src/documentation.ts
Adds optional maxCombinations?: number to DocumentationParams. The constructor applies this limit by setting combinations.limit, and request-parameter security depiction now uses getSecurityHeaders() to compute headers before calling depictRequestParams().
Combination Limiting in Generation
src/diagnostics.ts, src/integration.ts
Both set combinations.limit = 0 during construction to suppress cartesian product generation for schema validation and type generation, improving performance.
Tests & Documentation
tests/common-helpers.spec.ts, tests/json-schema-helpers.spec.ts, tests/documentation-helpers.spec.ts, tests/security.spec.ts, CHANGELOG.md
Test invocations are updated to match new parameter shapes; new tests cover limit behavior; changelog documents the maxCombinations feature with examples and v28 migration notes.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested labels

documentation, refactoring, feature

Poem

🐰 Combinations bloom with limits set,
No more Cartesian runaway—
Headers hop into neat Sets,
Parameters dance in objects' way,
Documentation dreams clearer now!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'feat: Ability to limit combinations' directly and accurately describes the main change—adding functionality to limit Cartesian product combinations across multiple files.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch limit-combinations

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.

@RobinTail RobinTail force-pushed the limit-combinations branch from 94693b9 to 120fa0d Compare April 24, 2026 09:33
RobinTail added a commit that referenced this pull request Apr 24, 2026
…chema` (#3345)

Performance regression since v24.0.0 - the `outputSchema` getter was
calling the expensive `pullResponseExamples()` operation on first access
(R.once protected), even though examples are only needed for OpenAPI
documentation generation (getResponses).

This fixes the issue where simply accessing the output schema for
runtime validation was unnecessarily triggering example generation.

first introduced by #2666 
merged by #2546 
found this during my work on #3344 

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Bug Fixes**
* Improved request performance by deferring output schema example
processing; examples are now generated only when needed for
documentation/OpenAPI workflows, not during initial request handling.

* **Documentation**
* Added changelog entry v27.2.4 documenting the change in example
processing behavior.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
@RobinTail RobinTail marked this pull request as ready for review April 24, 2026 15:20
@RobinTail RobinTail added refactoring The better way to achieve the same result labels Apr 24, 2026
pullfrog[bot]

This comment was marked as outdated.

Copy link
Copy Markdown
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: 3

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

Inline comments:
In `@express-zod-api/src/documentation-helpers.ts`:
- Around line 129-133: depictIntersection reads maxCombinations from the
depiction context but depictResponse and depictRequest build ctx without that
field, causing intersections to run unbounded; update the context construction
in depictResponse and depictRequest to include maxCombinations (propagate the
value from the function arguments/config/options into the ctx passed to
depictIntersection and flattenIO) so that flattenIO receives the intended
maxCombinations limit.

In `@express-zod-api/src/documentation.ts`:
- Around line 89-94: The JSDoc for the public constructor option maxCombinations
is missing an `@example`; update the comment block for the maxCombinations
property in documentation.ts to include an `@example` directive showing typical
usage (e.g., setting maxCombinations: 20 or Infinity) while keeping the existing
`@desc` and `@default` lines so the property has `@desc`, `@default`, and `@example` as
required by the public API documentation guidelines.

In `@express-zod-api/src/endpoint.ts`:
- Around line 94-98: Remove the R.once memoization wrapper from the private
methods that generate examples so they can be re-run with different limits:
specifically un-wrap the definitions of `#ensureOutputExamples` and the analogous
`#ensureInputExamples` (the ones currently defined as R.once((limit?: number) => {
... })). Leave the existing guard checks (e.g., the globalRegistry lookup and
isSchema check inside `#ensureOutputExamples`) intact so redundant work is still
avoided, but allow the function body to execute on each call with the provided
limit parameter instead of being permanently memoized.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 99c13e7d-1c60-4cf9-8e92-1770c8851336

📥 Commits

Reviewing files that changed from the base of the PR and between 3e7482b and 81f1b76.

📒 Files selected for processing (14)
  • express-zod-api/src/common-helpers.ts
  • express-zod-api/src/diagnostics.ts
  • express-zod-api/src/documentation-helpers.ts
  • express-zod-api/src/documentation.ts
  • express-zod-api/src/endpoint.ts
  • express-zod-api/src/integration.ts
  • express-zod-api/src/json-schema-helpers.ts
  • express-zod-api/src/logical-container.ts
  • express-zod-api/src/result-helpers.ts
  • express-zod-api/tests/common-helpers.spec.ts
  • express-zod-api/tests/endpoint.spec.ts
  • express-zod-api/tests/json-schema-helpers.spec.ts
  • express-zod-api/tests/logical-container.spec.ts
  • express-zod-api/tests/result-helpers.spec.ts

Comment thread express-zod-api/src/documentation-helpers.ts
Comment thread express-zod-api/src/documentation.ts
Comment thread express-zod-api/src/endpoint.ts Outdated
@RobinTail
Copy link
Copy Markdown
Owner Author

RobinTail commented Apr 29, 2026

Swagger validator is 502/504

Copy link
Copy Markdown
Contributor

@pullfrog pullfrog Bot left a comment

Choose a reason for hiding this comment

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

Important

The refactor trades parameter threading for mutable module-level state on combinations. The state is never restored after a generator runs, so combinations.limit leaks across Documentation/Integration/Diagnostics instances and any other code paths that call combinations() in the same process.

Reviewed the following changes:

  • Replaced the maxCombinations parameter threading (through getResponses, flattenIO, mergeExamples, processContainers, pullRequestExamples, pullResponseExamples, depictIntersection, depictRequest, depictResponse, depictBody, depictRequestParams, OpenAPIContext) with a static .limit property on the combinations function, set once by each generator's constructor as a side effect.
  • Documentation now sets combinations.limit = maxCombinations in its constructor; Integration and Diagnostics set it to 0 for their paths.
  • Removed the maxCombinations argument from AbstractEndpoint.getResponses and Endpoint#ensureOutputExamples; removed related tests and restored the simpler signatures.
  • Inlined securityHeaders extraction into depictSecurity/depictSecurityRefs is unchanged; the external surface on Documentation (DocumentationParams.maxCombinations) is preserved.

Prior review feedback:

  • R.once on #ensureOutputExamples silently dropping the limit — addressed earlier; current commit removes the limit parameter entirely and relies on combinations.limit at call time.

Pullfrog  | Fix all ➔Fix 👍s ➔View workflow run | Using Claude Opus𝕏

Comment thread express-zod-api/src/common-helpers.ts Outdated
Comment thread express-zod-api/src/documentation.ts Outdated
Comment thread express-zod-api/tests/common-helpers.spec.ts Outdated
Copy link
Copy Markdown
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: 3

🧹 Nitpick comments (1)
express-zod-api/src/documentation.ts (1)

170-176: 💤 Low value

Global state mutation may cause interference between concurrent documentation generations.

Setting combinations.limit as a module-level side effect means the limit persists across calls and could affect other code paths that use combinations(). If multiple Documentation instances are created (e.g., in tests or parallel generation), the last-set limit wins.

Consider whether this is acceptable for the intended use case. If the documentation generation is always synchronous and single-instance, this is fine. Otherwise, a scoped approach (passing the limit through context) would be safer.

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

In `@express-zod-api/src/documentation.ts` around lines 170 - 176, The constructor
of the Documentation class mutates the module-level combinations by setting
combinations.limit, which creates global state leakage; instead remove that
side-effect and scope the limit to this instance by creating a local
combinations object or passing the limit through a parameter/context when
generating docs (e.g., instantiate a localCombinations from combinations() or
call combinations({limit: maxCombinations}) if supported), update any uses in
Documentation methods to reference the instance-local combination object rather
than the module-level combinations symbol, and ensure no other code relies on
the module-level combinations.limit being modified.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@express-zod-api/src/diagnostics.ts`:
- Around line 49-52: The diagnostics code mutates the shared combinations.limit
(setting it to 0) and fails to restore it, causing later consumers to see the
wrong limit; update the sections that set combinations.limit (the block
iterating responseVariants + endpoint.getResponses(...) and the similar block in
`#checkPathParams`) to save the original value (e.g., const prevLimit =
combinations.limit) before changing it and restore it in a finally or after the
loop (combinations.limit = prevLimit) so the global state is not left modified
after diagnostics complete.

In `@express-zod-api/src/integration.ts`:
- Line 95: The code sets combinations.limit = 0 and leaves module state mutated;
fix by saving the original value (e.g., const prev = combinations.limit) before
setting it to 0, perform the generation, and restore combinations.limit = prev
in a finally block so the original limit is always reinstated; apply this change
in the same constructor/generation block where combinations.limit is modified to
avoid shared-state side effects.

In `@express-zod-api/tests/common-helpers.spec.ts`:
- Around line 294-298: The test mutates the global combinations.limit and only
resets it if the assertions pass; change the test to always restore
combinations.limit (e.g., capture const prev = combinations.limit then run the
assertions inside a try/finally and in finally set combinations.limit = prev) so
the global state is restored even on failure; refer to the combinations function
and its combinations.limit property when making the change.

---

Nitpick comments:
In `@express-zod-api/src/documentation.ts`:
- Around line 170-176: The constructor of the Documentation class mutates the
module-level combinations by setting combinations.limit, which creates global
state leakage; instead remove that side-effect and scope the limit to this
instance by creating a local combinations object or passing the limit through a
parameter/context when generating docs (e.g., instantiate a localCombinations
from combinations() or call combinations({limit: maxCombinations}) if
supported), update any uses in Documentation methods to reference the
instance-local combination object rather than the module-level combinations
symbol, and ensure no other code relies on the module-level combinations.limit
being modified.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 3231cda2-0a60-4f50-8cb8-d611f6a1015c

📥 Commits

Reviewing files that changed from the base of the PR and between 9251a67 and 47a02c2.

📒 Files selected for processing (11)
  • express-zod-api/src/common-helpers.ts
  • express-zod-api/src/diagnostics.ts
  • express-zod-api/src/documentation-helpers.ts
  • express-zod-api/src/documentation.ts
  • express-zod-api/src/endpoint.ts
  • express-zod-api/src/integration.ts
  • express-zod-api/src/json-schema-helpers.ts
  • express-zod-api/src/logical-container.ts
  • express-zod-api/src/result-helpers.ts
  • express-zod-api/tests/common-helpers.spec.ts
  • express-zod-api/tests/json-schema-helpers.spec.ts

Comment thread express-zod-api/src/diagnostics.ts Outdated
Comment thread express-zod-api/src/integration.ts Outdated
Comment thread express-zod-api/tests/common-helpers.spec.ts Outdated
Copy link
Copy Markdown
Contributor

@pullfrog pullfrog Bot left a comment

Choose a reason for hiding this comment

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

Caution

The R.once wrapper on #ensureOutputExamples is being re-introduced after being removed to fix this exact issue in a previous review. In a single process that both runs the server in development and instantiates Documentation over the same endpoint instances, Diagnostics.#checkSchema sets combinations.limit = 0 and triggers getResponses("positive") first — pullResponseExamples returns [], the if (!examples.length) return guard exits, and R.once permanently memoizes the call. When Documentation later runs getResponses("positive") with combinations.limit = maxCombinations, the memoized method is a no-op and output examples are never pulled up into the registry.

Reviewed changes:

  • Restored the R.once() wrapper around Endpoint#ensureOutputExamples (the limit parameter no longer exists on the method since the whole per-call limit plumbing was replaced by the global combinations.limit in earlier commits).

Note: 1 inline comment(s) dropped because they did not anchor to lines inside the PR diff:

  • express-zod-api/src/endpoint.ts:93-102 (RIGHT) — file not in PR diff

Pullfrog  | Fix it ➔View workflow run | Using Claude Opus𝕏

pullfrog[bot]

This comment was marked as outdated.

Copy link
Copy Markdown
Contributor

@pullfrog pullfrog Bot left a comment

Choose a reason for hiding this comment

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

No new issues. Reviewed the following changes:

  • Reverted the R.once wrapper on Endpoint#ensureOutputExamples, restoring it to a plain method so each call re-evaluates against the current combinations.limit; the globalRegistry check inside the method still prevents redundant work

Prior review feedback:

  • R.once on #ensureOutputExamples silently drops the limit parameter under combinations.limit = 0 from Diagnostics — addressed by reverting commit 8a98629a

Pullfrog  | View workflow run | Using Claude Opus𝕏

@pullfrog
Copy link
Copy Markdown
Contributor

pullfrog Bot commented May 4, 2026

Verified the fix in commit 97b61531 — the combinations.limit = 0 was moved from diagnostics.ts into a scoped save/restore in routing.ts::collectSiblings, which addresses the concern raised in my earlier review. Thread replied to and resolved. No further code changes were needed.

Pullfrog  | View workflow run | via Pullfrog | Using Claude Opus𝕏

Copy link
Copy Markdown
Contributor

@pullfrog pullfrog Bot left a comment

Choose a reason for hiding this comment

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

No new issues. Reviewed the following changes:

  • Moved the combinations.limit = 0 mutation out of Diagnostics and into collectSiblings in routing.ts, which now saves prevLimit, scopes the zero-limit to the entire walkRouting pass (covering both #checkSchema and #checkPathParams), and restores the previous value afterward
  • diagnostics.ts no longer touches combinations.limit directly, so the module-state mutation is now confined to a single scoped block at the routing boundary

Prior review feedback:

  • Diagnostics mutating combinations.limit without restoring it — addressed by save/restore in collectSiblings

Pullfrog  | View workflow run | Using Claude Opus𝕏

pullfrog[bot]

This comment was marked as outdated.

@pullfrog
Copy link
Copy Markdown
Contributor

pullfrog Bot commented May 4, 2026

Acknowledged the fix in 258511a (save/restore of combinations.limit in the Documentation constructor), noted the remaining exception-safety caveat for the record, and resolved the thread. No code changes needed.

Pullfrog  | View workflow run | via Pullfrog | Using Claude Opus𝕏

@pullfrog
Copy link
Copy Markdown
Contributor

pullfrog Bot commented May 4, 2026

Verified the fix in a7cb6bdcombinations.limit is restored before the variant === "types" early return in integration.ts, closing the module-state leak. Replied and resolved the thread.

Pullfrog  | View workflow run | via Pullfrog | Using Claude Opus𝕏

Copy link
Copy Markdown
Contributor

@pullfrog pullfrog Bot left a comment

Choose a reason for hiding this comment

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

No new issues. Reviewed the following changes:

  • Added save/restore of combinations.limit around the Documentation constructor body, mirroring the pattern already in place in collectSiblings (routing.ts) and the earlier Integration commit, so a maxCombinations value set during documentation generation no longer leaks into subsequent combinations() call sites in the same process.

Note: the prior review on Integration (early return at integration.ts:167 bypassing the restore at line 183 for variant === "types") remains unaddressed by this commit.

Pullfrog  | Fix it ➔View workflow run | Using Claude Opus𝕏

Copy link
Copy Markdown
Contributor

@pullfrog pullfrog Bot left a comment

Choose a reason for hiding this comment

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

No new issues. Reviewed the following changes:

  • Moved combinations.limit = prevLimit in Integration so it runs before the if (variant === "types") return; early exit, ensuring the restore fires on both the "client" and "types" paths. All schema-processing that relies on combinations.limit = 0 has completed by the time of the restore (it sits after walkRouting and the #program.push(...) of type declarations), and the remaining make* helpers below the early return do not call combinations().

Prior review feedback:

  • combinations.limit = 0 leaks on the variant === "types" path in Integration — addressed by moving the restore above the early return

Pullfrog  | Fix it ➔View workflow run | Using Claude Opus𝕏

@pullfrog
Copy link
Copy Markdown
Contributor

pullfrog Bot commented May 4, 2026

Verified the fix in bfaa816afterAll resets combinations.limit unconditionally, addressing the original concern about leaking stale state across tests. Replied to the thread and marked it resolved.

Pullfrog  | View workflow run | via Pullfrog | Using Claude Opus𝕏

@pullfrog
Copy link
Copy Markdown
Contributor

pullfrog Bot commented May 4, 2026

Confirmed the combinations.limit cross-instance leak is fixed by the save/restore pattern across Documentation, Integration, and routing.collectSiblings. Replied noting a residual concern that the restore isn't wrapped in try/finally and resolved the thread.

Pullfrog  | View workflow run | via Pullfrog | Using Claude Opus𝕏

@RobinTail
Copy link
Copy Markdown
Owner Author

@pullfrog evaluate the design of combinations.limit property that helps to avoid dragging it as an argument though a call chain from public functions

pullfrog[bot]

This comment was marked as outdated.

@RobinTail RobinTail marked this pull request as draft May 4, 2026 10:42
@RobinTail RobinTail force-pushed the limit-combinations branch from bfaa816 to 9251a67 Compare May 4, 2026 12:11
@pullfrog
Copy link
Copy Markdown
Contributor

pullfrog Bot commented May 4, 2026

RobinTail confirmed the original review feedback was addressed by reverting to an explicit limit argument in the test (no more mutation of combinations.limit). Verified in express-zod-api/tests/common-helpers.spec.ts:290-294, replied, and resolved the thread. No code changes needed.

Pullfrog  | View workflow run | via Pullfrog | Using Claude Opus𝕏

@pullfrog
Copy link
Copy Markdown
Contributor

pullfrog Bot commented May 4, 2026

No code changes needed — RobinTail's reply "reverted" on the combinations.limit thread confirms they already removed the default value from higher-order callers (commit 540716dc) so the test no longer relies on resetting combinations.limit. Resolved the thread.

Pullfrog  | View workflow run | via Pullfrog | Using Claude Opus𝕏

@pullfrog
Copy link
Copy Markdown
Contributor

pullfrog Bot commented May 4, 2026

Acknowledged RobinTail's "reverted" reply on the outdated routing.ts thread — the revert removes the combinations.limit state-leakage concern entirely. No code changes needed; replied and resolved the thread.

Pullfrog  | View workflow run | via Pullfrog | Using Claude Opus𝕏

@pullfrog
Copy link
Copy Markdown
Contributor

pullfrog Bot commented May 4, 2026

Reviewer confirmed the concern was addressed by reverting the global-mutation approach in favour of passing maxCombinations: 0 through getResponses options. Replied acknowledging and resolved the thread. No code changes needed.

Pullfrog  | View workflow run | via Pullfrog | Using Claude Opus𝕏

@pullfrog
Copy link
Copy Markdown
Contributor

pullfrog Bot commented May 4, 2026

Replied to the documentation.ts thread confirming the global-state concern is resolved now that maxCombinations is threaded through as an explicit argument rather than mutated on a shared combinations object. Thread marked resolved; no code changes needed.

Pullfrog  | View workflow run | via Pullfrog | Using Claude Opus𝕏

@pullfrog
Copy link
Copy Markdown
Contributor

pullfrog Bot commented May 4, 2026

Acknowledged RobinTail's reverted reply on the combinations limit thread. The author kept the limit parameter but removed the ?? Infinity defaults from higher-order callers (commit 540716d), which addresses the double-fallback concern. Replied and resolved the thread — no code changes needed.

Pullfrog  | View workflow run | via Pullfrog | Using Claude Opus𝕏

@pullfrog
Copy link
Copy Markdown
Contributor

pullfrog Bot commented May 4, 2026

Acknowledged the reviewer's "reverted" reply on the combinations.limit thread. No code change required—the function now uses a plain limit = Infinity default parameter, which eliminates the original dual-spelling concern. Replied to the comment and resolved the thread.

Pullfrog  | View workflow run | via Pullfrog | Using Claude Opus𝕏

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

coverage Additional tests enhancement New feature or request refactoring The better way to achieve the same result

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant