Skip to main content

max / goingson

The snooze picker names the seventh finding: no date kind exists The comment claimed the not-in-the-past floor was unstatable. Field::min takes it. What is actually missing is any date, time or datetime FieldKind, which no port before this one has needed.
Author: Max Johnson <me@maxj.phd> · 2026-08-10 16:29 UTC
Signed with PGP, not checked
Commit: 2a78980a90439880fa5202a2054211d6e5bd725a
Parent: 50bfde3
1 file changed, +15 insertions, -7 deletions
@@ -16,7 +16,7 @@
16 16 //! This is the first port of a screen that reads something the app did not
17 17 //! write. A task is ours down to its column types; an email arrived from
18 18 //! somewhere else, carrying a body in a format nobody here chose, and two of
19 - //! the six findings below come from that one fact.
19 + //! the seven findings below come from that one fact.
20 20 //!
21 21 //! # The shape
22 22 //!
@@ -759,12 +759,20 @@
759 759 at("snooze").with("until", option.time.to_rfc3339()),
760 760 )
761 761 }));
762 - // The JS also offers a custom datetime. Left to the presets: a
763 - // `FieldKind::DateTime` with a `changes` action would describe it, and
764 - // the minimum it has to enforce — not in the past — is a validity rule
765 - // the description cannot state, so it would be a box that accepts
766 - // yesterday and a route that has to refuse it. Not worth a fifth finding;
767 - // recorded here.
762 + // The JS also offers a custom datetime, and that is the seventh finding:
763 + // **`FieldKind` has no date, time or datetime member**, so a moment a
764 + // user picks cannot be described at all. Text, Secret, Number, Email,
765 + // Url, Tel, Textarea, Select, Radio, Checkbox, File, Hidden — every
766 + // `<input type=...>` the two apps had reached for, and this is the first
767 + // screen to want one. The floor it needs is not the problem: `Field::min`
768 + // exists and takes the host's own spelling of a bound, which is exactly
769 + // what `min` on a `datetime-local` is.
770 + //
771 + // So the presets are the whole of it here, and they are the better half
772 + // of the control anyway — `get_snooze_options` computes them from the
773 + // local clock and drops "Later Today" once it is too late for it to mean
774 + // anything, which a bare picker cannot do. Filed against quasicoherent
775 + // rather than worked around with a text box that parses RFC 3339.
768 776 }
769 777
770 778 out.push(Node::Heading {