Changelog
All notable changes to this project will be documented in this file. Dates are displayed in UTC.
- refactor(descriptions): unify config and modularize strict-en translator
274e88e
- feat(descriptions): inline bounds + includeRecurrenceLimits; suppress limits by default
ec4d017
- feat(describe): flatten DescribeConfig; simplify limits
a7deead
- fix: timezone clamps in descriptions; “or” lists; lint
ff0be16
- fix(describe): TS18048 and months-only list uses “and”
0c68b71
- fix: timezone clamps in descriptions; “or” lists; lint
d17a182
- fix(descriptions): update RRStack.describeRule to use DescribeConfig
3f6da50
- test(describe): finalize DescribeConfig flattening in recurring bounds
15e82f6
8 October 2025
- docs: streamline README and expand Handbook (API, config, time, schema)
96d0c13
- chore: release v0.15.5
9628cd1
- updated docs
c9b1e6b
- updated docs
0737142
- test: add Singapore span includeBounds description assertions
c71e946
- chore(describe): drop colon after duration in descriptions
6f694fc
- docs: add cross-links (API→Descriptions; React→API/Config/Getting started)
729417b
- chore(describe): remove colon after duration in recurrence text
c0df00e
- updated stan
f8d04ac
7 October 2025
- fix(schema): split JSON vs runtime schemas; keep strict keys and allow Weekday at runtime
9258d67
- fix(schema): accept rrule Weekday in byweekday under strict options
78febd1
- chore: release v0.15.4
e415ec1
- feat(schema): make rule.options strict with enumerated RRULE keys
60ada4d
- renamed schemas & eliminated unnecessary "as unknown as"
337d45a
- feat(schema): make rule.options optional; export RRStackJson type
97f2ee9
7 October 2025
- bounds: follow rrule README timezone cautions; fix host drift
103d6cc
- fix(bounds/latest): robust status check at finite probe using ruleCoversInstant
86f3bc8
- bounds: revert to UTC-floating rrule seam; remove host drift
31cbcb3
- bounds: honor rrule timezone cautions; use UTC-floating Dates
5658239
- bounds: fix timezone drift by using local floating Dates for rrule
06f3e5d
- test: add diagnostics to DST fall-back 's' unit bounds test
02fc047
- test(bounds): assert earliest start for America/Chicago daily rule
60e5ee4
- fix(bounds,describe): correct earliest start under baseline and format floating bounds
b96d4ac
- fix(bounds): use compiled dtstart for earliest start (env-proof)
8a492b8
- fix(bounds): compute earliest from rrule.after(dtstart) not dtstart
73f5702
- chore: release v0.15.3
c4d8e1b
- test(describe): assert Chicago daily 1‑day rule renders local bounds
478bad5
- tests: add cross-timezone bounds/describe cases
c6d538f
- test(formatInstant): assert America/Chicago (CST, -06:00)
1fa0623
- fix(bounds): eliminate env drift for daily rules without BY time
49699ec
- tests: make cross-timezone assertions host-agnostic
7184588
- fix: remove tzid from rrule options to restore floating-wall semantics
b8410e9
6 October 2025
- Centralize defaults and align public param names with RRStackOptions
03aafff
- chore: release v0.15.2
9b12b93
- feat(time): align helper params; default timeUnit; fix JSDoc
22424f4
6 October 2025
- chore: release v0.15.1
dbca052
- OpenAPI-safe JSON Schema: remove duration.anyOf; rely on runtime Zod
74039b3
5 October 2025
- feat(describe): add DescribeOptions.boundsFormat to customize includeBounds rendering
5e52343
- fix(time): require exact wall match in minute probe for DST gap (tests green)
6b327dc
- feat: add timezone conversion helpers (wall time ↔ epoch)
a9e99a2
- fix(time): treat normalized wall times as invalid; choose earliest valid minute
bd4bb42
- fix(time): map spring-forward gaps via wall-minute probing (tests green)
0d9437f
- docs(time): add TypeDoc entries for wallTimeToEpoch/dateOnlyToEpoch/epochToWallDate
587b65c
- chore: release v0.15.0
d890ef2
- fix(time): satisfy TS2775 and map DST forward gap to earliest valid instant
d4d52ac
- docs: add boundsFormat examples and fix describe defaults
6a82a4f
2 October 2025
- fix(update): resolve TS2454 and lint in unit-change notice; drop unused import
cd85c83
- test: fix TS4104 by typing update() result as readonly Notice[]
9dcebd0
- test: assert update() Notice[] equals policy.onNotice ordering
7eda06d
- docs(test): add policy & notices doc snippet and hook notice test
f41599e
- fix: stabilize overlapping edits test; clean knip entry
8a1e02b
- feat(update): single ingestion API with version/unit policies; remove updateOptions
f16e7d7
- test: make overlapping-edits final count robust to dev double effects
e073fb6
- test(react): coalesce onChange in staged-edits test (single autosave)
100909b
- fix(types/react): resolve TS6231 and ESLint; improve TSDoc
d37e8a7
- test(docs): add react ingestion/staging tests; README updates
6fd36b7
- feat(react/docs): policy passthrough + TSDoc polish; docs refreshed
0b4611e
- chore: release v0.14.0
483e2c1
- docs: define update() API, version/unit policies; prune dev plan
7b71b2a
- test(update): add engine tests for unit conversion and version policies
b391098
- docs: update README/Handbook for update() API and ingestion flow
38b2f49
- fix(update): resolve TS2454 and lint in unit-change notice; drop unused import
0fea7b0
- fix(update): narrow unitNotice to timeUnitChange notice variant
39d1060
- chore(todo): capture typedoc/readme tasks and React nudge
fd1a65e
29 September 2025
- fix(describe): yearly fallbacks and bounds clamp display
32511bf
- test(describe): cover “or”-joined positioned weekdays and multi-nth
f2ac4ed
- chore: release v0.13.4
f4fa4ee
- feat(describe): “or”-joined positioned weekdays and multi-nth
01bc071
29 September 2025
- fix(react): useRRStack tolerates null/undefined json
0bc18c9
- chore: release v0.13.3
94471de
29 September 2025
- fix(describe): use short ordinals for BYMONTHDAY lists
aee0761
- chore: release v0.13.2
7742370
- feat(describe): lists for month-days and times; tests
2d84eb3
29 September 2025
- feat(describe): yearly month(s) + weekday(s) without position
977fc96
- chore: release v0.13.1
5f2cae5
- updated docs
42eab8e
- test(describe): cover span includeBounds in RRStack.describeRule
a3d9561
28 September 2025
- docs(plan): reprioritize Next up; docs/examples first
10f9aae
- fix(describe): add monthly BYSETPOS+weekday phrasing; resolve lints
4739b04
- feat(describe): add descriptor/translator architecture and lexicon exports
aa34f88
- docs: extract requirements; refactor dev plan; trim project prompt
dad62a9
- feat(tests): add BENCH-gated perf suite; fix lint in translator
bb98cfa
- refactor(describe): use Luxon for date/time formatting; keep composition-only
46da672
- chore: release v0.13.0
ad74033
- fix(describe): accept null in asArray and satisfy template literal lint
d3aca4d
- perf(bench): add monthly closed and yearly count-limited bounds cases
79556c6
- bench: add Node-only mutator benches; split React add bench
d5d05bd
- perf(bench): add monthly 3rd Tue case; docs for lexicon & BENCH
7d5f7ef
- fix(describe): add minimal strict-en phrasing for daily time and monthly nth-weekday
c8048b0
- test(bench): use blackout baseline for finite earliest start in sanity
37a0840
- test(bench): add assertions and fix lint; update plan
a9b9d6e
- fix(bench): satisfy lint in perf.react.bench.ts (string coercion)
f5ec624
- docs: README + Handbook (Descriptions, Performance); defaults
8328f59
- perf(bench): add count-limited, reverse-sweep, and overlay cases
116e6ab
- perf(bench): add React hooks bench; remove ad‑hoc benches; fix cache/TS
77be485
- docs: add pluggable descriptions + frequency lexicon requirements
565dd23
- test(bench): integrate vitest bench; add RRStack benchmark suite
8dba618
- test(bench/react): wrap updates in act; enable act env for benches
98ad76e
- docs(api): export description/lexicon types
6a06005
- bench(react): add mutator benchmarks; explain addRule cost
544a31f
- docs(typedoc): export WeekdayPos to resolve warning
ff94579
- docs(api): export descriptor subtypes for Typedoc
7733693
- feat(describe): weekly and yearly phrasing; list join; lint fix
3bc321a
- feat(describe): localized weekday/month labels via Luxon (tz-aware)
0534025
- feat(describe): add COUNT/UNTIL phrasing and yearly multi-month lists
4f898a5
- tests: ensure weekday position/time in descriptions
44f33c7
- refactor(describe): make describe a module with index
70bda83
27 September 2025
- chore: release v0.12.4
7b49f8a
- feat: RRStack.formatInstant to format instants in stack tz/unit
2f82fde
27 September 2025
- chore: release v0.12.3
d06cafd
- feat: add DescribeOptions.formatTimeZone for custom tz labels
a3df5a2
27 September 2025
- chore: release v0.12.2
07ca515
- feat: allow addRule() with no args (defaults to active span)
d7dabe8
27 September 2025
27 September 2025
- test(react): update useRRStack tests to options object API
8ccb14e
- feat(react): debounced options-object API for useRRStackSelector; shared base types
1472b4d
- docs: update README and handbook; fix hook signatures
414dd8b
- chore: release v0.12.0
df31048
- updated docs
b06a19c
25 September 2025
- chore: release v0.11.1
031e7de
- perf(bounds): 100× faster getEffectiveBounds (no far-future scans)
972b7a9
- docs(handbook): add deep-dive Algorithms page and link from Handbook
9730ac7
- updated docs
b2acba0
- docs(react): include all debounce methods in examples
d06da72
- fix(bounds): finite probe + reverse sweep; cascade-correct latest end
3d2a914
- fix(bounds): return probe when active before probe; strict backstep; add stan:build
05d9b10
- fix(bounds): parametric latest-end (probe) and robust backstep
364063b
- updated stan
a35b79e
25 September 2025
- wip decomposition
3b69e27
- feat(react): mutateDebounce proxy; rename debounce->changeDebounce; flush->flushChanges
c0424a0
- refactor(react): wire useRRStack to extracted hooks; resolve knip unused
024e962
- chore: release v0.11.0
f465e75
- docs(react): full listings after apply/render debounce additions
20a9519
- wip useRRStack decomposition
a639052
- chore(react): fix lint/type errors; complete mutate facade; prep hook split
1f93645
- chore(react): fix mutateFacade and remove stray file causing lint failures
afe384c
- docs(react): update README/handbook for new hook APIs; bump v0.11.0
24b3522
- docs(react): debounced form controls; policy note
257453f
- refactor(react): complete hooks split; fix render module; harden facade
b04f727
- test(react): migrate useRRStack tests to changeDebounce/flushChanges
9405b9a
- chore: finalize v0.11.0 — lint cleanups, changelog, version bump
fa4f14a
- test(react): guard effect-driven mutations to avoid double-adds in dev
f78929f
- updated stan
ca7aaf1
24 September 2025
- chore(todo): keep only defaultEffect items in Completed
4064ba7
- chore: release v0.10.0
a142193
- feat: add defaultEffect baseline and virtual rule
cc8c41b
- feat(schema): defaulted options optional; tests + docs
3c2c5b8
- fix: include defaultEffect in setters; clean baseline lint
f32a3ed
- fix(schema,types): optional defaults TS-safe; keep rules optional in schema
a0cd7e3
- chore(lint): validate rules in normalizeOptions; no unsafe spread
b1e3856
- chore(lint): escape '>' in TSDoc; update dev plan
b2907d6
- updated stan
a478c4b
21 September 2025
- chore: fix lint and knip; remove unused devDependency
d55bec4
- refactor(bounds): split getEffectiveBounds into focused modules
97c7674
- feat: add continuous (span) rules (no freq → duration omitted)
bc1ffda
- build!: migrate to Zod v4 JSON Schema + ESLint flat config
8174047
- chore: adopt @vitest/eslint-plugin; strict type-aware lint; Zod v4 JSON schema
6dc797a
- chore: release v0.9.0
baf87dc
- chore: fix lint/typecheck; clean knip and deps
e4c836c
- feat!: drop 'continuous' alias; require undefined freq for spans
7289fd8
- refactor(bounds): split into modules; fix lints and TS narrowings
030defe
- chore(eslint): fix flat-config typing; drop deprecated helper/casts
024f83c
20 September 2025
- test(bounds): add comprehensive getEffectiveBounds scenarios
7945daf
- chore: release v0.8.2
428d258
- docs: clarify bounds & clamp semantics; inclusive ‘until’; DST and ’s’ mode
5047a08
- test(bounds): align expectations with implemented reverse-sweep and DST behavior
5548b20
- fix(release): rebuild after bump so dist embeds the new version
1237d45
19 September 2025
- updated docs
5524cd6
- perf(bounds): add pre-pass for earliest/latest
bc616e1
- perf(bounds): candidate-filtered backward sweep for latest
d6fb825
- chore: release v0.8.1
b93841c
- docs(react): README blurb + detailed hooks page
e9ff7a1
- test(bounds): add additional scenarios for getEffectiveBounds
3936eee
- perf(bounds): candidate-filtered jump sweep for earliest
149153d
- fix(bounds): make backward reset strictly-before cursor to ensure progress
a37a3b7
- chore(bounds): lint fixes for candidate-jump sweep
e6966e2
- fix(bounds): step prevEnd to prior occurrence when >= cursor in backward reset
6e3fe28
- perf(bounds): cheaper probe status via lastStartBefore+end
742540b
- test(bounds): complete bounds.more final case; fix TS1005
4216306
- fix(bounds): track status in backward fallback to remove TS2367
78bc0fd
- test(bounds): fix seconds-mode clamps in bounds.more (use sec())
8df0027
- updated stan
981eb4f
17 September 2025
- feat: RRStack subscribe/unsubscribe + React hooks and subpath export
2c38f3b
- updated docs
3bd81de
- updated docs
acb60b6
- chore: release v0.8.0
8f8872e
- test(react): add leading debounce and flush() cases
310e014
- fix(react): make useRRStack debounce/flush stable across renders
8154593
- test(react): await microtask inside async act callbacks
983cc17
- fix(react): make flush() timer-proof; raise bounds test timeout
9dd73ea
- fix(react): initialize refs and clean lints in useRRStack
e686a9c
- fix(react): ensure flush() sees pending; raise test timeout
2893a75
- dev(react): add DOM types and fix act import in tests
e7b1d6a
- fix(react): make useRRStack snapshot timer-proof; lint clean
f8ab8a9
- test(react): fix TS global augmentation and flush effects with async act
1679610
- test(react): enable act() via setup; register in Vitest
94ce684
- fix(react): use monotonic snapshot in useRRStack
24285fd
- fix(react): decouple hook version from Date.now
c6e2960
- fix(react): use monotonic snapshot in useRRStack
89d9e44
17 September 2025
- chore: release v0.7.1
ef55afe
- updated docs
f5cea8b
- test(rrstack): add error-path coverage for mutators
8b08fee
- feat(rrstack): add removeRule(index) mutator
50ee1b3
- test(rrstack): add removeRule mutator unit test
ce323d5
17 September 2025
- updated docs
79c9e3e
- feat: getSegments limit and RRStack rule mutators
3dfcd1c
- chore: release v0.7.0
19576bb
- feat: add rule description helper leveraging rrule.toText
0e8c13b
- docs: add typedoc examples and README open-ended bounds
f0219b3
- feat: RRStack.describeRule(index, opts) + fix describe types
70d28aa
- docs: update README for describeRule, segments limit, mutators
e9ddcca
- feat(bounds): detect open-ended end in effective bounds
c5cfa8b
- docs: repair README API snippet and comment formatting
268e9c5
- fix(bounds): set end undefined when active at probe (open end)
36f1189
- fix(bounds): detect open end when future occurrences exist after probe
d0132c0
- docs: README formatting polish and fence hygiene fixes
e1bc71e
- docs: finalize README polish (classifyRange + version constant)
8279574
- updated readme
497576c
- Added change log to stan excludes
26bbe4e
14 September 2025
- chore: release v0.6.1
0fd7f79
- fix(rrule): only set 'until' when ends is provided
730e913
- fixed test
9e51ed0
28 August 2025
- chore: release v0.6.0
5753c60
- feat(api)!: RRStack.isActiveAt now returns boolean
04d69ab
28 August 2025
- chore: release v0.5.3
0afcc59
- fix(types): emit dist/index.d.ts for TS resolution
ca788bb
28 August 2025
- fix(rrule): harden ESM/CJS interop with runtime shim
ada51d1
- chore: release v0.5.2
4db1e84
- fix(shim): clean TS/lint and harden rrule interop
b42a48f
28 August 2025
- chore: release v0.5.1
7f8e90f
- fix(rrule): robust ESM/CJS interop via namespace import
7d407f0
28 August 2025
- chore: release v0.5.0
c9c3f96
- docs update
ddb871f
- updated docs
01eae48
- updated docs
1238954
- docs: unify README to RRStackOptions; update requirements; prune dev plan
91093c1
- feat(api): unify JSON shape; remove RRStackJson/fromJson; add optional version to RRStackOptions
37903b1
- build: externalize runtime dependencies
a44f603
- fix(tests): satisfy FrequencyStr and optional rules in rrstack.test.ts
3206904
- docs(typedoc): link raw JSON schema on RRSTACK_CONFIG_SCHEMA
0c35578
- docs: fix version constant; update todo
d3f610f
- docs(todo): add test-fix note and update timestamp
8b4b80d
- docs(typedoc): link raw JSON schema on RRSTACK_CONFIG_SCHEMA
b01476b
- updated stan
26b7680
- updated stan
97225b2
27 August 2025
27 August 2025
- update stan
414f81b
- feat(schema): export RRSTACK_JSON_SCHEMA and generate from Zod
d4e55d2
- feat: human-readable freq strings; map to rrule enum
d6dd75a
- fix(schema): pass typecheck/lint; decouple TZ refine
e27aaf4
- chore(schema): rename artifact to rrstackconfig.schema.json
8b6f9f2
- fix(schema): make freq enum generator-safe; relax typing
a960e17
- chore: release v0.4.0
ba25010
- updated docs
11600cf
- fix(schema-gen): locate RR root under defs/$defs; add positivity anyOf
e0925ef
- updated docs
5eaa83d
- feat(schema): enforce freq string enum; fix starts typo
51748fc
- test(schema): resolve $ref to DurationParts in schema test
701f1e0
- chore(schema): emit RRStackOptions (no version) as JSON Schema
b808b50
-
RRStack — Requirements and Development Plan b3cc2f3
- docs: add JSON Schema section and update plan
32cfc06
- test(schema): resolve Rule $ref before DurationParts $ref
9aed707
25 August 2025
- Reverted leakage from another project
0bbabf9
- fix(bounds): use safe far-future probe and avoid domainMax to stabilize latest-end and open-end detection
48214dd
- chore: split RRStack.ts and add tests for bounds/heap/seconds
f016859
- chore: release v0.3.0
118cf86
- test: add coverage for duration, re-exports, enumeration, patterns; bump plan date
600954b
- feat(duration): adopt structured DurationParts and update API/docs/tests
abde6f3
- docs(readme): add duration helpers and API import
923b2b2
- fix(bounds): open-end short-circuit and correct reverse stepping for latest end
f08de4d
- chore: complete remaining next steps (bounds tests, DX/Docs)
8109213
- fix(bounds): compute both earliest start and latest end
29c45ec
- fix: make duration.ts eslint/tsdoc clean
383f43e
- docs(tsdoc): escape inline braces and “>” in types
d53bff1
- chore: fix lint and tests (guard RRSTACK_VERSION, remove unused imports)
87d39e0
- test(lint): remove any cast in duration helpers test
be6482f
25 August 2025
- feat: unit-aware options, JSON shape, and coverage split
377320f
- split sweep.ts; add segments/bounds/util and update plan
bdcca73
- docs: refresh README and add TypeDoc across API
a08fcb0
- chore: release v0.2.0
c15da99
- docs: add project requirements and update dev plan
2aa01ce
- fix: complete tests, TS typings, and streaming sweep
3d3a13d
- fix: complete tests, TS typings, and streaming sweep
26c59a1
- inject version define and tighten test coverage
9533af7
- fix: unbreak vitest config comment and harden version parse
4d7a973
- fix: lint errors and update dev plan
731b35c
- docs(tsdoc): fix links and inline braces; fence examples
31adc0f
- doc: fix version constant name in dev plan
3bb80bd
0.1.0
24 August 2025
- Initial commit
dd084c1
- stan init
eb0690d
- Append progress update to dev plan; propose STAN prompt tweak
475a94b
- updated readme
52a52b7
- chore: fix vitest hangs, improve types, and refactor RRStack
dc8a176
- chore: release v0.1.0
b613485
- fix(coverage): use epoch from rrule.between(); remove double tz conversion
bf40447
- fix: support DAILY rules with starts at midnight (req #1)
ffb4911
- test: anchor q2‑months scenario dtstart to first occurrence
159a7ad
- test: restore q2‑months scenario (skipped); plan TZ provider
00c0dff
- Stabilize template baseline
ff30e2a
- fix(vitest): normalize watchExclude defaults
e7636c6
- fix: robust nth-weekday TZ coverage with local fallback
054a35a
- chore: remove template foo/CLI and fix lint in coverage
f58b2e7
- feat(test): add 3‑rule America/Chicago scenario
75b4b65
- lintfix
f147dc7
- test: add odd‑months Chicago scenario alongside skipped q2‑months
05b761f
- dev prep
92e19a9
- fix: pass nth-weekday TZ scenarios by day-window enumeration
389e6bf
- test(dst): add DST duration tests; keep scenarios skipped
bc3e872
- fix(coverage): robust instant coverage via enumeration
7f6e8f1
- fix(coverage): robust monthly/yearly detection across environments
f1332ff
- test: validate daily 09:00 with midnight start (requirement #1)
4d739d1
- docs(todo): clarify rrule window/epoch handling in coverage
be2f07a
- add typed tz-local fallback and wire into coverage
730b075
- test: unskip scenario tests; fix TypeDoc warning
d136124
- fix(coverage): convert rrule floating dates to zoned epoch; remove invalid tz arg
1306a42
- fix(vitest): remove watchExclude, raise timeout; lint clean
2ac32f3
- chore: remove unused dev dep and sync dev plan
a917f71
- fix(coverage): tolerate epoch vs floating Date from rrule.before()
fc2739c
- updated system prompt
79993fb
- fix(coverage): use rrule.before() with wall-clock boundary for robust monthly coverage
072040a
- test: stabilize America/Chicago 3-rule scenario
b004922
- fix(tz): use static Luxon import; build wall‑clock dtstart/until
d901e28
- fix: always apply tz-local fallback after same-day enumeration
238a474
- fix(tz): evaluate rrule windows in rule timezone; silence coverage ENOENT
6d629a6
- chore: update dev plan; record TypeDoc warning
f5c05a5
- fix: handle Weekday.n=0 for bysetpos+nth-weekday (q2 months)
2302c4a
- chore: remove leftover dev dep and fix lint in coverage
0a55eb5
- test: stabilize America/Chicago 3‑rule scenario
871c6e1
- test: keep both Chicago scenarios present but skipped
8456f15
- wip
23c487f
- baselined version
3bc38e3
- lintfix
bc47fd3
- fix(tz): use static Luxon import; build wall‑clock dtstart/until
4ca6155