[ 
https://issues.apache.org/jira/browse/GROOVY-12124?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18093138#comment-18093138
 ] 

ASF GitHub Bot commented on GROOVY-12124:
-----------------------------------------

codecov-commenter commented on PR #2653:
URL: https://github.com/apache/groovy/pull/2653#issuecomment-4862687799

   ## 
[Codecov](https://app.codecov.io/gh/apache/groovy/pull/2653?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)
 Report
   :x: Patch coverage is `79.14692%` with `44 lines` in your changes missing 
coverage. Please review.
   :white_check_mark: Project coverage is 68.5902%. Comparing base 
([`449dfeb`](https://app.codecov.io/gh/apache/groovy/commit/449dfebc985c0a019e59eb110c5cefcec3272bf1?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache))
 to head 
([`68b3cba`](https://app.codecov.io/gh/apache/groovy/commit/68b3cba78197e2b56e1947771f2470924fc0e1b3?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)).
   :warning: Report is 2 commits behind head on master.
   
   | [Files with missing 
lines](https://app.codecov.io/gh/apache/groovy/pull/2653?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)
 | Patch % | Lines |
   |---|---|---|
   | 
[...he/groovy/dateutil/TimeDatumDependentDuration.java](https://app.codecov.io/gh/apache/groovy/pull/2653?src=pr&el=tree&filepath=subprojects%2Fgroovy-dateutil%2Fsrc%2Fmain%2Fjava%2Forg%2Fapache%2Fgroovy%2Fdateutil%2FTimeDatumDependentDuration.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-c3VicHJvamVjdHMvZ3Jvb3Z5LWRhdGV1dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9ncm9vdnkvZGF0ZXV0aWwvVGltZURhdHVtRGVwZW5kZW50RHVyYXRpb24uamF2YQ==)
 | 11.1111% | [16 Missing :warning: 
](https://app.codecov.io/gh/apache/groovy/pull/2653?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)
 |
   | 
[...apache/groovy/dateutil/DatumDependentDuration.java](https://app.codecov.io/gh/apache/groovy/pull/2653?src=pr&el=tree&filepath=subprojects%2Fgroovy-dateutil%2Fsrc%2Fmain%2Fjava%2Forg%2Fapache%2Fgroovy%2Fdateutil%2FDatumDependentDuration.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-c3VicHJvamVjdHMvZ3Jvb3Z5LWRhdGV1dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9ncm9vdnkvZGF0ZXV0aWwvRGF0dW1EZXBlbmRlbnREdXJhdGlvbi5qYXZh)
 | 55.0000% | [9 Missing :warning: 
](https://app.codecov.io/gh/apache/groovy/pull/2653?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)
 |
   | 
[.../java/org/apache/groovy/dateutil/TimeDuration.java](https://app.codecov.io/gh/apache/groovy/pull/2653?src=pr&el=tree&filepath=subprojects%2Fgroovy-dateutil%2Fsrc%2Fmain%2Fjava%2Forg%2Fapache%2Fgroovy%2Fdateutil%2FTimeDuration.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-c3VicHJvamVjdHMvZ3Jvb3Z5LWRhdGV1dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9ncm9vdnkvZGF0ZXV0aWwvVGltZUR1cmF0aW9uLmphdmE=)
 | 50.0000% | [9 Missing :warning: 
](https://app.codecov.io/gh/apache/groovy/pull/2653?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)
 |
   | 
[.../java/org/apache/groovy/datetime/TimeCategory.java](https://app.codecov.io/gh/apache/groovy/pull/2653?src=pr&el=tree&filepath=subprojects%2Fgroovy-datetime%2Fsrc%2Fmain%2Fjava%2Forg%2Fapache%2Fgroovy%2Fdatetime%2FTimeCategory.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-c3VicHJvamVjdHMvZ3Jvb3Z5LWRhdGV0aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9ncm9vdnkvZGF0ZXRpbWUvVGltZUNhdGVnb3J5LmphdmE=)
 | 85.7143% | [4 Missing :warning: 
](https://app.codecov.io/gh/apache/groovy/pull/2653?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)
 |
   | 
[...main/java/org/apache/groovy/dateutil/Duration.java](https://app.codecov.io/gh/apache/groovy/pull/2653?src=pr&el=tree&filepath=subprojects%2Fgroovy-dateutil%2Fsrc%2Fmain%2Fjava%2Forg%2Fapache%2Fgroovy%2Fdateutil%2FDuration.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-c3VicHJvamVjdHMvZ3Jvb3Z5LWRhdGV1dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9ncm9vdnkvZGF0ZXV0aWwvRHVyYXRpb24uamF2YQ==)
 | 80.9524% | [4 Missing :warning: 
](https://app.codecov.io/gh/apache/groovy/pull/2653?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)
 |
   | 
[.../java/org/apache/groovy/dateutil/BaseDuration.java](https://app.codecov.io/gh/apache/groovy/pull/2653?src=pr&el=tree&filepath=subprojects%2Fgroovy-dateutil%2Fsrc%2Fmain%2Fjava%2Forg%2Fapache%2Fgroovy%2Fdateutil%2FBaseDuration.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-c3VicHJvamVjdHMvZ3Jvb3Z5LWRhdGV1dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9ncm9vdnkvZGF0ZXV0aWwvQmFzZUR1cmF0aW9uLmphdmE=)
 | 98.5294% | [1 Missing :warning: 
](https://app.codecov.io/gh/apache/groovy/pull/2653?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)
 |
   | 
[.../java/org/apache/groovy/dateutil/TimeCategory.java](https://app.codecov.io/gh/apache/groovy/pull/2653?src=pr&el=tree&filepath=subprojects%2Fgroovy-dateutil%2Fsrc%2Fmain%2Fjava%2Forg%2Fapache%2Fgroovy%2Fdateutil%2FTimeCategory.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-c3VicHJvamVjdHMvZ3Jvb3Z5LWRhdGV1dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9ncm9vdnkvZGF0ZXV0aWwvVGltZUNhdGVnb3J5LmphdmE=)
 | 97.3684% | [1 Missing :warning: 
](https://app.codecov.io/gh/apache/groovy/pull/2653?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)
 |
   
   <details><summary>Additional details and impacted files</summary>
   
   
   
   [![Impacted file tree 
graph](https://app.codecov.io/gh/apache/groovy/pull/2653/graphs/tree.svg?width=650&height=150&src=pr&token=1r45138NfQ&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)](https://app.codecov.io/gh/apache/groovy/pull/2653?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)
   
   ```diff
   @@                Coverage Diff                 @@
   ##               master      #2653        +/-   ##
   ==================================================
   + Coverage     68.5728%   68.5902%   +0.0174%     
   - Complexity      33803      33884        +81     
   ==================================================
     Files            1524       1531         +7     
     Lines          128128     128339       +211     
     Branches        23289      23298         +9     
   ==================================================
   + Hits            87861      88028       +167     
   - Misses          32468      32510        +42     
   - Partials         7799       7801         +2     
   ```
   
   | [Files with missing 
lines](https://app.codecov.io/gh/apache/groovy/pull/2653?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)
 | Coverage Δ | |
   |---|---|---|
   | 
[src/main/java/groovy/time/BaseDuration.java](https://app.codecov.io/gh/apache/groovy/pull/2653?src=pr&el=tree&filepath=src%2Fmain%2Fjava%2Fgroovy%2Ftime%2FBaseDuration.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-c3JjL21haW4vamF2YS9ncm9vdnkvdGltZS9CYXNlRHVyYXRpb24uamF2YQ==)
 | `100.0000% <ø> (ø)` | |
   | 
[.../main/java/groovy/time/DatumDependentDuration.java](https://app.codecov.io/gh/apache/groovy/pull/2653?src=pr&el=tree&filepath=src%2Fmain%2Fjava%2Fgroovy%2Ftime%2FDatumDependentDuration.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-c3JjL21haW4vamF2YS9ncm9vdnkvdGltZS9EYXR1bURlcGVuZGVudER1cmF0aW9uLmphdmE=)
 | `100.0000% <ø> (ø)` | |
   | 
[src/main/java/groovy/time/Duration.java](https://app.codecov.io/gh/apache/groovy/pull/2653?src=pr&el=tree&filepath=src%2Fmain%2Fjava%2Fgroovy%2Ftime%2FDuration.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-c3JjL21haW4vamF2YS9ncm9vdnkvdGltZS9EdXJhdGlvbi5qYXZh)
 | `100.0000% <ø> (ø)` | |
   | 
[src/main/java/groovy/time/TimeCategory.java](https://app.codecov.io/gh/apache/groovy/pull/2653?src=pr&el=tree&filepath=src%2Fmain%2Fjava%2Fgroovy%2Ftime%2FTimeCategory.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-c3JjL21haW4vamF2YS9ncm9vdnkvdGltZS9UaW1lQ2F0ZWdvcnkuamF2YQ==)
 | `87.7551% <ø> (ø)` | |
   | 
[...n/java/groovy/time/TimeDatumDependentDuration.java](https://app.codecov.io/gh/apache/groovy/pull/2653?src=pr&el=tree&filepath=src%2Fmain%2Fjava%2Fgroovy%2Ftime%2FTimeDatumDependentDuration.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-c3JjL21haW4vamF2YS9ncm9vdnkvdGltZS9UaW1lRGF0dW1EZXBlbmRlbnREdXJhdGlvbi5qYXZh)
 | `100.0000% <ø> (ø)` | |
   | 
[src/main/java/groovy/time/TimeDuration.java](https://app.codecov.io/gh/apache/groovy/pull/2653?src=pr&el=tree&filepath=src%2Fmain%2Fjava%2Fgroovy%2Ftime%2FTimeDuration.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-c3JjL21haW4vamF2YS9ncm9vdnkvdGltZS9UaW1lRHVyYXRpb24uamF2YQ==)
 | `100.0000% <ø> (ø)` | |
   | 
[.../java/org/apache/groovy/dateutil/BaseDuration.java](https://app.codecov.io/gh/apache/groovy/pull/2653?src=pr&el=tree&filepath=subprojects%2Fgroovy-dateutil%2Fsrc%2Fmain%2Fjava%2Forg%2Fapache%2Fgroovy%2Fdateutil%2FBaseDuration.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-c3VicHJvamVjdHMvZ3Jvb3Z5LWRhdGV1dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9ncm9vdnkvZGF0ZXV0aWwvQmFzZUR1cmF0aW9uLmphdmE=)
 | `98.5294% <98.5294%> (ø)` | |
   | 
[.../java/org/apache/groovy/dateutil/TimeCategory.java](https://app.codecov.io/gh/apache/groovy/pull/2653?src=pr&el=tree&filepath=subprojects%2Fgroovy-dateutil%2Fsrc%2Fmain%2Fjava%2Forg%2Fapache%2Fgroovy%2Fdateutil%2FTimeCategory.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-c3VicHJvamVjdHMvZ3Jvb3Z5LWRhdGV1dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9ncm9vdnkvZGF0ZXV0aWwvVGltZUNhdGVnb3J5LmphdmE=)
 | `97.3684% <97.3684%> (ø)` | |
   | 
[.../java/org/apache/groovy/datetime/TimeCategory.java](https://app.codecov.io/gh/apache/groovy/pull/2653?src=pr&el=tree&filepath=subprojects%2Fgroovy-datetime%2Fsrc%2Fmain%2Fjava%2Forg%2Fapache%2Fgroovy%2Fdatetime%2FTimeCategory.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-c3VicHJvamVjdHMvZ3Jvb3Z5LWRhdGV0aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9ncm9vdnkvZGF0ZXRpbWUvVGltZUNhdGVnb3J5LmphdmE=)
 | `85.7143% <85.7143%> (ø)` | |
   | 
[...main/java/org/apache/groovy/dateutil/Duration.java](https://app.codecov.io/gh/apache/groovy/pull/2653?src=pr&el=tree&filepath=subprojects%2Fgroovy-dateutil%2Fsrc%2Fmain%2Fjava%2Forg%2Fapache%2Fgroovy%2Fdateutil%2FDuration.java&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-c3VicHJvamVjdHMvZ3Jvb3Z5LWRhdGV1dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9ncm9vdnkvZGF0ZXV0aWwvRHVyYXRpb24uamF2YQ==)
 | `80.9524% <80.9524%> (ø)` | |
   | ... and [3 
more](https://app.codecov.io/gh/apache/groovy/pull/2653?src=pr&el=tree-more&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)
 | |
   
   ... and [6 files with indirect coverage 
changes](https://app.codecov.io/gh/apache/groovy/pull/2653/indirect-changes?src=pr&el=tree-more&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)
   </details>
   <details><summary> :rocket: New features to boost your workflow: </summary>
   
   - :snowflake: [Test 
Analytics](https://docs.codecov.com/docs/test-analytics): Detect flaky tests, 
report on failures, and find test suite problems.
   - :package: [JS Bundle 
Analysis](https://docs.codecov.com/docs/javascript-bundle-analysis): Save 
yourself from yourself by tracking and limiting bundle sizes in JS merges.
   </details>




> Modernize the TimeCategory date/time DSL: add a java.time flavor and a 
> dequirked java.util.Date flavor
> ------------------------------------------------------------------------------------------------------
>
>                 Key: GROOVY-12124
>                 URL: https://issues.apache.org/jira/browse/GROOVY-12124
>             Project: Groovy
>          Issue Type: Improvement
>            Reporter: Paul King
>            Priority: Major
>
> h1. Modernize the TimeCategory date/time DSL
> h2. Summary
> Introduce a {{java.time}}-based parallel to the legacy 
> {{groovy.time.TimeCategory}}
> DSL, and give the existing {{java.util.Date}}-based DSL a cleaned-up 
> ("dequirked")
> home in the module that already owns Date support. Net result: one familiar 
> DSL
> ({{1.hour.ago}}, {{date + 3.months}}, {{2.days.from.now}}) available in two 
> flavors —
> modern {{java.time}} output or classic {{java.util.Date}} output — both 
> quirk-free.
> h2. Background
> {{groovy.time.TimeCategory}} (a {{use()}} category in *groovy core*) layers 
> duration
> arithmetic onto {{java.util.Date}}/{{Calendar}}: {{Integer}} producers 
> ({{1.hour}},
> {{2.months}}), operators ({{date + duration}}, {{date - date}}), and 
> relative-time
> properties ({{.ago}}, {{.from.now}}). It is backed by the 
> {{groovy.time.Duration}}
> hierarchy (Duration / TimeDuration / DatumDependentDuration / 
> TimeDatumDependentDuration).
> Two problems motivate this work:
> * *No java.time equivalent.* Modern code uses {{java.time}}, but there is no
>   {{1.hour}}/{{2.months}} producer for it. The {{groovy-datetime}} module 
> already
>   provides all the arithmetic (plus/minus/next/multiply/between/upto…) on 
> {{java.time}}
>   types — the only gap is the number→amount producers and 
> {{.ago}}/{{.from.now}}.
> * *The Date DSL is split and quirky.* All other {{java.util.Date}} DSL methods
>   ({{date + int}}, {{date.next()}}, {{date[YEAR]}}, {{clearTime}}, {{format}},
>   {{date - date -> int}}) live in the optional *groovy-dateutil* module, while
>   TimeCategory lives in core — so half of Date arithmetic is core, half is 
> optional,
>   and {{date - date}} even resolves differently between them.
> h2. Proposal
> Add two categories and deprecate the legacy one:
> || Class || Module || Output type || Status ||
> | {{org.apache.groovy.datetime.TimeCategory}} | groovy-datetime | 
> {{java.time}} (Duration/Period, LocalDate/LocalDateTime) | new |
> | {{org.apache.groovy.dateutil.TimeCategory}} | groovy-dateutil | 
> {{java.util.Date}} | new (dequirked) |
> | {{groovy.time.TimeCategory}} (+ Duration hierarchy) | core | 
> {{java.util.Date}} | deprecated, frozen |
> The two new categories share one DSL surface and one semantics spec; only the 
> terminal
> return types differ. The legacy class stays byte-for-byte behavior-compatible 
> (frozen),
> so existing users are unaffected until they choose to migrate.
> h3. Producer mapping (both flavors)
> * {{seconds, minutes, hours, millis, nanos}} → {{java.time.Duration}} 
> (datetime) /
>   {{TimeDuration}} (dateutil)
> * {{days, weeks, months, years}} → {{java.time.Period}} (datetime) /
>   {{Duration}}/{{DatumDependentDuration}} (dateutil)
> * {{.ago}} / {{.from.now}} → {{LocalDate}}/{{LocalDateTime}} (datetime) /
>   {{java.util.Date}} (dateutil)
> Note: {{java.time}} deliberately keeps date-based ({{Period}}) and time-based
> ({{Duration}}) amounts separate, so {{date + 2.months + 3.hours}} works by
> left-associative chaining rather than a combined amount type.
> h2. Design decisions
> * *(proposed, pending team review)* The dateutil flavor uses its *own* 
> dequirked value
>   classes (option "B1"), not {{java.time}} internally (option "B2"). 
> Rationale: B1 keeps
>   the DSL return shape ({{.seconds}}/{{.days}} component accessors, bespoke 
> {{toString}},
>   the type lattice), so existing tests and user code port ~1:1; it is fully 
> self-contained
>   within groovy-dateutil (no dependency on groovy-datetime being on the 
> classpath — matching
>   today, where the Duration classes rely on no external extension methods). 
> B2 would change
>   component-accessor and {{toString}} semantics and require either 
> duplicating datetime's
>   operator DGM or a new dateutil→datetime module dependency.
> * *(proposed, pending team review)* Deprecate {{groovy.time.TimeCategory}} 
> with a removal
>   trajectory (future major). The dateutil copy gives Date users a 
> non-deprecated home, so
>   the deprecation is not coercive toward java.time.
> * Keep the legacy {{groovy.time.Duration}} value classes exactly as-is (do 
> not move; the
>   dequirked classes are new copies in {{org.apache.groovy.dateutil}} — no 
> split package).
> * The legacy class is *not* a forwarder to the new one (behavior differs); it 
> stays intact.
> h2. Quirks removed in the new flavors
> || # || Legacy behavior || New behavior ||
> | A | {{.ago}}/{{.from.now}} floor to midnight for day/month/year durations 
> but keep time for hours/min/sec (inconsistent) | Time-of-day preserved 
> uniformly (datetime: {{Period}}→{{LocalDate}}, 
> {{Duration}}→{{LocalDateTime}}) |
> | B | {{DatumDependentDuration.toMilliseconds()}} resolves against {{new 
> Date()}} — nondeterministic | Deterministic: uses {{ChronoUnit}} estimates 
> ({{1.year == 12.months}} still holds exactly); {{java.time}} {{Period}} 
> simply has no {{toMillis}} |
> | C | Four-class Duration lattice incl. {{TimeDatumDependentDuration}} | 
> Retained in dateutil (B1); not needed in datetime (chaining) |
> | D | {{Duration}} = 24h/day for {{toMillis}} but DST-aware when added | 
> Documented/consistent |
> | E | {{getTimeZone}} (already {{@Deprecated}}), {{getDaylightSavingsOffset}} 
> | Dropped from new flavors (superseded by zone-aware java.time) |
> Side effect of A+B: {{getAgo}}/{{getFrom}}/{{toMilliseconds}} collapse to 
> single
> implementations on {{BaseDuration}}, removing the per-subclass overrides 
> (~40% less
> duplication in the value classes).
> h2. Prototype validation
> A working B1 prototype of the dateutil flavor (six classes) was built and 
> exercised
> against a port of {{TimeCategoryTest}}:
> * All arithmetic/{{toString}}/comparison assertions ported with *only* the 
> {{use()}}/import
>   target changed — no assertion edits.
> * Three added assertions demonstrate the dequirks; the same probes run 
> against the legacy
>   class confirm the delta (legacy {{3.days.ago}} → {{00:00:00}}; 
> {{1.month.ago}} off by the
>   millis-since-midnight; {{5.months.toMilliseconds()}} varies with the 
> current date).
> * Only the value-class suites ({{DurationTest}}, 
> {{DatumDependentDurationTest}}) need edits,
>   confined to the ~6 methods that assert the midnight-flooring / 
> {{now}}-relative behavior.
> h2. Scope / tasks
> * [ ] {{org.apache.groovy.datetime.TimeCategory}} + tests + spec section 
> (_working-with-datetime-types_)
> * [ ] {{org.apache.groovy.dateutil.TimeCategory}} (B1, dequirked) + value 
> classes + tests + spec section
> * [ ] Deprecate {{groovy.time.TimeCategory}} (Javadoc {{@deprecated}} 
> pointing to both replacements)
> * [ ] Reconcile/document the {{date - date}} collision (int days vs Duration) 
> within groovy-dateutil
> * [ ] Add {{Long}}/{{nanos}} support (enhancement over the Integer-only 
> legacy)
> * [ ] Changelog + docgenerator entries
> h2. Open questions (pending team review)
> * B1 vs B2 for the dateutil flavor (recommendation: B1).
> * Commit to eventual removal of {{groovy.time.TimeCategory}} (hard 
> {{@Deprecated}}), or
>   soft-deprecate in docs only?
> * Category name: reuse the simple name {{TimeCategory}} in both new packages 
> (symmetry, but
>   dual-import hazard) vs a distinct name for the datetime flavor.
> * Global DGM producers (static-compilation friendly) in addition to the 
> {{use()}} category —
>   now, later, or never?



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to