diff --git a/docs/app-map/STATUS.md b/docs/app-map/STATUS.md index e3efeed..201af39 100644 --- a/docs/app-map/STATUS.md +++ b/docs/app-map/STATUS.md @@ -18,7 +18,7 @@ | notes | b-mob-notes | 1 | 21.7 | 0.0 | 34 | 21 | нет | P1 слой данных в коде+юнит-тест (`8a8f1cf`: Notes API v1 клиент/репо/ETag-кэш/конфликт 412); скелет заведён лидом (`133d80d`); далее P1-UI (экраны/редактор/диалог) | | notifications | b-mob-notify | 0 | — | — | — | — | нет | карта готова, diff | | deck | b-mob-deck | 1 | 23.1 | предв. | 51 | ? | нет | P1: «Назначить мне/снять» (6eeba1b) + бейдж комментариев (9d726f4) done, green compile; далее бейдж чек-пунктов, меню колонки (Удалить/Переименовать), быстрые сроки; Fd на устройстве | -| calendar | b-mob-calendar | 1 | 53.3 | 67.0 | ~37 | ~7 | нет | P1 разворот повторений ЗАКРЫТ в коде (`CalendarRecurrence`+11 тестов, compile+detekt green); NB: обновил протухший detekt-baseline модуля (v0.5.144-долг, не мой); далее P2 EXDATE/RECURRENCE-ID; Appointments — вопрос n-a лиду | +| calendar | b-mob-calendar | 1 | 64.0 | 80.4 | ~35 | ~7 | нет | P1 разворот повторений+BYDAY=1MO ЗАКРЫТ в коде (`CalendarRecurrence`, 15 тестов, compile+detekt green, коммиты e7d0a5a/492af61); Appointments=n-a (101); далее P2 EXDATE/RECURRENCE-ID | | contacts | b-mob-contacts | 1 | 31.2 | предв. | ~37 | ? | нет | P1 ядро edit/delete в main (`bc1a497`: updateContact/deleteContact If-Match + VCardEditor, 10 тестов, гейт зелёный); Команды=n-a (102); далее шаг 2/2 Room+форма, потом P2 группы/типы | Обозначения статуса: `карта` → `diff` (итерация 1) → `правки` → `повторный прогон` → diff --git a/docs/app-map/calendar.diff.md b/docs/app-map/calendar.diff.md index 86c16d8..c4801b1 100644 --- a/docs/app-map/calendar.diff.md +++ b/docs/app-map/calendar.diff.md @@ -1,8 +1,7 @@ # Diff: Календарь (Calendar) — итерация 1 (2026-07-13) -Ff_app: **53.3%** · Fd_app: **67.0%** (среднее по 6 экранам, невзвешенно) · n-a: 0 -_(без экрана Appointments, если владелец сочтёт его мобильно-неприменимым: Ff_app **64.0%** / -Fd_app **80.4%** по 5 экранам — вопрос лиду в конце.)_ +Ff_app: **64.0%** · Fd_app: **80.4%** (среднее по 5 экранам, невзвешенно) · n-a: Экран 5 +Appointments (решение лида mail/101 — организаторская фича, мобильно-неприменима, вне знаменателя). > **P1 закрыт в коде** (итерация правок 1): разворот повторяющихся событий реализован — > `CalendarRecurrence` (генератор оккуренций RRULE на лету, без кэша и без ``, @@ -91,8 +90,11 @@ mail/085) добавлю следующим проходом — этот про [Д][done] секция импорта · [Д][open] отсутствуют секции General/Editing/Availability/CalDAV · [Д][open] порядок и группировка пунктов по теме. -## Экран 5. Appointments / Расписание встреч — Ff 0.0% · Fd 0.0% -Ф (10, open 10) — **раздел отсутствует в нативе целиком**: +## Экран 5. Appointments / Расписание встреч — `n-a` (вне метрики, mail/101) +Решение лида: организаторская фича (публикация слотов, внешние букинги) — десктоп/веб-воркфлоу, +на мобильном клиенте неприменима, тянет тяжёлый UI. Экран целиком `n-a`, из знаменателя исключён, +остаётся в финальном списке с обоснованием. +Ф (10, все `n-a`) — раздел отсутствует в нативе (осознанно): - [Ф][open] список расписаний встреч · [Ф][open] «Создать расписание встреч» - [Ф][open] поля: имя/описание/местоположение/длительность/инкремент - [Ф][open] «Календарь бронирования» · [Ф][open] «Календари для проверки конфликтов» @@ -100,8 +102,7 @@ mail/085) добавлю следующим проходом — этот про - [Ф][open] «Создать комнату Talk» для встречи · [Ф][open] публичная страница бронирования (внешний гость: выбор слота → Подтвердить) Д (n/a пока — экран не реализован). -> ВОПРОС ЛИДУ: Appointments мобильно-применимы или помечаем `n-a` (организаторская фича, чаще -> десктоп)? От ответа зависит, входит ли экран в знаменатель (см. шапку — две метрики). +> Решено (mail/101): `n-a` — вне знаменателя. ## Экран 6. Окно события — Ff 83.3% · Fd 92.0% Ф (30, open 5): @@ -148,8 +149,9 @@ pill-поля 40dp, шапка с крестиком/галочкой, высо ## Предлагаемый порядок правок (жду приоритизацию лида) - **P1 — Разворот повторений в сетке/списке** (Экран 1, долг №2): ✅ **СДЕЛАНО в коде** (`CalendarRecurrence` + `eventOccursOnDay`, mail/072-совместимо: развёртка на лету, без кэша - и ``; +11 тестов). Остаётся девайс-сверка (подтверждающий прогон). NB: `BYDAY=1MO` - (месячный n-й день недели) в модели `RecurrenceRule` ещё не хранится — уходит в P2. + и ``; +11 тестов). ✅ **`BYDAY=1MO` тоже починен** (коммит 492af61): `RecurrenceRule` + хранит/сериализует ординал (раньше терялся в `toRrule`) + разворот n-го дня месяца +4 теста. + Остаётся девайс-сверка (подтверждающий прогон). - **P2 — EXDATE + RECURRENCE-ID** (Экран 6, долг №3): чтение EXDATE (не показывать удалённые оккуренции) → выбор области правки/удаления «это / это и будущие» → запись без затирания серии. - **P3 — Настройки** (Экран 4): вынести веб-параметры (номера недель/выходные/задачи-в-календаре/