@karmaniverous/rrstack
    Preparing search index...

    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

    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