agentsclimarketplace

Lamina time semantics

Skill aryaniyaps/lamina/skills/lamina-time-semantics

Define trustworthy date, time, deadline, expiry, recurrence, and timezone behavior. Use when a product accepts local times, crosses actor timezones, schedules recurring work, or triggers behavior from a clock.From its SKILL.md

Install
npx -y skills add aryaniyaps/lamina --skill lamina-time-semantics

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

SKILL.md

4.5 KB, 776 tokens by cl100k_base, as published. Nobody here has run it

Time semantics

Treat time as product data with explicit meaning, ownership, conversion, and recovery. “Store UTC” and “use a controlled clock” are implementation techniques, not a complete product contract.

Classify every temporal field

KindProduct meaningExample
InstantOne globally ordered momentcompletion audit event
Local wall time + IANA zoneA clock reading owned by a person or placemedicine due at 09:00 in the relative's zone
Date-onlyA calendar date with no implied instantbirthday
DurationElapsed amount independent of civil-clock changesretry after 15 minutes
RecurrenceA calendar rule evaluated in a named zoneevery day at 09:00 America/New_York
Deadline or expiryAn instant derived from a declared start, duration, and boundary policyinvite expires 72 elapsed hours after issuance

Do not collapse these kinds into one timestamp. In entities[].attributes[].contract, name the kind, owning actor/place, accepted input, authoritative representation, display policy, and correction path.

Local wall-time boundary

When a user enters a local time for a subject-selected timezone:

  1. The client submits the untouched local components plus an IANA timezone identifier and, when needed, an explicit overlap choice.
  2. A trusted server validates the zone and resolves the wall time with a timezone-aware library/database.
  3. A nonexistent DST-gap time is rejected with a nearby valid-time recovery. An ambiguous overlap requires an explicit earlier/later choice; never guess silently.
  4. Persist the resolved instant and enough source semantics—local components, zone, and disambiguation—to audit or re-render the actor's intent.
  5. Display the relevant zone or offset whenever actors may differ, and preserve one authoritative instant across all projections.

Never parse a datetime-local value with new Date(value) in the browser and then attach an unrelated timezone label. That converts in the browser's zone before the server can honor the subject's zone.

Recurrence and operational time

  • Advance recurrences by calendar rule in their named zone, not by repeatedly adding 24 hours.
  • Define missed-run, delayed-monitor, duplicate-run, retry, and catch-up behavior. A participant's open browser is not an operational clock.
  • Record the actor and authoritative instant for consequential completion, acknowledgement, escalation, revocation, and correction events. If the promise is “know what was done,” surface who did it and when.
  • Separate an in-product overdue/urgent truth from notification delivery. Delivery failure must not erase or postpone the authoritative state.

Graph and proof obligations

  • Entity attributes classify every consequential temporal value.
  • Operations define trusted resolution, preconditions, invalid/ambiguous input failures, and correction.
  • Invariants preserve instant identity and prohibit browser-zone substitution.
  • Dependencies name the timezone-data and independent-runner mechanism, owner, cadence/tolerance, unmet behavior, and health proof.
  • Scenarios cover browser zone != subject zone, DST spring gap, DST fall overlap, recurrence across an offset change, delayed runner, and duplicate/replayed evaluation when relevant.
  • Tests use a controlled authoritative clock and explicitly set different browser and subject zones. Assert persisted state and cross-actor rendering, not only form submission.

Anti-patterns

  • A bare ISO string whose product meaning and zone owner are unspecified.
  • Fixed 24 * 60 * 60 * 1000 arithmetic for a local daily recurrence.
  • Browser-local conversion followed by an arbitrary IANA zone field.
  • Silent normalization of invalid or ambiguous civil times.
  • UI-only timers for overdue, expiry, or delivery promises.
  • Showing “today” or “09:00” to multiple actors without saying whose calendar or zone applies.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.