cronli5 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/CHANGELOG.md +90 -0
  2. package/README.md +4 -4
  3. package/cronli5.min.js +2 -2
  4. package/dist/cronli5.cjs +514 -407
  5. package/dist/cronli5.js +514 -407
  6. package/dist/lang/de.cjs +296 -225
  7. package/dist/lang/de.js +296 -225
  8. package/dist/lang/en.cjs +471 -364
  9. package/dist/lang/en.js +471 -364
  10. package/dist/lang/es.cjs +318 -281
  11. package/dist/lang/es.js +318 -281
  12. package/dist/lang/fi.cjs +326 -276
  13. package/dist/lang/fi.js +326 -276
  14. package/dist/lang/zh.cjs +308 -236
  15. package/dist/lang/zh.js +308 -236
  16. package/package.json +1 -1
  17. package/src/core/analyze.ts +22 -21
  18. package/src/core/cadence.ts +164 -0
  19. package/src/core/index.ts +3 -1
  20. package/src/core/normalize.ts +3 -3
  21. package/src/core/parse.ts +1 -1
  22. package/src/core/{ir.ts → schedule.ts} +23 -24
  23. package/src/core/shapes.ts +8 -1
  24. package/src/core/specs.ts +1 -1
  25. package/src/core/util.ts +4 -83
  26. package/src/core/validate.ts +2 -2
  27. package/src/core/weekday.ts +54 -0
  28. package/src/cronli5.ts +7 -7
  29. package/src/lang/de/index.ts +329 -288
  30. package/src/lang/en/dialects.ts +1 -1
  31. package/src/lang/en/index.ts +640 -516
  32. package/src/lang/es/index.ts +342 -374
  33. package/src/lang/es/notes.md +1 -1
  34. package/src/lang/fi/dialects.ts +1 -1
  35. package/src/lang/fi/index.ts +367 -372
  36. package/src/lang/fi/notes.md +23 -8
  37. package/src/lang/fi/status.json +1 -1
  38. package/src/lang/zh/index.ts +344 -262
  39. package/src/types.ts +6 -6
  40. package/types/core/analyze.d.ts +4 -4
  41. package/types/core/cadence.d.ts +33 -0
  42. package/types/core/index.d.ts +3 -1
  43. package/types/core/normalize.d.ts +1 -1
  44. package/types/core/parse.d.ts +1 -1
  45. package/types/core/{ir.d.ts → schedule.d.ts} +16 -21
  46. package/types/core/shapes.d.ts +2 -1
  47. package/types/core/specs.d.ts +1 -1
  48. package/types/core/util.d.ts +1 -15
  49. package/types/core/weekday.d.ts +10 -0
  50. package/types/lang/de/index.d.ts +1 -1
  51. package/types/lang/en/dialects.d.ts +1 -1
  52. package/types/lang/en/index.d.ts +1 -1
  53. package/types/lang/es/index.d.ts +1 -1
  54. package/types/lang/fi/dialects.d.ts +1 -1
  55. package/types/lang/fi/index.d.ts +1 -1
  56. package/types/lang/zh/index.d.ts +1 -1
  57. package/types/types.d.ts +5 -5
@@ -97,20 +97,35 @@ first review's naturalness defects ship.
97
97
  * **OR-scope (restricted-month date-OR-weekday union).** When cron ORs a
98
98
  restricted DOM with a restricted DOW *and* the month is restricted, the
99
99
  month and the time are shared across both arms. Render
100
- **`[month] [time] joko <DOM> tai <DOW>`**: the month leads and scopes the
101
- union, the time follows it, and the `joko tai` union comes **last** —
100
+ **`[month] [time] <DOM> tai <DOW>`**: the month leads and scopes the
101
+ union, the time follows it, and the `… tai …` union comes **last** —
102
102
  nothing trails it. A trailing month or time word mis-scopes onto only the
103
- last arm (`tammikuussa keskiyöllä joko 1. päivänä tai maanantaisin`, not
104
- `… tai maanantaisin tammikuussa keskiyöllä`). Use the correlative
105
- `joko tai`, not bare `tai`, whenever a shared qualifier scopes the union.
103
+ last arm (`tammikuussa keskiyöllä 1. päivänä tai maanantaisin`, not
104
+ `… tai maanantaisin tammikuussa keskiyöllä`). The union joiner is the
105
+ **plain inclusive `tai`**, never the correlative `joko tai`: Finnish
106
+ `joko … tai` is the EXCLUSIVE disjunction (only one of the two), which
107
+ destroys cron's union reading. (An earlier panel-pinned `joko … tai` form
108
+ was reversed once a fi native panel flagged the exclusive reading.)
106
109
  * **Fronted-month case + day arm.** Single month → inessive (`tammikuussa`),
107
110
  list → inessive list (`tammikuussa ja heinäkuussa`), range →
108
111
  elative-illative (`kesäkuusta syyskuuhun`). Under a fronted month an
109
- ordinary DOM drops the generic `kuukauden` (`joko 1. päivänä …`); a Quartz
110
- date keeps its idiom (`joko kuukauden viimeisenä päivänä …`). The inessive
112
+ ordinary DOM drops the generic `kuukauden` (`1. päivänä …`); a Quartz
113
+ date keeps its idiom (`kuukauden viimeisenä päivänä …`). The inessive
111
114
  list also sidesteps the old genitive coordination bug — one ordinal, no
112
115
  `tammikuun ja heinäkuun 1. päivänä`. A **wildcard-month** union is left on
113
116
  plain `tai` (nothing to scope).
117
+ * **`*/2` day-of-month in a union.** An open `*/2` (or `1/2`) DOM is the
118
+ odd-day parity class, read as **`kuukauden parittomina päivinä`** (odd days
119
+ of the month, resetting each month: 1, 3, 5, …, 31), never the continuous
120
+ `joka toinen päivä` (which implies an unbroken 48-hour cycle across month
121
+ boundaries) and never its 16-date enumeration. The **standalone** `0 0 */2 * *`
122
+ keeps the parity-neutral cadence `joka toinen päivä`; only the union arm uses
123
+ the odd-day idiom. Other open steps (`*/3`, `2/2`, …) keep their cadence or
124
+ enumeration in a union.
125
+ * **Weekday arm of a union.** A Mon–Fri (`1-5`/`MON-FRI`) weekday reads as the
126
+ recurring class **`arkisin`** (= weekdays), parallel to the recurring date
127
+ arm beside it — not `maanantaista perjantaihin`, which is reserved for the
128
+ **standalone** weekday-only schedule.
114
129
  * **Level reorder (anchored minute window/list + specific hours).** When the
115
130
  minute is an anchored `kohdalla` clause for a **range** (`0–30`) or
116
131
  multi-point **list** (`0 ja 30`) and the hour is a simple `klo`-digit list
@@ -147,7 +162,7 @@ first review's naturalness defects ship.
147
162
  The English/Spanish month-range no-fold rule (June 2026) is confirmed
148
163
  language-local: `kuukauden 1. päivänä kesäkuusta syyskuuhun` has no
149
164
  garden path, because elative/illative marking does the work the comma
150
- does in Spanish. The IR needed nothing new.
165
+ does in Spanish. The Schedule needed nothing new.
151
166
 
152
167
  ## Dialect axes (future)
153
168
 
@@ -2,6 +2,6 @@
2
2
  "name": "Finnish",
3
3
  "status": "beta",
4
4
  "humanReview": null,
5
- "modelReview": "blind 3-persona Sonnet panel + round-trip over the spanning set (34 patterns, 2026-06-24). Round-trip clean (meaning preserved). The compound-schedule defects that caused the earlier demotion are fixed and panel-confirmed correct: OR-scope fronts the month+time and brackets the union with joko…tai, plus double-month, genitive month-list, mixed cadence, level reorder, sekä klo for range+isolated hours, and the natural Quartz nearest-weekday word order. 27/34 items at median naturalness ≥ 4; the remaining items are not fixable defects — clock-with-seconds notation klo 9.30.15 is SFS 4175-correct (a panel false-negative), and the cron OR-semantics and the kohdalla minute-anchor register are inherent limits of expressing cron precisely in Finnish (no better form than kohdalla, which was chosen over an adessive calque and matches cronstrue's human locale's intent).",
5
+ "modelReview": "blind 3-persona Sonnet panel + round-trip over the spanning set (34 patterns, 2026-06-24). Round-trip clean (meaning preserved). The compound-schedule defects that caused the earlier demotion are fixed and panel-confirmed correct: OR-scope fronts the month+time and joins the union with the inclusive 'tai', plus double-month, genitive month-list, mixed cadence, level reorder, sekä klo for range+isolated hours, and the natural Quartz nearest-weekday word order. 27/34 items at median naturalness ≥ 4; the remaining items are not fixable defects — clock-with-seconds notation klo 9.30.15 is SFS 4175-correct (a panel false-negative), and the cron OR-semantics and the kohdalla minute-anchor register are inherent limits of expressing cron precisely in Finnish (no better form than kohdalla, which was chosen over an adessive calque and matches cronstrue's human locale's intent). A later fi-native panel (2026-06) corrected the OR-day union: the earlier 'joko … tai' bracket is the EXCLUSIVE disjunction in Finnish and broke the union reading, now the plain inclusive 'tai'; '*/2' day-of-month reads as the odd-day parity class 'kuukauden parittomina päivinä' (resetting monthly) rather than the continuous 'joka toinen päivä'; and a Mon–Fri union arm reads as the recurring 'arkisin'. Fixed test-first, round-trip recovers the union.",
6
6
  "note": "BETA — model-validated by a blind 3-persona Sonnet panel (see src/lang/fi/notes.md “Compound schedules”), round-trip-clean, with every targeted naturalness defect fixed test-first and the residuals shown to be standards-correct (SFS 4175) or inherent to cron semantics. Graduates to stable only on fluent-human review."
7
7
  }