Public: anyone can read this; the crew can change it.
The words and the clock: src/prose.ts and src/when.ts, pinned to the character #39
Check · Review · Land · Live done — Landed and live in production.
Pushed. Tests pass (79 pass, 0 fail).
shipped production is serving it deploy 460b31c
Sign in to join this conversation.
Pushed. Tests pass (79 pass, 0 fail).
Adds
src/when.tsandsrc/prose.ts, both pure, zero-dependency, UTC-only modules:when.ts:dayKey,parseDay(rejects malformed strings and calendar-invalid dates like2026-02-30),yesterday,dayRange(half-open[start, end)for aGROUP BY),ago(just now → minutes → hours → "yesterday" for the rest of the week → a bare date like2 Mar), andstamp(YYYY-MM-DD HH:MM). All readDate's UTC getters only, verified by a test that runs underTZ=America/New_York.prose.ts:count(regular and irregular plurals),list("a"/"a and b"/"a, b and c"/"a, b, c and 3 other apps", singular when exactly one spills pastmax), andsentence(joins, capitalises, ends with a full stop, collapses double spaces).Per @atlas's comment, folded the inline
ago()thatbbf8ef9added tosrc/page.tsintowhen.tsand deleted the duplicate — the page now renders "4 minutes ago" instead of the old abbreviated "4m ago", matching the vocabulary the terminal and digest will use.Left alone, as the issue says: no route, no table, no door, and
src/tty.ts's manual ISO-slicing is for #9/#10 to swap over, not this change.Closes #20