Classify custom non-IANA TZID as calendar_unsupported, not dependency_unavailable #53
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Context
Raised as "finding 2" during the #14 review (PR #52). A calendar resource whose
TZIDis a custom, non-IANA zone (the #14 illustrative fixture usesTZID=Custom-Timezone) is reported asdependency_unavailablerather thancalendar_unsupported, according to that review — which would make the fixture unusable over HTTP and classifies a capability gap as a backend outage.docs/technical/verification.mdC07 requires exactly the opposite: "Exact deployment conformance or explicitcalendar_unsupported/partial; no unsupported window labeled free". An unsupported zone is not an outage, and exit 5 tells an agent to retry a dependency that is in fact healthy.Why this is a follow-up and not part of #14
Reading the code, the classification looks correct already, so the claim needs a reproduction before anything changes:
src/calendar/report.rs:374—Tz::from_str(tzid)failure →CalendarError::CalendarUnsupported.src/api/items.rs::live_read_failure—CalendarUnsupported/Preservation→ApiFailure::calendar_unsupported; everything else →dependency_unavailable.src/api/agenda.rsis_outage—CalendarUnsupported/Preservation/LimitExceededare explicitly not outages (#13's refinement).So either there is a path that loses the distinction before it reaches those mappers, or the original observation was about a different failure (e.g. a
Preservationerror from timezone resolution rather thanCalendarUnsupported).What to build
DTSTART;TZID=Custom-Timezone:…(plus a matchingVTIMEZONEblock) throughlife agenda,life item get,life task updateandlife item get-based flows, and record the actual HTTP status / error code / exit code for each.dependency_unavailable(HTTP 503 / exit 5) for an uninterpretable zone, fix it tocalendar_unsupported(HTTP 422 / exit 2) — same mapping #14 just reconciled.src/calendar/report.rsshould map an unresolvableTZIDtoCalendarUnsupported(capability, 422) orPreservation(interpretation, also 422 after the #14 mapping) — today both end up atcalendar_unsupported, so record the choice.TZID.Acceptance criteria
TZIDis reported ascalendar_unsupported(HTTP 422 / exit 2) on every read and mutation path that can encounter it, neverdependency_unavailable.dependency_unavailable(HTTP 503 / exit 5) — C01 is preserved.TZID) is exercised over HTTP, not only at the patcher level.Notes
report.rsandlive_read_failurewere already correct; the all-collections-failed fan-out aggregation collapsed a known capability failure into an outage. Every affected route answered 503dependency_unavailablewhile its own message read "All configured CalDAV collections are unavailable: Calendar unsupported: Unsupported TZID 'Custom-Timezone'" — the interpretation failure was known and then discarded by the aggregation. Pre-fix, nine routes answered 503/exit 5 for the custom-zone fixture; post-fix they answer 422calendar_unsupported/exit 2.incomplete_calendarwarning rather than dropped.nextrow is now pinned withexit_code_foras well.partial(200 / exit 6) when its fan-out failed for all-non-outage reasons, because two pre-existing C07 acceptance tests pin that (recurrence_tests.rs::c07_an_unsupported_collection_is_partial_and_never_declared_free,::c07_an_unresolvable_vtimezone_is_reported_as_unsupported). The author restored the pinned behaviour rather than rewriting acceptance tests to match its own taxonomy; agenda still refuses an all-outage fan-out, and the mixed all-failed case reports the down collection as coverageunavailableand the uninterpretable one asunsupported.TZIDisCalendarUnsupported(capability: this deployment cannot interpret the wall-clock time), notPreservation, documented insrc/calendar/report.rs's module header.test resultlines.Blocked by
None. Distinct from #49 (
not_foundexit-code unification) and #45 (pagination materialization).cargo testrun intermittently, truncating the suite #82