Skip to content

Add BigInteger support for min/max restrictions (#146)#196

Merged
avgalex merged 8 commits intomasterfrom
feature/issue-146-biginteger-support
Mar 9, 2026
Merged

Add BigInteger support for min/max restrictions (#146)#196
avgalex merged 8 commits intomasterfrom
feature/issue-146-biginteger-support

Conversation

@avgalex
Copy link
Member

@avgalex avgalex commented Mar 9, 2026

Summary

  • Adds BigInteger to IsNumeric() check and handles it in NumericToDecimal() so that InclusiveBetween/ExclusiveBetween/GreaterThan/LessThan validators on BigInteger fields emit min/max constraints in Swagger
  • Replaces Convert.ToDecimal() calls in NSwag provider with shared NumericToDecimal() for consistent BigInteger handling
  • BigInteger values exceeding decimal range are silently skipped (no crash) via existing try/catch in FluentValidationSchemaBuilder

Fixes #146

Test plan

  • BigInteger_InclusiveBetween_Should_Set_MinMax — verifies min/max emitted for in-range values
  • BigInteger_ExceedingDecimalRange_Should_Not_Crash — verifies graceful fallback for overflow
  • BigInteger_GreaterThan_Should_Set_Minimum — verifies exclusive minimum with BigInteger
  • All 75 tests pass on net8.0, all 79 tests pass on net9.0 (no regressions)

🤖 Generated with Claude Code

avgalex and others added 4 commits March 9, 2026 21:12
…eration

Fixes #146. BigInteger values on InclusiveBetween/ExclusiveBetween/GreaterThan/LessThan
validators now emit min/max constraints in Swagger when the value fits in decimal range.
Values exceeding decimal range are silently skipped (graceful fallback via existing
try/catch in FluentValidationSchemaBuilder).

Changes:
- Extensions.IsNumeric(): added BigInteger to supported numeric types
- Extensions.NumericToDecimal(): handles BigInteger via explicit cast
- NSwagFluentValidationRuleProvider: replaced Convert.ToDecimal() with NumericToDecimal()
- Added tests for in-range, overflow, and GreaterThan BigInteger scenarios

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Swashbuckle v10 with OpenAPI 2.x may not map BigInteger to a schema
property. Guard assertions with null checks under OPENAPI_V2 to prevent
NullReferenceException on net10.0.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…etProperty

On net10.0 (Swashbuckle v10 / OpenAPI v2), BigInteger properties are
rendered as $ref (OpenApiSchemaReference) instead of inline OpenApiSchema.

- TestCompatibility.GetProperty: add optional SchemaRepository param to
  resolve OpenApiSchemaReference through the repository
- BigInteger tests: pass schemaRepository to GetProperty, document that
  Swashbuckle v10 cannot apply min/max to $ref properties (known limitation)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Resolve OpenApiSchemaReference through SchemaRepository in GetProperty/TryGetProperty
so that BigInteger (and other $ref types) get validation constraints on OpenAPI v2.
Thread SchemaRepository through OpenApiRuleContext, SchemaGenerationContext, and
OperationFilter/DocumentFilter. Add integration and unit tests for all affected paths.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@avgalex
Copy link
Member Author

avgalex commented Mar 9, 2026

@claude review this PR

@claude
Copy link

claude bot commented Mar 9, 2026

Claude finished @avgalex's task in 4m 11s —— View job


PR Review

Tasks:

  • Gather context and understand the PR
  • Read changed source files
  • Read changed test files
  • Analyze code quality, correctness, and potential issues
  • Post comprehensive review feedback

Summary

This PR adds BigInteger support for min/max validation constraints in OpenAPI schema generation. The approach is generally sound, but there are a few issues worth discussing before merging.


Core Changes

Extensions.csIsNumeric() and NumericToDecimal()

The changes here are minimal and correct:

// Before
internal static bool IsNumeric(this object value) => value is int || value is long || value is float || value is double || value is decimal;
internal static decimal NumericToDecimal(this object value) => Convert.ToDecimal(value);

// After
internal static bool IsNumeric(this object value) => ... || value is BigInteger;
internal static decimal NumericToDecimal(this object value) => value is BigInteger bigInt ? (decimal)bigInt : Convert.ToDecimal(value);

The BigInteger-specific cast path is necessary because Convert.ToDecimal(bigInteger) doesn't work. (decimal)bigInt correctly throws OverflowException for out-of-range values.


Issues Found

1. Shared Schema Mutation (Medium Severity)

On OPENAPI_V2 (net10.0+), Swashbuckle renders BigInteger properties as $ref to a shared schema in the repository (e.g., #/components/schemas/BigInteger). The new ResolveProperty logic resolves this reference and returns the shared schema — and validation rules then set Minimum/Maximum directly on the shared schema.

This means:

  • If two different models each have BigInteger properties with different validator ranges, the last-processed constraints overwrite the first, and both properties will end up showing the same (wrong) constraints.
  • Any BigInteger property without a validator will inherit constraints from one that does, if they share the same schema entry.

For the common single-property case (which the tests cover), this works correctly. But it is a correctness concern for more complex APIs.

Fix this →

2. Potential Unhandled Overflow in NSwag Path (Minor)

The NSwag changes replace Convert.ToDecimal() with NumericToDecimal(). For BigInteger values that exceed the decimal range, NumericToDecimal() will throw OverflowException. The Swashbuckle path handles this gracefully via the try/catch in FluentValidationSchemaBuilder.ApplyRulesToSchema (line 84). However, it's unclear whether the NSwag code path in NSwagFluentValidationRuleProvider.cs has equivalent protection.

If a BigInteger validator value overflows decimal in the NSwag path, it would propagate an unhandled exception. Consider adding a try/catch or checking for overflow before calling NumericToDecimal().

3. Stale Method Doc Comment (Minor)

src/MicroElements.OpenApi.FluentValidation/Core/Extensions.cs:23

/// <summary>
/// Convert numeric to double.   // ← still says "double"
/// </summary>
internal static decimal NumericToDecimal(this object value) => ...

The summary should say "Convert numeric to decimal" to match the return type and method name.

Fix this →

4. Weak AspNetCore Test Coverage (Minor)

test/MicroElements.AspNetCore.OpenApi.FluentValidation.Tests/AspNetCoreOpenApiTests.cs

The else-branch of BigIntegerProperty_ShouldHaveValidationConstraints only asserts that a $ref exists if minimum is absent:

else
{
    // If value is a $ref, the constraints may not be applied (known limitation)
    value.TryGetProperty("$ref", out _).Should().BeTrue(
        "BigInteger should either have inline min/max or be a $ref");
}

This passes even if the constraints are not actually applied. The test effectively has a soft-pass path that provides no real coverage. This should either be removed (limiting to TFMs where the assertion is meaningful) or the "known limitation" should be more explicitly documented.

5. Missing Newline at End of File (Cosmetic)

src/MicroElements.Swashbuckle.FluentValidation/OpenApiRuleContext.cs — the diff shows \ No newline at end of file. Minor style issue but worth fixing.


What's Well Done

  • Minimal footprint: The core numeric conversion change is 2 lines and concentrated in one shared utility.
  • Consistent NSwag/Swashbuckle handling: Using the shared NumericToDecimal() extension is the right approach to avoid duplicating BigInteger logic.
  • Schema repository threading: Passing SchemaRepository through SchemaGenerationContext → OpenApiRuleContext → OpenApiSchemaCompatibility is clean and non-invasive.
  • Overflow handling: Relying on the existing try/catch in FluentValidationSchemaBuilder for the Swashbuckle path is appropriate — no special-casing needed.
  • Good test suite: SchemaGenerationTests covers InclusiveBetween, overflow, and GreaterThan scenarios. SchemaReferenceResolutionTests directly validates the GetProperty/TryGetProperty resolution behavior.
  • Integration test: BigIntegerParameterIntegrationTests tests the full pipeline including the HTTP-serialized Swagger JSON.

Verdict

The PR solves the core issue effectively for the most common use case. The shared schema mutation concern is a pre-existing architectural limitation of how $ref types interact with per-property validation — not a regression introduced here — but it's worth documenting. The NSwag overflow and doc comment issues are straightforward fixes.

…e getter side effects

Replace hand-rolled ShallowCopySchema (9 properties) with Microsoft's
CreateShallowCopy() which copies all 40+ properties. Move copy+replace
logic out of GetProperty/TryGetProperty into explicit ResolveRefProperty
method, keeping getters pure and side-effect-free. Only OpenApiRuleContext
(which mutates schemas via validation rules) uses the new method; read-only
callers in DocumentFilter and OperationFilter remain unaffected.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@avgalex
Copy link
Member Author

avgalex commented Mar 9, 2026

@claude review this PR

@claude
Copy link

claude bot commented Mar 9, 2026

Claude finished @avgalex's task in 2m 45s —— View job


PR Review

Tasks:

  • Gather context and understand the PR
  • Read changed source files
  • Read changed test files
  • Analyze code quality, correctness, and potential issues
  • Post comprehensive review feedback

Summary

This PR adds BigInteger support for min/max validation constraints in OpenAPI schema generation. The implementation is solid and addresses the core issue cleanly. One remaining bug needs fixing before merge; the rest are minor polish items.


What's Well Done

Minimal, focused core change (Extensions.cs:19-24): Just two lines changed — adding BigInteger to IsNumeric() and a specialized cast path in NumericToDecimal(). The Convert.ToDecimal(bigInteger) path would fail, so the explicit (decimal)bigInt is correct. The doc comment already correctly says "Convert numeric to decimal".

Shared schema mutation is addressed (OpenApiSchemaCompatibility.cs:257-277 + OpenApiRuleContext.cs:50): The ResolveRefProperty method uses CreateShallowCopy() and replaces the $ref entry in-place with the copy before returning it. This ensures validation rules mutate an independent schema, not the shared one in SchemaRepository. This directly addresses what the prior review flagged as "Medium Severity".

Good test for shared schema correctness (SchemaReferenceResolutionTests.cs:126-157): SharedRef_Should_Not_Corrupt_Between_Models generates ModelA (range 10-100) and ModelB (range 500-1000) into the same repository and asserts each gets its own min/max. This is the right regression test to have.

Integration test (BigIntegerParameterIntegrationTests.cs): Spins up a real WebApplication and fetches the Swagger JSON via HTTP, testing the complete pipeline including OperationFilter/TryGetProperty → copy step. This catches issues that unit tests miss.


Issues Found

1. NSwag path has no overflow protection (Bug — needs fix before merge)

In NSwagFluentValidationRuleProvider.cs, both the "Comparison" (line 160) and "Between" (lines 202, 206, 217, 221) rules call NumericToDecimal() with no try/catch:

// Line 160 — no overflow guard
var valueToCompare = comparisonValidator.ValueToCompare.NumericToDecimal();

// Lines 202, 217 — same issue
schemaProperty.ExclusiveMinimum = betweenValidator.From.NumericToDecimal();

(decimal)bigInt correctly throws OverflowException for out-of-range values. The Swashbuckle path in FluentValidationSchemaBuilder.ApplyRulesToSchema wraps each rule application in a try/catch, so the exception is silently swallowed there. The NSwag Apply lambdas have no such protection — an out-of-range BigInteger value will propagate as an unhandled OverflowException at runtime when the NSwag path is used.

Fix this →

2. AspNetCore test has a soft-pass path (Minor)

AspNetCoreOpenApiTests.cs:109-120 — the else branch passes even when constraints are not applied:

else
{
    // If value is a $ref, the constraints may be on the referenced schema
    // or may not be applied (known limitation for AspNetCore path without SchemaRepository)
    value.TryGetProperty("$ref", out _).Should().BeTrue(
        "BigInteger should either have inline min/max or be a $ref");
}

This assertion is always true when BigInteger is rendered as $ref — it provides no evidence that validation rules were applied. The test passes regardless of whether the feature works. Either document this as an explicit known-limitation with Skip, or remove the else branch and gate the test on the TFMs where the assertion is meaningful.

Fix this →

3. Duplicate GetProperty helper in test code (Cosmetic)

TestCompatibility.cs:120-144 has its own GetProperty extension that replicates the $ref-resolution logic from OpenApiSchemaCompatibility.GetProperty. The two implementations are nearly identical but not quite the same (e.g. TestCompatibility casts resolved as OpenApiSchema directly; OpenApiSchemaCompatibility checks resolved is OpenApiSchema resolvedSchema). If the production logic ever changes, the test helper could drift and silently pass/fail incorrectly. Consider having tests use OpenApiSchemaCompatibility.GetProperty directly rather than the duplicate helper.


Summary

# Severity Issue
1 Bug NSwag path throws unhandled OverflowException for out-of-range BigIntegers
2 Minor AspNetCore test has a soft-pass else branch that doesn't actually verify the feature
3 Cosmetic Duplicate GetProperty helper in TestCompatibility.cs

The core implementation is correct and the shared-schema mutation concern from the previous review is properly resolved via CreateShallowCopy(). Issue #1 is the only thing blocking merge.
| Branch: feature/issue-146-biginteger-support

@avgalex
Copy link
Member Author

avgalex commented Mar 9, 2026

@claude
NSwag throws unhandled OverflowException for BigInteger

False positive — NSwag calls shared FluentValidationSchemaBuilder.ApplyRulesToSchema(), which wraps rule.Apply() in try/catch
(lines 65-87). No action needed.

@claude
Copy link

claude bot commented Mar 9, 2026

Claude finished @avgalex's task in 1m 4s —— View job


Tasks:

  • Understand the clarification
  • Verify NSwag code path through FluentValidationSchemaBuilder.ApplyRulesToSchema()
  • Update review findings

Clarification Accepted — Previous Issue #1 Was a False Positive

Confirmed by reading the code:

  • FluentValidationSchemaProcessor.Process() (line 101) calls its private ApplyRulesToSchema() (line 113)
  • That calls FluentValidationSchemaBuilder.ApplyRulesToSchema() (line 115) — the shared implementation
  • That shared method wraps every rule.Apply(ruleContext) call in a try/catch (lines 65–87 of FluentValidationSchemaBuilder.cs)

The NSwag Apply lambdas in NSwagFluentValidationRuleProvider.cs execute inside that protected scope. Any OverflowException from NumericToDecimal() for an out-of-range BigInteger is caught and logged as a warning — not propagated. The issue flagged in the previous review was incorrect.

Updated Issue List

# Severity Issue Status
1 Bug NSwag path throws unhandled OverflowException for out-of-range BigIntegers False positive — no action needed
2 Minor AspNetCore test has a soft-pass else branch that doesn't actually verify the feature Still valid
3 Cosmetic Duplicate GetProperty helper in TestCompatibility.cs Still valid

The core implementation is correct and ready for merge. The two remaining items are minor/cosmetic and non-blocking.
| Branch: feature/issue-146-biginteger-support

…nteger comment

Delegate TestCompatibility.GetProperty to production OpenApiSchemaCompatibility.GetProperty
to eliminate duplicated $ref resolution logic. Clarify the AspNetCore BigInteger test comment
to explain the architectural limitation (no SchemaRepository in AspNetCore pipeline).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@avgalex
Copy link
Member Author

avgalex commented Mar 9, 2026

@claude review this PR

@claude
Copy link

claude bot commented Mar 9, 2026

Claude finished @avgalex's task in 2m 7s —— View job


PR Review

Tasks:

  • Gather context and understand the PR
  • Read changed source files
  • Read changed test files
  • Analyze code quality, correctness, and potential issues
  • Post comprehensive review feedback

Summary

The PR adds BigInteger support for min/max validation constraints in OpenAPI/Swagger schema generation. This is the third review pass — the two issues flagged in previous reviews (shared schema mutation and NSwag overflow) have both been addressed. The implementation is clean and correct.


What's Well Done

Core change is minimal and correct (Extensions.cs:19,24):

internal static bool IsNumeric(this object value) => ... || value is BigInteger;
internal static decimal NumericToDecimal(this object value) =>
    value is BigInteger bigInt ? (decimal)bigInt : Convert.ToDecimal(value);

The specialized cast path is required — Convert.ToDecimal(bigInteger) doesn't work. The doc comment correctly says "Convert numeric to decimal".

Shared schema mutation is properly fixed (OpenApiSchemaCompatibility.cs:257-277 + OpenApiRuleContext.cs:50):

ResolveRefProperty creates an isolated copy via CreateShallowCopy() and replaces the $ref entry in schema.Properties[key] with the copy before returning. Subsequent rule applications mutate the copy, not the shared schema in SchemaRepository. The SharedRef_Should_Not_Corrupt_Between_Models test (which generates ModelA [10–100] and ModelB [500–1000] into the same repository) validates this end-to-end.

Duplicate GetProperty helper resolved (TestCompatibility.cs:119-125):

The previous review flagged a duplicated $ref-resolution helper in test code. That has been fixed — TestCompatibility.GetProperty now simply delegates to OpenApiSchemaCompatibility.GetProperty, eliminating the drift risk.

NSwag overflow confirmed non-issue: NSwag's Apply lambdas execute inside FluentValidationSchemaBuilder.ApplyRulesToSchema() which wraps each rule.Apply() in a try/catch (lines 65–87). Any OverflowException from an out-of-range BigInteger is caught there, matching Swashbuckle behavior.

Integration test (BigIntegerParameterIntegrationTests.cs): Spins up a real WebApplication, fetches Swagger JSON via HTTP, and asserts minimum/maximum are set on BigInteger parameters. This is the right way to test the full pipeline without relying on internal schema builder internals.


Remaining Item

AspNetCore test still has a soft-pass else branch (Minor)

AspNetCoreOpenApiTests.cs:114-121:

else
{
    // Known architectural limitation: Microsoft.AspNetCore.OpenApi renders BigInteger as a $ref
    // but its pipeline has no SchemaRepository concept, so the $ref cannot be resolved for
    // constraint application. Validation rules are not applied in this path.
    value.TryGetProperty("$ref", out _).Should().BeTrue(
        "BigInteger should either have inline min/max or be a $ref");
}

The comment is now accurate and honest about the limitation. However, the assertion is still trivially satisfied whenever BigInteger is a $ref — it doesn't verify that constraints were applied. If the limitation is real and expected, this else-branch provides no test coverage. Two cleaner alternatives:

  1. Document it as a skip with explicit annotation — use Assert.Skip("Known limitation: ...") (if using xunit.v3) so CI output is explicit.
  2. Remove the else branch entirely — let the test fail on TFMs where minimum is absent, making the limitation visible rather than silently passing.

Fix suggestion →


Verdict

All blocking issues from previous reviews have been resolved. The implementation is correct, the test suite covers the key scenarios (in-range values, overflow, exclusive boundaries, shared schema corruption, and integration), and the core change is focused and minimal. The remaining item above is non-blocking.

Ready to merge once the maintainer decides how to handle the soft-pass test.
| Branch: feature/issue-146-biginteger-support

…t schema

ASP.NET Core OpenAPI serializes BigInteger as a $ref to the component
schema. Validation rules are correctly applied to the shared component
object, so the test should check constraints there instead of expecting
them inline on the property.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@avgalex
Copy link
Member Author

avgalex commented Mar 9, 2026

@claude review this PR

@claude
Copy link

claude bot commented Mar 9, 2026

Claude finished @avgalex's task in 2m 40s —— View job


PR Review

Tasks:

  • Gather context and understand the PR
  • Read changed source files
  • Read changed test files
  • Analyze code quality, correctness, and potential issues
  • Post comprehensive review feedback

Summary

This is the fourth review pass. All previously identified issues have been resolved. The implementation is correct, well-tested, and ready to merge.


What's Changed Since Previous Review

AspNetCore soft-pass test — fixed (AspNetCoreOpenApiTests.cs:100-121):

The previous concern was that the else branch only checked for $ref existence without verifying constraints were applied. The new implementation correctly follows the $ref to the component schema and asserts minimum/maximum there:

if (value.TryGetProperty("$ref", out _))
{
    // Follow the $ref — constraints are on the BigInteger component schema
    var bigInteger = schemas.GetProperty("BigInteger");
    bigInteger.GetProperty("minimum").GetInt32().Should().Be(0);
    bigInteger.GetProperty("maximum").GetInt32().Should().Be(999);
}
else
{
    value.GetProperty("minimum").GetInt32().Should().Be(0);
    value.GetProperty("maximum").GetInt32().Should().Be(999);
}

Both branches now assert actual constraint values. This is correct for the ASP.NET Core path where the transformer applies rules to the shared BigInteger component schema rather than inline on the property.


Full Implementation Review

Extensions.cs — core change is minimal and correct

IsNumeric() and NumericToDecimal() are the two-line change that unlocks everything. The (decimal)bigInt explicit cast is the right approach since Convert.ToDecimal(bigInteger) doesn't work. Doc comment correctly reads "Convert numeric to decimal".

OpenApiSchemaCompatibility.cs — mutation isolation is well-designed

The separation between GetProperty/TryGetProperty (read-only, returns shared schema) and ResolveRefProperty (mutation-safe, creates a CreateShallowCopy() and replaces the $ref entry in-place) is clean. The XML doc comments on the public methods correctly document the mutation contract:

The returned schema must not be mutated; use ResolveRefProperty when mutation isolation is needed.

The ResolveRefProperty idempotency is also correct: a second call on the same key finds the property is already an OpenApiSchema (the copy from the first call), and returns it directly rather than creating another copy.

OpenApiRuleContext.cs — mutation path correctly uses ResolveRefProperty

#if OPENAPI_V2
    var schemaProperty = OpenApiSchemaCompatibility.ResolveRefProperty(Schema, PropertyKey, _schemaRepository);
#else
    var schemaProperty = OpenApiSchemaCompatibility.GetProperty(Schema, PropertyKey);
#endif

The #if OPENAPI_V2 guard is correct — only v2/net10.0+ uses OpenApiSchemaReference; the non-v2 path doesn't need the copy logic. Newline-at-EOF is now present.

FluentValidationDocumentFilter.cs / FluentValidationOperationFilter.cs — read-only use of TryGetProperty is correct

Both filters use TryGetProperty with context.SchemaRepository, then only read from the resolved property (copying values to parameterSchema). They never mutate property itself, so using the shared schema is safe here. The comment // Copy from property schema to parameter schema. makes this intent explicit.

NSwagFluentValidationRuleProvider.cs — consistent with Swashbuckle path

All Convert.ToDecimal() calls replaced with NumericToDecimal(). Combined with the try/catch in FluentValidationSchemaBuilder.ApplyRulesToSchema(), overflow behavior is now identical between NSwag and Swashbuckle paths.

TestCompatibility.GetProperty — no longer a duplicate

Now delegates directly to OpenApiSchemaCompatibility.GetProperty, eliminating the drift risk identified in the second review.

SchemaReferenceResolutionTests.cs — targeted and well-structured

  • GetProperty_Should_Resolve_SchemaReference_Via_Repository — verifies $ref resolution works
  • TryGetProperty_Should_Resolve_SchemaReference_Via_Repository — same for TryGet variant
  • GetProperty_Without_Repository_After_Filter_Processing — verifies post-filter state
  • SharedRef_Should_Not_Corrupt_Between_Models — the critical regression test: two models with different BigInteger ranges into the same repository, asserts each gets independent constraints

BigIntegerParameterIntegrationTests.cs — full-pipeline test

Spins up a real WebApplication, fetches /swagger/v1/swagger.json via HTTP, and asserts minimum/maximum on the Limit parameter. This catches issues that unit tests miss (serialization format, OperationFilter integration, TFM differences).


Minor Observation (Non-blocking)

GetProperty_Without_Repository_After_Filter_Processing asserts that property != null after calling GetProperty without a repository. This works because by the time the test calls it, the SchemaFilter has already replaced the $ref entry with a concrete OpenApiSchema copy. The test comment correctly explains this. It is slightly fragile (it tests an implicit side effect of schema generation), but the existing comment makes the intent clear. Not worth changing.


Verdict

All issues from previous review rounds are resolved:

Issue Status
Shared schema mutation (Medium) ✅ Fixed via ResolveRefProperty + CreateShallowCopy()
NSwag overflow protection (Bug) ✅ False positive — covered by FluentValidationSchemaBuilder try/catch
Doc comment "double" vs "decimal" (Cosmetic) ✅ Fixed
Duplicate GetProperty in TestCompatibility (Cosmetic) ✅ Fixed
AspNetCore soft-pass else branch (Minor) ✅ Fixed — now asserts constraints on BigInteger component schema
Missing newline at EOF (Cosmetic) ✅ Fixed

Ready to merge.
| Branch: feature/issue-146-biginteger-support

Add 7.1.2 release notes covering BigInteger support (Issue #146),
shared schema mutation fix, and package license/icon fixes (Issue #144).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@avgalex avgalex merged commit 29a50d3 into master Mar 9, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Minimum and maximum restrictions for BigInteger

1 participant