Version bumped to 1.2.0 / 9. No code changes beyond the version — 1.2.0 is
the create slice: event form, "+" FAB on every view, last-used-calendar
preselect, provider-correct all-day storage. CHANGELOG [1.2.0] carries the
details; ROADMAP/STATE mark slice v1.2 shipped.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Version bumped to 1.1.0 / 8. No code changes beyond the version — 1.1.0 is
the write-foundation slice: WRITE_CALENDAR, read-only-calendar detection,
and event delete (whole series or single occurrence). CHANGELOG [1.1.0]
carries the details; ROADMAP/STATE mark slice v1.1 shipped.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
First slice of milestone 2 (write support), per the new plan in
docs/superpowers/plans/2026-06-11-03-write-support.md:
- Delete from the event detail screen with confirmation; recurring events
choose "only this event" (cancelled exception via CONTENT_EXCEPTION_URI,
series survives) or "all events in the series" (Events-row delete)
- WRITE_CALENDAR in the manifest; onboarding requests read+write in one
system dialog but only read gates the app — declining write keeps it
usable read-only. v1.0 installs get a contextual write request on their
first delete
- CALENDAR_ACCESS_LEVEL is read into CalendarSource.canModifyContents;
read-only calendars (WebCal, birthdays, …) show no write actions. The
no-op placeholder Edit button is removed until edit ships (v1.3)
- Onboarding copy drops the now-false "read-only" claim (DE+EN)
- Tests: repository delete delegation/error propagation, access-level
mapping; FakeCalendarDataSource grows write ops
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Version bumped to 1.0.0 / 7. No code changes beyond the version — 1.0.0 is the
accumulated v0.1 → v0.6 work (all V1 screens, full event read, filter, settings,
onboarding polish) declared release-ready. CHANGELOG [1.0.0] summarises the
shipped feature set; ROADMAP/STATE mark V1 complete.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Round out the read-only model so the detail view shows everything
CalendarContract actually stores, ahead of write support.
Data layer:
- New domain types: Reminder, EventStatus, Availability, AccessLevel,
AttendeeRelationship, AttendeeType; EventDetail gains reminders, status,
availability, accessLevel, eventTimezone, selfStatus and Attendee gains
relationship + type (all defaulted so existing callers compile)
- EventDetailProjection reads STATUS / AVAILABILITY / ACCESS_LEVEL /
EVENT_TIMEZONE / SELF_ATTENDEE_STATUS; AttendeeProjection reads
RELATIONSHIP + TYPE; new ReminderProjection queries CalendarContract.Reminders
- Mappers translate each provider integer code, guarding STATUS's null-vs-0
ambiguity (0 == TENTATIVE) so an absent status reads as Confirmed
- Mapper unit tests cover every new column's codes
Detail UI:
- Status / availability / access chips under the title; cancelled also strikes
the title through
- Reminders card with humanised lead times (plurals, DE + EN)
- Foreign-timezone card, shown only for timed events in a non-device zone
- Attendee role badges + the user's own "Your response: …" line
- http(s) URLs in the description are now tappable
URL field cut: CalendarContract exposes no Events.URL column (only the
CUSTOM_APP_URI app deep-link), so URLs are surfaced by linkifying the
description instead. Recorded in ROADMAP/CHANGELOG.
Version bumped to 0.6.0 / 6.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Plan to surface every readable CalendarContract field (reminders, status,
availability, attendee role + self-status, timezone, URL, access level) in
the detail view before write support. Recurrence-override badges and
CATEGORIES/ATTACH stay out (the former folds into v2, the latter is a
provider limitation). Noted only — implementation comes later.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The date-picker half of M2 is dropped entirely; the "Today" half already
shipped in v0.5. V1 is now feature-complete and only a polish/QA pass
remains before v1.0.
Updated the living planning docs (ROADMAP, STATE, REQUIREMENTS) and the
design spec; corrected the v0.5.0 CHANGELOG note that promised M2 would
return in v1.0.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
M3 — calendar filter: the navigation drawer now hosts the calendar list
inline (grouped by account, colour swatch + checkbox per calendar). Hidden
calendars are persisted app-side and filtered centrally in the repository,
so month/week/day re-filter live the moment a checkbox flips. Drawer trimmed
to Today, the calendar filter, and Settings, with leading icons and a clear
title/section type scale; the stubbed jump-to-date entry (M2) was removed.
M4 — settings: full-screen destination with appearance (theme System/Light/
Dark, Material You dynamic colour auto-disabled < API 31, week start Auto/Mon/
Sun), language (per-app locales via AppCompat, persisted to API 29), and an
about section (version, licence, source link). Theme is driven by one
activity-scoped settings source so changes apply app-wide at once. Week start
now drives the month grid and week view; Auto follows the locale.
Also:
- default view switched from month to week
- Settings screen handles system back (was closing the app)
- fix pre-existing NonObservableLocale/LocalContextConfigurationRead lint
errors in EventDetailScreen so CI lint is green again
- versionName/versionCode bumped to 0.5.0 / 5
Tests: repository hidden-filter (incl. live re-emit), SettingsPrefs round-trip
+ week-start resolution, filter grouping. lint + unit tests + assembleDebug green.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Replace the throwaway debug screen with the first real calendar UI and a
functional Month <-> Week switcher, on Material 3 Expressive.
Month view (S1):
- Material 3 Expressive card-per-day grid; only the current month's weeks
render (neighbouring days left blank)
- per-day event dots with "+N" overflow, today via primaryContainer
- spring-based press feedback from the active motion scheme
- swipe + drawer navigation, Loading/Failure/Success states
Week view (S2):
- vertical time schedule with overlap-resolved lanes (per-day clipping,
midnight spanning, instant events)
- all-day / multi-day events as connected horizontal spans
- single scroll container (gutter + day columns stay aligned), columns
bundled in a rounded container, noon-centred on load
- top section colour-shifts with the app bar on scroll; swipe navigation,
three states
Shared / infra:
- CalendarHost holds the active view; RootScreen renders it post-permission
- ui/common building blocks: CalendarDrawer, CalendarFailure,
ViewSwitcherPill, pastelize, observable locale, M3 Expressive slide
transition (motionScheme fastSpatialSpec)
- unit tests for the week layout (lanes, clipping, all-day spans)
- build: compileSdk 37, material3 pinned to 1.5.0-alpha21 for Expressive
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Plan 01 (Foundation & CI) is complete. The app builds, tests pass,
lint is clean, both Gitea workflows are wired. CHANGELOG transitions
the foundation entries from [Unreleased] to [0.1.0] dated 2026-06-08.
STATE.md ticks off Plan 01 execution and points to Plan 02 (Data
Layer + Permission Flow) as the next milestone.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>