oficina / calendar Public

DST gap recurrence and booking availability open

On branch fix/recurrence-gap-busy

Own isolated follow-up atop approved 1a6dcd0; original broad application owner/provenance preserved. Real Store.FreeSlots reproduction confirms daily Dublin 01:30–02:00 starting March 28 offers March 29 02:30–03:00 as free with no error. Evidence /tmp/oficina-calendar-gap-review/free-before.log. No implementation yet. Product rules explicitly keep generated gap starts resolved forward (booking spec §4.1); RFC 5545 §3.3.10 instead skips nonexistent generated starts without COUNT, and §3.8.5.3 exact DTEND duration differs from this app civil end-clock rule. Primary source https://www.rfc-editor.org/rfc/rfc5545.html. Preparing independent Fable design review of coherent duration handling versus narrowly scoped strict uncertainty; no silent switch to RFC skipping or blanket series refusal.

Fable design verdict: DESIGN DECISION REQUIRED (claude-fable-5-1), evidence /tmp/oficina-calendar-gap-review/design-review.json. Real FreeSlots defect confirmed; no implementation approved. Recommended new ruling: translate the entire intended interval by the positive gap displacement of its start, only for that occurrence. Dublin 01:30–02:00 would become 02:30–03:00; existing 01:30–03:00 would change from 02:30–03:00 to 02:30–04:00; a multi-day gap-start event would also end one hour later. Normal dates, fold, and end-only transition handling stay as currently specified; COUNT and resolved recurrence keys stay. This is coherent but not settled by existing start-shift and endpoint-clock rulings; single-event validation currently refuses silently moved ends. Alternative RFC-generated skip changes COUNT and contradicts pinned gap-day keys. Repairing only nonpositive duration is rejected as discontinuous. Narrow strict refusal is an interim only: current busy-reader padding causes March28–30 booking503, not merely affected interval. Parent notified to resolve and record the real duration policy before implementation. If translation adopted, reviewer recommends civil iterator/raw stored proto, resolve at emission, exact civil displacement/end bounds, with real FreeSlots and COUNT/fold/multi-day/gap-master regressions. Current branch has only an uncommitted deliberately failing reproduction test; production untouched.

Task 8, isolated fix/gap-availability-stopgap from 1a6dcd0: implementing only the whole-release Fable-requested B23 fail-closed stopgap. Positive master with generated end<=start is omitted from tolerant chips and marks affected expansion windows incomplete; walking continues so later ordinary windows remain valid. Existing endpoint conversion, COUNT and EXDATE stay unchanged; no interval-translation ruling inferred. Actual FreeSlots and expansion regressions pass; baseline and uncertainty-removal mutations are being checked, followed by full make ci and race. No Fable invocation, live mail, merge or deploy. Evidence: /home/paulca/.cache/oficina-calendar-gap-stopgap.

Frozen gap stopgap candidate 10d642262c3ea4c5cc6dd73e6ccbea5b47e781dc on fix/gap-availability-stopgap. c63b4dc is production fix plus regressions; 10d6422 only fixes pre-existing late-day deferred-mail fixture by selecting a full future day. Full make ci, package race and exact-SHA hub CI PASS. Baseline and uncertainty-removal mutation both fail actual FreeSlots regression; ordinary dates remain available. COUNT, EXDATE and endpoint translation unchanged; invalid tolerant chip omitted. Evidence /home/paulca/.cache/oficina-calendar-gap-stopgap/evidence.json. No Fable invocation or approval, merge, deployment, live mail or data changes; task8 remains Started pending review/integration. Reminder rescheduling/export masters are separate explicit mechanical follow-ons.

Cumulative95dc52d gap+reminder patch received explicit Fable APPROVE via subscription actual claude-fable-5-1, session161fcea0, exit0/end_turn. Scope accepts fail-closed B23 stopgap without new DST translation. Full verdict /home/paulca/.cache/oficina-calendar-fable-review-95dc52d/verdict.txt. Reviewer notes adjacent buffer-padded dates also503 and omitted chip has no per-occurrence UI escape; policy remains unresolved. No full release approval or deployment; export still open.