NagaYu/ingot-chrono
Ingot — Chrono Natural-language time expressions to an iCalendar RRULE + ISO-8601 start + IANA timezone exception rules, as strict JSON. Every label in this dataset was constructed before its sentence existed. A schedule object is generated from an integer seed, then rendered into prose. No model, judge or annotator ever decided what the answer was, so the label cannot be wrong -- it is the input to the pipeline. Splits split rows verified easy / medium /… See the full description on the dataset page: https://huggingface.co/datasets/NagaYu/ingot-chrono.
Ingot — Chrono
Natural-language time expressions to an iCalendar RRULE + ISO-8601 start + IANA timezone
- exception rules, as strict JSON.
Every label in this dataset was constructed before its sentence existed. A schedule object is generated from an integer seed, then rendered into prose. No model, judge or annotator ever decided what the answer was, so the label cannot be wrong -- it is the input to the pipeline.
Splits
verified is the share of rendered sentences that passed round-trip verification against the constructed label. Rows that failed were discarded, never repaired -- repairing one would mean inferring a label from text, which is the thing this dataset exists to avoid.
Contamination control
Splits occupy disjoint integer seed bands, so a training item and an evaluation item were never produced by the same generator call:
unseen_template renders evaluation items using reserved renderer templates that never appear in training. It exists because of a measurement: a blind, hand-written 1,600-line rule parser reaches ~93% exact match on the ordinary test split. That is the ceiling you should expect when the surfaces are themselves rule-generated, so "the specialist beats hand-written rules" is not a claim test can support. Holding surfaces out asks the question the data can answer: does the model generalise to wordings it has never seen? Note the asymmetry -- the rule baseline was developed with all templates visible, so this comparison is biased against the specialist.
unseen_combo is the stronger test of label composition. It draws only from feature combinations that the train/val/test generator is forbidden to emit. Every individual feature value is common in training; only the conjunction is new, which isolates compositional generalisation from memorisation. Reserved combinations (freq, byday_kind, end_kind, holiday_kind):
DAILY|none|count|afterDAILY|none|until|skipMONTHLY|last|until|afterMONTHLY|setpos|count|skipWEEKLY|multi|until|beforeWEEKLY|single|until|skipYEARLY|nth|until|afterYEARLY|single|count|before
Rendered-sentence collisions with train after generation: val: 2, test: 2, unseen_combo: 0, unseen_template: 0, probe: 0 (rows dropped: 4).
Note that unseen_combo skews hard by construction -- the reserved combinations involve end dates and holiday policies, which score high on the rubric. Compare it against the difficulty- matched slice of test, not against test overall.
Fields
Difficulty rubric (published, so the hard slice is auditable)
easy = score ≤ 1 · medium = 2–3 · hard = score ≥ 4
Prompt
Prompt version chrono-v1. Training and every evaluation condition share one prompt builder (ingot.prompts), so comparisons measure capability rather than prompt engineering.
Convert the recurring-schedule description into JSON.
Keys, in order: dtstart, tzid, rrule, duration_minutes, exdate, holiday.
- dtstart: local wall time, "YYYY-MM-DDTHH:MM:SS", no timezone suffix. It is the first occurrence on or after today.
- tzid: IANA zone name (e.g. Asia/Tokyo). Use the default unless the text names another.
- rrule: RFC 5545 recurrence rule without the "RRULE:" prefix. UNTIL must be UTC in basic format ending with Z.
- duration_minutes: integer.
- exdate: list of local wall times excluded from the series; [] if none.
- holiday: {"calendar": "JP"|"US"|null, "shift": "none"|"before"|"after"|"skip"}.
Output JSON only.Reproduce
pip install ingot
python3 scripts/build_dataset.py --n 24000 --variants 2Generation is a pure function of the seed, so this reproduces the corpus byte for byte.
Limitations
The renderer is rule-based. A sufficiently engineered parser could in principle invert it, so this dataset does not claim that the task is unsolvable by rules. It claims that the labels are strict by construction, that the splits are contamination-free by construction, and that the hard and unseen_combo slices are where general-purpose systems degrade.
