Skip to content

Generate DateOnly and TimeOnly: Gen functions, auto-generation and attributes - #488

Merged
AlexeyRaga merged 2 commits into
hedgehogqa:masterfrom
xperiandri:dateonly-timeonly
Oct 12, 2026
Merged

AlexeyRaga merged 2 commits into
hedgehogqa:masterfrom
xperiandri:dateonly-timeonly

Conversation

@xperiandri

Copy link
Copy Markdown
Contributor

Gen.auto<DateOnly> and Gen.auto<TimeOnly> throw today, so a property with a parameter of one of these types fails in every adapter:

[<Property>]
let ``a date and a time`` (date: DateOnly) (time: TimeOnly) = true
// System.ArgumentOutOfRangeException: Year, Month, and Day parameters describe an un-representable DateTime.
// System.ArgumentOutOfRangeException: Ticks must be between 0 and and TimeOnly.MaxValue.Ticks. (Parameter 'ticks')

Hedgehog has no generator for the two types, so auto-generation goes through their constructors, DateOnly(year, month, day) and TimeOnly(ticks), and passes arbitrary integers.

What this adds

  • Gen.dateOnly and Gen.timeOnly (Gen.DateTime.fs), from a Range, like Gen.dateTime and Gen.timeSpan. They generate over the day number and the ticks of the value, and sit next to Gen.timeSpan, in the block that is not compiled for Fable.
  • Gen.DateOnly and Gen.TimeOnly in Hedgehog.Linq.
  • Default generators, so that Gen.auto and the adapters generate both types without any setup:
    • DateOnly: an exponential range around 2000-01-01 over the whole type, as for DateTime;
    • TimeOnly: a linear range over the day. An exponential one would keep the times of half of all sizes within the first tenth of a second after midnight, because a day has 864 billion ticks.
  • [<DateOnly>] and [<TimeOnly>] in Hedgehog.Xunit and Hedgehog.NUnit, next to [<DateTime>] and [<DateTimeOffset>]: a minimum and a maximum, both included. Without arguments DateOnly generates within the 3650 days from 2000-01-01, the dates of the default range of [<DateTime>], and TimeOnly any time of day.

An attribute argument has to be a constant, so it cannot be a DateOnly or a TimeOnly. Both attributes therefore also take their range as integers; the constructor that takes the two values serves attributes that derive from them.

[<Property>]
let ``dates of 2024`` ([<DateOnly(2024, 1, 1, 2024, 12, 31)>] date: DateOnly) =
    date.Year = 2024

[<Property>]
let ``office hours`` ([<TimeOnly(9, 0, 17, 0)>] time: TimeOnly) =
    time.Hour >= 9 && time <= TimeOnly(17, 0)

Testing

  • Hedgehog.Tests: both generators stay inside their range, reach every value of a range of three values, and shrink to the origin of their range.
  • Hedgehog.Autogen.Tests: Gen.auto<DateOnly> and Gen.auto<TimeOnly>. Both tests fail on master with the exceptions above.
  • Hedgehog.Xunit.Tests.FSharp, Hedgehog.Xunit.Tests.CSharp and Hedgehog.NUnit.Tests.FSharp: the attributes with and without a range. The two xUnit suites also run a property whose DateOnly and TimeOnly parameters have no attribute.
  • dotnet build and dotnet test of the whole solution pass locally with SDK 8.0.416.

Notes

  • docs/xunit/attributes.md describes the two attributes. Its DateTime section shows [<DateTime(DateTime(2020, 1, 1), TimeSpan.FromDays(365))>], which does not compile for the same reason: an attribute argument has to be a constant. I left that section alone.
  • The MSTest adapter of Add Hedgehog.MSTest: Property attributes for MSTest 4 #487 has the same two attributes. There they generate over the day number and the ticks themselves, so that Add Hedgehog.MSTest: Property attributes for MSTest 4 #487 does not depend on this pull request; whichever of the two is merged second can switch them to Gen.dateOnly and Gen.timeOnly.

🤖 Generated with Claude Code

xperiandri and others added 2 commits October 10, 2026 14:28
Gen.auto fails for both types: it builds a DateOnly through its
(year, month, day) constructor and a TimeOnly through its ticks
constructor with arbitrary integers, which throw
ArgumentOutOfRangeException ("Year, Month, and Day parameters describe
an un-representable DateTime", "Ticks must be between 0 and
TimeOnly.MaxValue.Ticks"). A property with a parameter of one of these
types therefore fails in every test framework adapter.

Gen.dateOnly and Gen.timeOnly generate from a range, like Gen.dateTime
and Gen.timeSpan, over the day number and the ticks of the value. They
sit next to Gen.timeSpan, in the part that is not compiled for Fable.
Hedgehog.Linq gets Gen.DateOnly and Gen.TimeOnly.

DefaultGenerators uses them, so Gen.auto and the adapters generate both
types: a DateOnly from an exponential range around 2000-01-01, as for
DateTime, and a TimeOnly from a linear range over the day. An
exponential range would keep the times of half of all sizes within the
first tenth of a second after midnight, because a day has 864 billion
ticks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…Unit

DateOnlyAttribute and TimeOnlyAttribute set the generator of one
parameter, like DateTimeAttribute and DateTimeOffsetAttribute, from a
minimum to a maximum, both included. Without arguments DateOnly
generates within the 3650 days from 2000-01-01, the dates of
DateTimeAttribute's default range, and TimeOnly any time of day.

An attribute argument must be a constant, so it cannot be a DateOnly or
a TimeOnly. Both attributes therefore also take their range as
integers, [<DateOnly(2024, 1, 1, 2024, 12, 31)>] and
[<TimeOnly(9, 0, 17, 0)>]; the constructor that takes the two values
serves attributes that derive from these.

The tests cover both adapters in F# and Hedgehog.Xunit in C#, including
a property whose DateOnly and TimeOnly parameters have no attribute. The
attribute documentation of Hedgehog.Xunit describes both attributes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Copilot AI balanced review requested due to automatic review settings October 10, 2026 12:36

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟢 Approval recommended

The implementations correctly preserve range bounds and shrink origins, with appropriate adapter and autogeneration coverage.

0 open findings

What changed in this PR

Adds first-class DateOnly and TimeOnly generation across Hedgehog’s F#, C#, autogeneration, xUnit, and NUnit APIs.

Changes:

  • Adds range-aware generators and LINQ wrappers.
  • Registers safe default autogenerators.
  • Adds adapter attributes, documentation, and comprehensive tests.
File Description
src/​Hedgehog/​Gen.DateTime.fs Implements both generators.
src/​Hedgehog/​Linq/​Gen.fs Exposes C# generator APIs.
src/​Hedgehog/​Autogen/​DefaultGenerators.fs Registers default generators.
src/​Hedgehog.Xunit/​GenAttribute.Prelude.fs Adds xUnit attributes.
src/​Hedgehog.NUnit/​GenAttribute.Prelude.fs Adds NUnit attributes.
tests/​Hedgehog.Tests/​GenTests.fs Tests ranges and shrinking.
tests/​Hedgehog.Autogen.Tests/​GenTests.fs Tests automatic generation.
tests/​Hedgehog.Xunit.Tests.FSharp/​PropertyTests.fs Tests F# xUnit integration.
tests/​Hedgehog.Xunit.Tests.CSharp/​AttributesTests.cs Tests C# xUnit integration.
tests/​Hedgehog.NUnit.Tests.FSharp/​GenAttributePreludeTests.fs Tests NUnit integration.
docs/​xunit/​attributes.md Documents the new attributes.

🧠 Review effort: Balanced


💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

xperiandri added a commit to fsprojects/FSharp.Azure.Cosmos that referenced this pull request Oct 10, 2026
The maintainer's reviews of 2026-10-10 changed several things the record
describes, and it now says so where each belongs.

The Hedgehog MSTest adapter (#43): the in-repository copy follows the
coding guidelines of this repository, while the upstream pull request
keeps upstream's style in a copy of its own, so a change of behaviour
goes into both; an invocation that MSTest could not run stops the run
instead of being shrunk; Odd and Even stay inside their range; DateOnly
and TimeOnly get generators, upstream through
hedgehogqa/fsharp-hedgehog#488. The open question of the adapter's code
style is answered, with formatting and nullness checking still open.

Collections (section 4): the shared collection functions of #47 that
return voption and struct tuples, tested with properties in #50, and the
rule of one module per pipeline of #49.

Build (section 5): why FAKE's DotNet.test cannot run the test
applications, and fsprojects/FAKE#2903, which adds DotNet.testMTP.

The spec model (sections 6 and 16): EquatableArray and the ImmutableArray
patterns are #48 and the model itself #42; the validator returns an
ImmutableArray of struct errors.

Golden baselines (section 13): a literal type provider was evaluated on
the question asked in #46 and rejected, with the reasons.

Tests (section 22): test category attributes sorted by name, Pascal-case
assertion functions and ImmutableArray for shared test data.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
xperiandri added a commit to fsprojects/FSharp.Azure.Cosmos that referenced this pull request Oct 10, 2026
The maintainer's reviews of 2026-10-10 changed several things the record
describes, and it now says so where each belongs.

The Hedgehog MSTest adapter (#43): the in-repository copy follows the
coding guidelines of this repository, while the upstream pull request
keeps upstream's style in a copy of its own, so a change of behaviour
goes into both; an invocation that MSTest could not run stops the run
instead of being shrunk; the cancellation token is checked after every
invocation, whatever its outcome, which the automatic review of #50
asked for; Odd and Even stay inside their range; DateOnly and TimeOnly
get generators, upstream through hedgehogqa/fsharp-hedgehog#488. The open question of the adapter's code
style is answered, with formatting and nullness checking still open.

Collections (section 4): the shared collection functions of #47 that
return voption and struct tuples, tested with properties in #50, and the
rule of one module per pipeline of #49.

Build (section 5): why FAKE's DotNet.test cannot run the test
applications, and fsprojects/FAKE#2903, which adds DotNet.testMTP.

The spec model (sections 6 and 16): EquatableArray and the ImmutableArray
patterns are #48 and the model itself #42; the validator returns an
ImmutableArray of struct errors.

Golden baselines (section 13): a literal type provider was evaluated on
the question asked in #46 and rejected, with the reasons.

Tests (section 22): test category attributes sorted by name, Pascal-case
assertion functions and ImmutableArray for shared test data.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
xperiandri added a commit to fsprojects/FSharp.Azure.Cosmos that referenced this pull request Oct 10, 2026
The maintainer's reviews of 2026-10-10 changed several things the record
describes, and it now says so where each belongs.

The Hedgehog MSTest adapter (#43): the in-repository copy follows the
coding guidelines of this repository, while the upstream pull request
keeps upstream's style in a copy of its own, so a change of behaviour
goes into both; an invocation that MSTest could not run stops the run
instead of being shrunk; the cancellation token is checked after every
invocation, whatever its outcome, which the automatic review of #50
asked for; Odd and Even stay inside their range; DateOnly and TimeOnly
get generators, upstream through hedgehogqa/fsharp-hedgehog#488. The open question of the adapter's code
style is answered, with formatting and nullness checking still open.

Collections (section 4): the shared collection functions of #47 that
return voption and struct tuples, tested with properties in #50, and the
rule of one module per pipeline of #49.

Build (section 5): why FAKE's DotNet.test cannot run the test
applications, and fsprojects/FAKE#2903, which adds DotNet.testMTP.

The spec model (sections 6 and 16): EquatableArray and the ImmutableArray
patterns are #48 and the model itself #42; the validator returns an
ImmutableArray of struct errors.

Golden baselines (section 13): a literal type provider was evaluated on
the question asked in #46 and rejected, with the reasons.

Tests (section 22): test category attributes sorted by name, Pascal-case
assertion functions and ImmutableArray for shared test data.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
xperiandri added a commit to fsprojects/FSharp.Azure.Cosmos that referenced this pull request Oct 10, 2026
The maintainer's reviews of 2026-10-10 changed several things the record
describes, and it now says so where each belongs.

The Hedgehog MSTest adapter (#43): the in-repository copy follows the
coding guidelines of this repository, while the upstream pull request
keeps upstream's style in a copy of its own, so a change of behaviour
goes into both; an invocation that MSTest could not run stops the run
instead of being shrunk; the cancellation token is checked after every
invocation, whatever its outcome, which the automatic review of #50
asked for; Odd and Even stay inside their range; DateOnly and TimeOnly
get generators, upstream through hedgehogqa/fsharp-hedgehog#488. The
open question of the adapter's code style is answered, formatting and
nullness checking included: the two projects are formatted with Fantomas
and build with nullness checking on, and only the verbatim port keeps
upstream's settings.

Collections (section 4): the shared collection functions of #47 that
return voption and struct tuples, tested with properties in #50, and the
rule of one module per pipeline of #49.

Build (section 5): why FAKE's DotNet.test cannot run the test
applications, and fsprojects/FAKE#2903, which adds DotNet.testMTP.

The spec model (sections 6 and 16): EquatableArray and the ImmutableArray
patterns are #48 and the model itself #42; the validator returns an
ImmutableArray of struct errors.

Golden baselines (section 13): a literal type provider was evaluated on
the question asked in #46 and rejected, with the reasons.

Tests (section 22): test category attributes sorted by name, in #51
with an instruction scoped to those files, Pascal-case assertion
functions and ImmutableArray for shared test data.

Two more answers of the same day: the Windows emulator lane of #45 runs
weekly instead of nightly (section 2), and the shared collection
functions of #47 are in the namespace FSharp.Azure.Cosmos instead of the
global one (section 4).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
xperiandri added a commit to fsprojects/FSharp.Azure.Cosmos that referenced this pull request Oct 10, 2026
The maintainer's reviews of 2026-10-10 changed several things the record
describes, and it now says so where each belongs.

The Hedgehog MSTest adapter (#43): the in-repository copy follows the
coding guidelines of this repository, while the upstream pull request
keeps upstream's style in a copy of its own, so a change of behaviour
goes into both; an invocation that MSTest could not run stops the run
instead of being shrunk; the cancellation token is checked after every
invocation, whatever its outcome, which the automatic review of #50
asked for; Odd and Even stay inside their range; DateOnly and TimeOnly
get generators, upstream through hedgehogqa/fsharp-hedgehog#488. The
open question of the adapter's code style is answered, formatting and
nullness checking included: the two projects are formatted with Fantomas
and build with nullness checking on, and only the verbatim port keeps
upstream's settings.

Collections (section 4): the shared collection functions of #47 that
return voption and struct tuples, tested with properties in #50, and the
rule of one module per pipeline of #49.

Build (section 5): why FAKE's DotNet.test cannot run the test
applications, and fsprojects/FAKE#2903, which adds DotNet.testMTP.

The spec model (sections 6 and 16): EquatableArray and the ImmutableArray
patterns are #48 and the model itself #42; the validator returns an
ImmutableArray of struct errors.

Golden baselines (section 13): a literal type provider was evaluated on
the question asked in #46 and rejected, with the reasons.

Tests (section 22): test category attributes sorted by name, in #51
with an instruction scoped to those files, Pascal-case assertion
functions and ImmutableArray for shared test data.

Two more answers of the same day: the Windows emulator lane of #45 runs
weekly instead of nightly (section 2), and the shared collection
functions of #47 are in the namespace FSharp.Azure.Cosmos instead of the
global one (section 4).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
xperiandri added a commit to fsprojects/FSharp.Azure.Cosmos that referenced this pull request Oct 11, 2026
The maintainer's reviews of 2026-10-10 changed several things the record
describes, and it now says so where each belongs.

The Hedgehog MSTest adapter (#43): the in-repository copy follows the
coding guidelines of this repository, while the upstream pull request
keeps upstream's style in a copy of its own, so a change of behaviour
goes into both; an invocation that MSTest could not run stops the run
instead of being shrunk; the cancellation token is checked after every
invocation, whatever its outcome, which the automatic review of #50
asked for; Odd and Even stay inside their range; DateOnly and TimeOnly
get generators, upstream through hedgehogqa/fsharp-hedgehog#488. The
open question of the adapter's code style is answered, formatting and
nullness checking included: the two projects are formatted with Fantomas
and build with nullness checking on, and only the verbatim port keeps
upstream's settings.

Collections (section 4): the shared collection functions of #47 that
return voption and struct tuples, tested with properties in #50, and the
rule of one module per pipeline of #49.

Build (section 5): why FAKE's DotNet.test cannot run the test
applications, and fsprojects/FAKE#2903, which adds DotNet.testMTP.

The spec model (sections 6 and 16): EquatableArray and the ImmutableArray
patterns are #48 and the model itself #42; the validator returns an
ImmutableArray of struct errors.

Golden baselines (section 13): a literal type provider was evaluated on
the question asked in #46 and rejected, with the reasons.

Tests (section 22): test category attributes sorted by name, in #51
with an instruction scoped to those files, Pascal-case assertion
functions and ImmutableArray for shared test data.

Two more answers of the same day: the Windows emulator lane of #45 runs
weekly instead of nightly (section 2), and the shared collection
functions of #47 are in the namespace FSharp.Azure.Cosmos instead of the
global one (section 4).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
xperiandri added a commit to fsprojects/FSharp.Azure.Cosmos that referenced this pull request Oct 11, 2026
The maintainer's reviews of 2026-10-10 changed several things the record
describes, and it now says so where each belongs.

The Hedgehog MSTest adapter (#43): the in-repository copy follows the
coding guidelines of this repository, while the upstream pull request
keeps upstream's style in a copy of its own, so a change of behaviour
goes into both; an invocation that MSTest could not run stops the run
instead of being shrunk; the cancellation token is checked after every
invocation, whatever its outcome, which the automatic review of #50
asked for; Odd and Even stay inside their range; DateOnly and TimeOnly
get generators, upstream through hedgehogqa/fsharp-hedgehog#488. The
open question of the adapter's code style is answered, formatting and
nullness checking included: the two projects are formatted with Fantomas
and build with nullness checking on, and only the verbatim port keeps
upstream's settings.

Collections (section 4): the shared collection functions of #47 that
return voption and struct tuples, tested with properties in #50, and the
rule of one module per pipeline of #49.

Build (section 5): why FAKE's DotNet.test cannot run the test
applications, and fsprojects/FAKE#2903, which adds DotNet.testMTP.

The spec model (sections 6 and 16): EquatableArray and the ImmutableArray
patterns are #48 and the model itself #42; the validator returns an
ImmutableArray of struct errors.

Golden baselines (section 13): a literal type provider was evaluated on
the question asked in #46 and rejected, with the reasons.

Tests (section 22): test category attributes sorted by name, in #51
with an instruction scoped to those files, Pascal-case assertion
functions and ImmutableArray for shared test data.

Two more answers of the same day: the Windows emulator lane of #45 runs
weekly instead of nightly (section 2), and the shared collection
functions of #47 are in the namespace FSharp.Azure.Cosmos instead of the
global one (section 4).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@xperiandri
xperiandri requested a balanced review from Copilot October 11, 2026 11:48

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟢 Approval recommended

The generators, integrations, documentation, and tests are consistent and no unresolved correctness issues were found.

0 open findings

🧠 Review effort: Balanced

xperiandri added a commit to fsprojects/FSharp.Azure.Cosmos that referenced this pull request Oct 11, 2026
…tribute

Hedgehog 2.0.4 has no generator of the two types: `Gen.auto` calls a
constructor of the type with integers that it generates, and the
constructor refuses them. So a parameter of such a type, or of a type
that holds one, needed `[<DateOnly>]`, `[<TimeOnly>]` or a generator of
the test.

hedgehogqa/fsharp-hedgehog#488 adds the two default generators to
Hedgehog itself. Until a release has them, the adapter registers the
same two for the parameters of a property: the configuration that a
property starts from is `AutoGenConfig.propertyDefaults`, the defaults
of Hedgehog and these generators. The configuration that a test names
is merged over it as before, so a generator of the test still wins, and
so does an attribute on the parameter.

A date lies around 2000-01-01, further away the larger a case is. A
time of day lies anywhere in the day, later the larger a case is.

The suite has a test that fails as soon as Hedgehog generates the two
types by itself: `propertyDefaults` goes then.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
xperiandri added a commit to fsprojects/FSharp.Azure.Cosmos that referenced this pull request Oct 11, 2026
…ADR 0001

Hedgehog 2.0.4 cannot generate the two types, and
hedgehogqa/fsharp-hedgehog#488 adds the generators upstream. Until a
release has them, the adapter of this repository registers the same two
for the parameters of a property (#43). The record of the adapter says
so, and when the stand-in goes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
xperiandri added a commit to fsprojects/FSharp.Azure.Cosmos that referenced this pull request Oct 11, 2026
…tribute

Hedgehog 2.0.4 has no generator of the two types: `Gen.auto` calls a
constructor of the type with integers that it generates, and the
constructor refuses them. So a parameter of such a type, or of a type
that holds one, needed `[<DateOnly>]`, `[<TimeOnly>]` or a generator of
the test.

hedgehogqa/fsharp-hedgehog#488 adds the two default generators to
Hedgehog itself. Until a release has them, the adapter registers the
same two for the parameters of a property: the configuration that a
property starts from is `AutoGenConfig.propertyDefaults`, the defaults
of Hedgehog and these generators. The configuration that a test names
is merged over it as before, so a generator of the test still wins, and
so does an attribute on the parameter.

A date lies around 2000-01-01, further away the larger a case is. A
time of day lies anywhere in the day, later the larger a case is.

The suite has a test that fails as soon as Hedgehog generates the two
types by itself: `propertyDefaults` goes then.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@AlexeyRaga
AlexeyRaga merged commit 62a784e into hedgehogqa:master Oct 12, 2026
2 checks passed
xperiandri added a commit to fsprojects/FSharp.Azure.Cosmos that referenced this pull request Oct 13, 2026
…tribute

Hedgehog 2.0.4 has no generator of the two types: `Gen.auto` calls a
constructor of the type with integers that it generates, and the
constructor refuses them. So a parameter of such a type, or of a type
that holds one, needed `[<DateOnly>]`, `[<TimeOnly>]` or a generator of
the test.

hedgehogqa/fsharp-hedgehog#488 adds the two default generators to
Hedgehog itself. Until a release has them, the adapter registers the
same two for the parameters of a property: the configuration that a
property starts from is `AutoGenConfig.propertyDefaults`, the defaults
of Hedgehog and these generators. The configuration that a test names
is merged over it as before, so a generator of the test still wins, and
so does an attribute on the parameter.

A date lies around 2000-01-01, further away the larger a case is. A
time of day lies anywhere in the day, later the larger a case is.

The suite has a test that fails as soon as Hedgehog generates the two
types by itself: `propertyDefaults` goes then.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
xperiandri added a commit to fsprojects/FSharp.Azure.Cosmos that referenced this pull request Oct 13, 2026
Hedgehog.MSTest 1.0.0, the MSTest adapter of Hedgehog
(hedgehogqa/fsharp-hedgehog#487), is released, so a test project
references the package. Hedgehog 2.0.4 is the version that it depends
on. Both get a central version, and the coverage report leaves out their
assemblies, which a property test loads.

The agent instructions list the two packages and say how a property test
is written: a method of a [<TestClass>] type marked [<Property>], with
generated parameters, never Property.check inside a [<TestMethod>]; an
instance method that returns unit, Task or ValueTask and fails by
throwing, because MSTest 4 rejects static methods and other return types
and one such method fails the discovery of the whole assembly, which
--list-tests shows before a run; that MSTest runs the test class and its
[<TestInitialize>] and [<TestCleanup>] for every generated case and every
shrink step; and that a failure reports a [<Recheck>] that replays it.
They also say that Hedgehog 2.0.4 cannot generate DateOnly and TimeOnly,
which hedgehogqa/fsharp-hedgehog#488 has merged and not released, so a
parameter of such a type needs a generator of its own.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
xperiandri added a commit to fsprojects/FSharp.Azure.Cosmos that referenced this pull request Oct 17, 2026
The maintainer's reviews of 2026-10-10 changed several things the record
describes, and it now says so where each belongs.

The Hedgehog MSTest adapter (#43): the in-repository copy follows the
coding guidelines of this repository, while the upstream pull request
keeps upstream's style in a copy of its own, so a change of behaviour
goes into both; an invocation that MSTest could not run stops the run
instead of being shrunk; the cancellation token is checked after every
invocation, whatever its outcome, which the automatic review of #50
asked for; Odd and Even stay inside their range; DateOnly and TimeOnly
get generators, upstream through hedgehogqa/fsharp-hedgehog#488. The
open question of the adapter's code style is answered, formatting and
nullness checking included: the two projects are formatted with Fantomas
and build with nullness checking on, and only the verbatim port keeps
upstream's settings.

Collections (section 4): the shared collection functions of #47 that
return voption and struct tuples, tested with properties in #50, and the
rule of one module per pipeline of #49.

Build (section 5): why FAKE's DotNet.test cannot run the test
applications, and fsprojects/FAKE#2903, which adds DotNet.testMTP.

The spec model (sections 6 and 16): EquatableArray and the ImmutableArray
patterns are #48 and the model itself #42; the validator returns an
ImmutableArray of struct errors.

Golden baselines (section 13): a literal type provider was evaluated on
the question asked in #46 and rejected, with the reasons.

Tests (section 22): test category attributes sorted by name, in #51
with an instruction scoped to those files, Pascal-case assertion
functions and ImmutableArray for shared test data.

Two more answers of the same day: the Windows emulator lane of #45 runs
weekly instead of nightly (section 2), and the shared collection
functions of #47 are in the namespace FSharp.Azure.Cosmos instead of the
global one (section 4).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
xperiandri added a commit to fsprojects/FSharp.Azure.Cosmos that referenced this pull request Oct 17, 2026
…ADR 0001

Hedgehog 2.0.4 cannot generate the two types, and
hedgehogqa/fsharp-hedgehog#488 adds the generators upstream. Until a
release has them, the adapter of this repository registers the same two
for the parameters of a property (#43). The record of the adapter says
so, and when the stand-in goes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
xperiandri added a commit to fsprojects/FSharp.Azure.Cosmos that referenced this pull request Oct 17, 2026
The maintainer's reviews of 2026-10-10 changed several things the record
describes, and it now says so where each belongs.

The Hedgehog MSTest adapter (#43): the in-repository copy follows the
coding guidelines of this repository, while the upstream pull request
keeps upstream's style in a copy of its own, so a change of behaviour
goes into both; an invocation that MSTest could not run stops the run
instead of being shrunk; the cancellation token is checked after every
invocation, whatever its outcome, which the automatic review of #50
asked for; Odd and Even stay inside their range; DateOnly and TimeOnly
get generators, upstream through hedgehogqa/fsharp-hedgehog#488. The
open question of the adapter's code style is answered, formatting and
nullness checking included: the two projects are formatted with Fantomas
and build with nullness checking on, and only the verbatim port keeps
upstream's settings.

Collections (section 4): the shared collection functions of #47 that
return voption and struct tuples, tested with properties in #50, and the
rule of one module per pipeline of #49.

Build (section 5): why FAKE's DotNet.test cannot run the test
applications, and fsprojects/FAKE#2903, which adds DotNet.testMTP.

The spec model (sections 6 and 16): EquatableArray and the ImmutableArray
patterns are #48 and the model itself #42; the validator returns an
ImmutableArray of struct errors.

Golden baselines (section 13): a literal type provider was evaluated on
the question asked in #46 and rejected, with the reasons.

Tests (section 22): test category attributes sorted by name, in #51
with an instruction scoped to those files, Pascal-case assertion
functions and ImmutableArray for shared test data.

Two more answers of the same day: the Windows emulator lane of #45 runs
weekly instead of nightly (section 2), and the shared collection
functions of #47 are in the namespace FSharp.Azure.Cosmos instead of the
global one (section 4).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
xperiandri added a commit to fsprojects/FSharp.Azure.Cosmos that referenced this pull request Oct 17, 2026
…ADR 0001

Hedgehog 2.0.4 cannot generate the two types, and
hedgehogqa/fsharp-hedgehog#488 adds the generators upstream. Until a
release has them, the adapter of this repository registers the same two
for the parameters of a property (#43). The record of the adapter says
so, and when the stand-in goes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
xperiandri added a commit to fsprojects/FSharp.Azure.Cosmos that referenced this pull request Oct 18, 2026
The maintainer's reviews of 2026-10-10 changed several things the record
describes, and it now says so where each belongs.

The Hedgehog MSTest adapter (#43): the in-repository copy follows the
coding guidelines of this repository, while the upstream pull request
keeps upstream's style in a copy of its own, so a change of behaviour
goes into both; an invocation that MSTest could not run stops the run
instead of being shrunk; the cancellation token is checked after every
invocation, whatever its outcome, which the automatic review of #50
asked for; Odd and Even stay inside their range; DateOnly and TimeOnly
get generators, upstream through hedgehogqa/fsharp-hedgehog#488. The
open question of the adapter's code style is answered, formatting and
nullness checking included: the two projects are formatted with Fantomas
and build with nullness checking on, and only the verbatim port keeps
upstream's settings.

Collections (section 4): the shared collection functions of #47 that
return voption and struct tuples, tested with properties in #50, and the
rule of one module per pipeline of #49.

Build (section 5): why FAKE's DotNet.test cannot run the test
applications, and fsprojects/FAKE#2903, which adds DotNet.testMTP.

The spec model (sections 6 and 16): EquatableArray and the ImmutableArray
patterns are #48 and the model itself #42; the validator returns an
ImmutableArray of struct errors.

Golden baselines (section 13): a literal type provider was evaluated on
the question asked in #46 and rejected, with the reasons.

Tests (section 22): test category attributes sorted by name, in #51
with an instruction scoped to those files, Pascal-case assertion
functions and ImmutableArray for shared test data.

Two more answers of the same day: the Windows emulator lane of #45 runs
weekly instead of nightly (section 2), and the shared collection
functions of #47 are in the namespace FSharp.Azure.Cosmos instead of the
global one (section 4).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
xperiandri added a commit to fsprojects/FSharp.Azure.Cosmos that referenced this pull request Oct 18, 2026
…ADR 0001

Hedgehog 2.0.4 cannot generate the two types, and
hedgehogqa/fsharp-hedgehog#488 adds the generators upstream. Until a
release has them, the adapter of this repository registers the same two
for the parameters of a property (#43). The record of the adapter says
so, and when the stand-in goes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
xperiandri added a commit to fsprojects/FSharp.Azure.Cosmos that referenced this pull request Oct 18, 2026
The maintainer's reviews of 2026-10-10 changed several things the record
describes, and it now says so where each belongs.

The Hedgehog MSTest adapter (#43): the in-repository copy follows the
coding guidelines of this repository, while the upstream pull request
keeps upstream's style in a copy of its own, so a change of behaviour
goes into both; an invocation that MSTest could not run stops the run
instead of being shrunk; the cancellation token is checked after every
invocation, whatever its outcome, which the automatic review of #50
asked for; Odd and Even stay inside their range; DateOnly and TimeOnly
get generators, upstream through hedgehogqa/fsharp-hedgehog#488. The
open question of the adapter's code style is answered, formatting and
nullness checking included: the two projects are formatted with Fantomas
and build with nullness checking on, and only the verbatim port keeps
upstream's settings.

Collections (section 4): the shared collection functions of #47 that
return voption and struct tuples, tested with properties in #50, and the
rule of one module per pipeline of #49.

Build (section 5): why FAKE's DotNet.test cannot run the test
applications, and fsprojects/FAKE#2903, which adds DotNet.testMTP.

The spec model (sections 6 and 16): EquatableArray and the ImmutableArray
patterns are #48 and the model itself #42; the validator returns an
ImmutableArray of struct errors.

Golden baselines (section 13): a literal type provider was evaluated on
the question asked in #46 and rejected, with the reasons.

Tests (section 22): test category attributes sorted by name, in #51
with an instruction scoped to those files, Pascal-case assertion
functions and ImmutableArray for shared test data.

Two more answers of the same day: the Windows emulator lane of #45 runs
weekly instead of nightly (section 2), and the shared collection
functions of #47 are in the namespace FSharp.Azure.Cosmos instead of the
global one (section 4).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
xperiandri added a commit to fsprojects/FSharp.Azure.Cosmos that referenced this pull request Oct 18, 2026
…ADR 0001

Hedgehog 2.0.4 cannot generate the two types, and
hedgehogqa/fsharp-hedgehog#488 adds the generators upstream. Until a
release has them, the adapter of this repository registers the same two
for the parameters of a property (#43). The record of the adapter says
so, and when the stand-in goes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
xperiandri added a commit to fsprojects/FSharp.Azure.Cosmos that referenced this pull request Oct 18, 2026
The maintainer's reviews of 2026-10-10 changed several things the record
describes, and it now says so where each belongs.

The Hedgehog MSTest adapter (#43): the in-repository copy follows the
coding guidelines of this repository, while the upstream pull request
keeps upstream's style in a copy of its own, so a change of behaviour
goes into both; an invocation that MSTest could not run stops the run
instead of being shrunk; the cancellation token is checked after every
invocation, whatever its outcome, which the automatic review of #50
asked for; Odd and Even stay inside their range; DateOnly and TimeOnly
get generators, upstream through hedgehogqa/fsharp-hedgehog#488. The
open question of the adapter's code style is answered, formatting and
nullness checking included: the two projects are formatted with Fantomas
and build with nullness checking on, and only the verbatim port keeps
upstream's settings.

Collections (section 4): the shared collection functions of #47 that
return voption and struct tuples, tested with properties in #50, and the
rule of one module per pipeline of #49.

Build (section 5): why FAKE's DotNet.test cannot run the test
applications, and fsprojects/FAKE#2903, which adds DotNet.testMTP.

The spec model (sections 6 and 16): EquatableArray and the ImmutableArray
patterns are #48 and the model itself #42; the validator returns an
ImmutableArray of struct errors.

Golden baselines (section 13): a literal type provider was evaluated on
the question asked in #46 and rejected, with the reasons.

Tests (section 22): test category attributes sorted by name, in #51
with an instruction scoped to those files, Pascal-case assertion
functions and ImmutableArray for shared test data.

Two more answers of the same day: the Windows emulator lane of #45 runs
weekly instead of nightly (section 2), and the shared collection
functions of #47 are in the namespace FSharp.Azure.Cosmos instead of the
global one (section 4).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
xperiandri added a commit to fsprojects/FSharp.Azure.Cosmos that referenced this pull request Oct 18, 2026
…ADR 0001

Hedgehog 2.0.4 cannot generate the two types, and
hedgehogqa/fsharp-hedgehog#488 adds the generators upstream. Until a
release has them, the adapter of this repository registers the same two
for the parameters of a property (#43). The record of the adapter says
so, and when the stand-in goes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
xperiandri added a commit to fsprojects/FSharp.Azure.Cosmos that referenced this pull request Oct 18, 2026
The maintainer's reviews of 2026-10-10 changed several things the record
describes, and it now says so where each belongs.

The Hedgehog MSTest adapter (#43): the in-repository copy follows the
coding guidelines of this repository, while the upstream pull request
keeps upstream's style in a copy of its own, so a change of behaviour
goes into both; an invocation that MSTest could not run stops the run
instead of being shrunk; the cancellation token is checked after every
invocation, whatever its outcome, which the automatic review of #50
asked for; Odd and Even stay inside their range; DateOnly and TimeOnly
get generators, upstream through hedgehogqa/fsharp-hedgehog#488. The
open question of the adapter's code style is answered, formatting and
nullness checking included: the two projects are formatted with Fantomas
and build with nullness checking on, and only the verbatim port keeps
upstream's settings.

Collections (section 4): the shared collection functions of #47 that
return voption and struct tuples, tested with properties in #50, and the
rule of one module per pipeline of #49.

Build (section 5): why FAKE's DotNet.test cannot run the test
applications, and fsprojects/FAKE#2903, which adds DotNet.testMTP.

The spec model (sections 6 and 16): EquatableArray and the ImmutableArray
patterns are #48 and the model itself #42; the validator returns an
ImmutableArray of struct errors.

Golden baselines (section 13): a literal type provider was evaluated on
the question asked in #46 and rejected, with the reasons.

Tests (section 22): test category attributes sorted by name, in #51
with an instruction scoped to those files, Pascal-case assertion
functions and ImmutableArray for shared test data.

Two more answers of the same day: the Windows emulator lane of #45 runs
weekly instead of nightly (section 2), and the shared collection
functions of #47 are in the namespace FSharp.Azure.Cosmos instead of the
global one (section 4).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
xperiandri added a commit to fsprojects/FSharp.Azure.Cosmos that referenced this pull request Oct 18, 2026
…ADR 0001

Hedgehog 2.0.4 cannot generate the two types, and
hedgehogqa/fsharp-hedgehog#488 adds the generators upstream. Until a
release has them, the adapter of this repository registers the same two
for the parameters of a property (#43). The record of the adapter says
so, and when the stand-in goes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
xperiandri added a commit to fsprojects/FSharp.Azure.Cosmos that referenced this pull request Oct 18, 2026
The maintainer's reviews of 2026-10-10 changed several things the record
describes, and it now says so where each belongs.

The Hedgehog MSTest adapter (#43): the in-repository copy follows the
coding guidelines of this repository, while the upstream pull request
keeps upstream's style in a copy of its own, so a change of behaviour
goes into both; an invocation that MSTest could not run stops the run
instead of being shrunk; the cancellation token is checked after every
invocation, whatever its outcome, which the automatic review of #50
asked for; Odd and Even stay inside their range; DateOnly and TimeOnly
get generators, upstream through hedgehogqa/fsharp-hedgehog#488. The
open question of the adapter's code style is answered, formatting and
nullness checking included: the two projects are formatted with Fantomas
and build with nullness checking on, and only the verbatim port keeps
upstream's settings.

Collections (section 4): the shared collection functions of #47 that
return voption and struct tuples, tested with properties in #50, and the
rule of one module per pipeline of #49.

Build (section 5): why FAKE's DotNet.test cannot run the test
applications, and fsprojects/FAKE#2903, which adds DotNet.testMTP.

The spec model (sections 6 and 16): EquatableArray and the ImmutableArray
patterns are #48 and the model itself #42; the validator returns an
ImmutableArray of struct errors.

Golden baselines (section 13): a literal type provider was evaluated on
the question asked in #46 and rejected, with the reasons.

Tests (section 22): test category attributes sorted by name, in #51
with an instruction scoped to those files, Pascal-case assertion
functions and ImmutableArray for shared test data.

Two more answers of the same day: the Windows emulator lane of #45 runs
weekly instead of nightly (section 2), and the shared collection
functions of #47 are in the namespace FSharp.Azure.Cosmos instead of the
global one (section 4).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
xperiandri added a commit to fsprojects/FSharp.Azure.Cosmos that referenced this pull request Oct 18, 2026
…ADR 0001

Hedgehog 2.0.4 cannot generate the two types, and
hedgehogqa/fsharp-hedgehog#488 adds the generators upstream. Until a
release has them, the adapter of this repository registers the same two
for the parameters of a property (#43). The record of the adapter says
so, and when the stand-in goes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
xperiandri added a commit to fsprojects/FSharp.Azure.Cosmos that referenced this pull request Oct 18, 2026
The maintainer's reviews of 2026-10-10 changed several things the record
describes, and it now says so where each belongs.

The Hedgehog MSTest adapter (#43): the in-repository copy follows the
coding guidelines of this repository, while the upstream pull request
keeps upstream's style in a copy of its own, so a change of behaviour
goes into both; an invocation that MSTest could not run stops the run
instead of being shrunk; the cancellation token is checked after every
invocation, whatever its outcome, which the automatic review of #50
asked for; Odd and Even stay inside their range; DateOnly and TimeOnly
get generators, upstream through hedgehogqa/fsharp-hedgehog#488. The
open question of the adapter's code style is answered, formatting and
nullness checking included: the two projects are formatted with Fantomas
and build with nullness checking on, and only the verbatim port keeps
upstream's settings.

Collections (section 4): the shared collection functions of #47 that
return voption and struct tuples, tested with properties in #50, and the
rule of one module per pipeline of #49.

Build (section 5): why FAKE's DotNet.test cannot run the test
applications, and fsprojects/FAKE#2903, which adds DotNet.testMTP.

The spec model (sections 6 and 16): EquatableArray and the ImmutableArray
patterns are #48 and the model itself #42; the validator returns an
ImmutableArray of struct errors.

Golden baselines (section 13): a literal type provider was evaluated on
the question asked in #46 and rejected, with the reasons.

Tests (section 22): test category attributes sorted by name, in #51
with an instruction scoped to those files, Pascal-case assertion
functions and ImmutableArray for shared test data.

Two more answers of the same day: the Windows emulator lane of #45 runs
weekly instead of nightly (section 2), and the shared collection
functions of #47 are in the namespace FSharp.Azure.Cosmos instead of the
global one (section 4).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
xperiandri added a commit to fsprojects/FSharp.Azure.Cosmos that referenced this pull request Oct 18, 2026
…ADR 0001

Hedgehog 2.0.4 cannot generate the two types, and
hedgehogqa/fsharp-hedgehog#488 adds the generators upstream. Until a
release has them, the adapter of this repository registers the same two
for the parameters of a property (#43). The record of the adapter says
so, and when the stand-in goes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
xperiandri added a commit to fsprojects/FSharp.Azure.Cosmos that referenced this pull request Oct 18, 2026
The maintainer's reviews of 2026-10-10 changed several things the record
describes, and it now says so where each belongs.

The Hedgehog MSTest adapter (#43): the in-repository copy follows the
coding guidelines of this repository, while the upstream pull request
keeps upstream's style in a copy of its own, so a change of behaviour
goes into both; an invocation that MSTest could not run stops the run
instead of being shrunk; the cancellation token is checked after every
invocation, whatever its outcome, which the automatic review of #50
asked for; Odd and Even stay inside their range; DateOnly and TimeOnly
get generators, upstream through hedgehogqa/fsharp-hedgehog#488. The
open question of the adapter's code style is answered, formatting and
nullness checking included: the two projects are formatted with Fantomas
and build with nullness checking on, and only the verbatim port keeps
upstream's settings.

Collections (section 4): the shared collection functions of #47 that
return voption and struct tuples, tested with properties in #50, and the
rule of one module per pipeline of #49.

Build (section 5): why FAKE's DotNet.test cannot run the test
applications, and fsprojects/FAKE#2903, which adds DotNet.testMTP.

The spec model (sections 6 and 16): EquatableArray and the ImmutableArray
patterns are #48 and the model itself #42; the validator returns an
ImmutableArray of struct errors.

Golden baselines (section 13): a literal type provider was evaluated on
the question asked in #46 and rejected, with the reasons.

Tests (section 22): test category attributes sorted by name, in #51
with an instruction scoped to those files, Pascal-case assertion
functions and ImmutableArray for shared test data.

Two more answers of the same day: the Windows emulator lane of #45 runs
weekly instead of nightly (section 2), and the shared collection
functions of #47 are in the namespace FSharp.Azure.Cosmos instead of the
global one (section 4).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
xperiandri added a commit to fsprojects/FSharp.Azure.Cosmos that referenced this pull request Oct 18, 2026
…ADR 0001

Hedgehog 2.0.4 cannot generate the two types, and
hedgehogqa/fsharp-hedgehog#488 adds the generators upstream. Until a
release has them, the adapter of this repository registers the same two
for the parameters of a property (#43). The record of the adapter says
so, and when the stand-in goes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.

3 participants