@@ -1,7 +1,11 @@
|
||||
# Architecture
|
||||
|
||||
Time Tools is a static React/Vite application wrapped in the shared Toolbox shell. Its pure modules separate exact epoch parsing, named-zone resolution/transition inspection, calendar-versus-elapsed arithmetic, bounded recurrence preview, business-day calculation and UTC iCalendar generation.
|
||||
Time Tools is a static React/Vite application wrapped in the shared Toolbox shell. Its pure modules separate exact epoch parsing, named-zone resolution/transition inspection, calendar-versus-elapsed arithmetic, bounded recurrence preview, business-day calculation, UTC iCalendar generation and bounded iCalendar inspection.
|
||||
|
||||
`temporal-polyfill` supplies Temporal semantics while the browser runtime supplies IANA time-zone data. Croner handles explicitly selected 5/6/7-field cron syntax; `rrule-temporal` parses strict RFC 5545 recurrence rules with bounded iterations/candidate evaluations. iCalendar export resolves one named-zone wall time and writes escaped/folded UTC DTSTART/DTEND fields rather than an incomplete `VTIMEZONE`.
|
||||
|
||||
Version 0.1 operations are synchronous and bounded, so the app creates no worker and has no persistence or server API. Relative entry and asset URLs keep the build relocatable below a nested portal path.
|
||||
`time/recurrence.ts` places an explicit dialect adapter in front of Croner. It validates field counts, portable subsets, UTC-only schedulers, day-of-month/day-of-week semantics and scheduler-specific caveats before generating a bounded preview. `time/meeting.ts` advances a bounded instant range at a declared step, projects each candidate into every participant's IANA zone, and accepts it only when the fixed elapsed interval stays inside all entered same-day work windows.
|
||||
|
||||
`time/ics-inspect.ts` unfolds and tokenises imported calendars into a bounded component tree, validates calendar/event structure, inventories `VTIMEZONE` observances, and previews multiple recurring events with `RDATE`, `EXDATE`, and moved or cancelled `RECURRENCE-ID` overrides. It preserves floating/all-day semantics during preview. Unsupported custom-zone recurrence and `RANGE=THISANDFUTURE` overrides produce diagnostics and withheld occurrences instead of guessed instants. URLs and attachments remain inert metadata records.
|
||||
|
||||
Version 0.2 operations are synchronous and bounded, so the app creates no worker and has no persistence or server API. Relative entry and asset URLs keep the build relocatable below a nested portal path.
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
# Privacy and security
|
||||
|
||||
Time values, schedules and calendar fields stay in page memory. There is no telemetry, analytics, account, persistence or runtime network path. Exported ICS text is escaped and UTF-8 line-folded; users choose whether to download/import it into another application.
|
||||
Time values, schedules and imported calendar fields stay in page memory. There is no telemetry, analytics, account, persistence or runtime network path. Exported ICS text is escaped and UTF-8 line-folded; users choose whether to download/import it into another application. Imported URL and ATTACH values are displayed only as inert text/JSON: URIs are never followed and embedded Base64 is inventoried rather than decoded.
|
||||
|
||||
Epoch input uses signed integer arithmetic and rejects exponent/fraction syntax. Recurrence output is limited to 1,000 occurrences, RRULE evaluation uses hard iteration/candidate bounds, business-day movement is limited to ±100,000 days, and explicit holidays to 10,000 bounded ISO dates. Calendar text fields and zone/duration inputs are length-bounded before parsing.
|
||||
Epoch input uses signed integer arithmetic and rejects exponent/fraction syntax. Recurrence output is limited to 1,000 occurrences, RRULE evaluation uses hard iteration/candidate bounds, business-day movement is limited to ±100,000 days, and explicit holidays to 10,000 bounded ISO dates. Calendar imports are limited by source size, line/property/component/event counts, component depth, unfolded-line length and occurrence count; calendar text fields and zone/duration inputs are length-bounded before parsing.
|
||||
|
||||
Named-zone results depend on the IANA data supplied by the browser/runtime and can vary across versions. Temporal does not represent leap seconds. Cron semantics vary by implementation; the selected field count and common Unix day-of-month/day-of-week OR rule are shown. Business days mean Monday–Friday minus only the dates entered, not a regional legal calendar.
|
||||
Named-zone results depend on the IANA data supplied by the browser/runtime and can vary across versions. Temporal does not represent leap seconds. Cron semantics vary by implementation; the chosen dialect, exact field count, normalized expression and day-field rule are shown, while remote delivery/misfire behavior is explicitly outside the preview. Business days mean Monday–Friday minus only the dates entered, not a regional legal calendar.
|
||||
|
||||
Meeting candidates use only the entered participant names, IANA zones, work windows and weekend flags. The search is capped at 24 participants, 31 days and 100 results and performs no calendar lookup. A candidate is scheduling arithmetic, not evidence that a person is actually available.
|
||||
|
||||
Reference in New Issue
Block a user