From 958e14aead9ccfddd5b90b8e8d4b50ecccc6bd9d Mon Sep 17 00:00:00 2001 From: b-mob-notes Date: Mon, 13 Jul 2026 07:14:59 +0000 Subject: [PATCH] =?UTF-8?q?docs(app-map):=20notes.diff.md=20=E2=80=94=20di?= =?UTF-8?q?ff=20=D1=80=D0=B0=D1=81=D1=85=D0=BE=D0=B6=D0=B4=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B9=20=D0=97=D0=B0=D0=BC=D0=B5=D1=82=D0=BE=D0=BA=20(?= =?UTF-8?q?=D0=BD=D0=B0=D1=82=D0=B8=D0=B2=20=D0=BF=D1=83=D1=81=D1=82,=20Ff?= =?UTF-8?q?=3DFd=3D0%),=20STATUS=20=D0=B8=D1=82=D0=B5=D1=80.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Особый случай: feature/notes ещё не создан → все 42 Ф / 21 Д = open. Полный бэклог на реализацию (план 1→2→3, mail/071). Гейт: mail/084/093. Co-Authored-By: Claude Fable 5 --- docs/app-map/STATUS.md | 2 +- docs/app-map/notes.diff.md | 134 +++++++++++++++++++++++++++++++++++++ 2 files changed, 135 insertions(+), 1 deletion(-) create mode 100644 docs/app-map/notes.diff.md diff --git a/docs/app-map/STATUS.md b/docs/app-map/STATUS.md index f78b2f1..125813f 100644 --- a/docs/app-map/STATUS.md +++ b/docs/app-map/STATUS.md @@ -15,7 +15,7 @@ | mail | b-mob-mail | 1 | — | — | ~4 | ~2 | нет | правка P1 черновики | | talk | b-mob-conf | 1 | 39.4 | предв. | ~32 | ? | нет | P1 начат: меню сообщения Копировать/ссылка/переслать-в-заметки (59543a7); приоритеты 092; Fd на устройстве | | tasks | b-mob-tasks | 1 | 24.6 | 52.7 | ~34 | ~8 | нет | P1 закрыт в коде (умные коллекции+3-state видимость+персист, `bd56c4b`); далее P2 управление списками; ждёт девайс-сверки | -| notes | b-mob-notes | 0 | — | — | — | — | нет | карта готова, diff | +| notes | b-mob-notes | 1 | 0.0 | 0.0 | 42 | 21 | нет | diff выложен (`notes.diff.md`); натив пуст — модуль не создан, жду скелет от лида (пинг «готов к регистрации», 093) | | notifications | b-mob-notify | 0 | — | — | — | — | нет | карта готова, diff | | deck | b-mob-deck | 0 | — | — | — | — | нет | карта готова, diff | | calendar | b-mob-calendar | 0 | — | — | — | — | нет | карта готова, diff | diff --git a/docs/app-map/notes.diff.md b/docs/app-map/notes.diff.md new file mode 100644 index 0000000..a373d22 --- /dev/null +++ b/docs/app-map/notes.diff.md @@ -0,0 +1,134 @@ +# Diff: Заметки (Notes) — итерация 1 (2026-07-13) + +Ff_app: **0.0%** · Fd_app: **0.0%** (среднее по 6 экранам) · n-a: 0 + +> ⚠️ **Особый случай: нативного модуля `feature/notes` ЕЩЁ НЕТ.** Он не заведён в +> `settings.gradle`/`app` — скелет создаёт лид по пингу «готов к регистрации» (mail/071 п.2, +> подтверждено в 093). Поэтому **все** функции/элементы веба — `open` (в нативе ноль), а +> счётчики честно 0%. Diff = полный бэклог на реализацию. **Код правок начну сразу, как лид +> заведёт скелет** — пинг «готов к регистрации» отправлен в ответе 093. До скелета коммитить в +> `feature/notes/**` физически некуда. + +Сверка веб (`nextcloud/notes v5.0.0` + тема forbion) ↔ натив (**отсутствует**). Карта-источник: +[`notes.md`](notes.md) (снята из кода + визуально сверена на forbion, Browser 1, read-only). +Метки: `[Ф|Д]` (функционал/дизайн) · `[open|done|n-a]`. Подход к реализации согласован — +Notes API v1 + ETag-кэш, план 1→2→3 (mail/071). + +Приоритеты предлагаю в конце (P1→P3); финальную приоритизацию — за лидом. + +--- + +## Экран 1. Список заметок (главный) — Ff 0% · Fd 0% +**Ф (10, open 10):** +- [Ф][open] кнопка «Новая заметка» (создать + открыть редактор) — P1 +- [Ф][open] поле «Искать заметки» (фильтр по заголовку) + очистка — P2 +- [Ф][open] строка-заметка, тап → открыть редактор — P1 +- [Ф][open] индикатор «расшарена» на строке — P3 +- [Ф][open] меню строки «⋯» (см. Экран 2) — P1 +- [Ф][open] группировка по таймслотам (сегодня/недавние/…) — P2 +- [Ф][open] группировка по категориям (капшены) — P2 +- [Ф][open] сортировка «избранное вверх» + по дате изменения — P2 +- [Ф][open] пустое состояние Welcome (текст + «Новая заметка» + «создать образец») — P2 +- [Ф][open] «Найти во всех категориях» (сброс фильтра при пустом поиске в категории) — P3 +- (состояние загрузки «Загрузка …» — Д) + +**Д (6, open 6):** [Д][open] композиция экрана-списка · [Д][open] мобильная вёрстка по +`_mobile-notes.css` (`content-list__search`, перенос) · [Д][open] порядок элементов шапки · +[Д][open] типографика (Raleway, тема) · [Д][open] иконки (звезда избранного, share-индикатор) · +[Д][open] состояние загрузки/пустое + +## Экран 2. Меню заметки «⋯» (всплывающее, mail/087) — Ff 0% · Fd 0% +Полный состав из кода (`NoteItem` #actions), порядок сверен визуально: +**Ф (6, open 6):** +- [Ф][open] «Добавить/Удалить из избранного» (`PUT /favorite`) — P1 +- [Ф][open] «Поделиться» → сайдбар шаринга (NC sharing) — P3 +- [Ф][open] «<Категория>» / «Изменить категорию» (мультиселект + создать новую, `PUT /category`) — P2 +- [Ф][open] «Переименовать» (инлайн, `PUT /title`) — P2 +- [Ф][open] «Удалить заметку» (`DELETE`) — P1 +- [Ф][open] отмена удаления (`POST /notes/undo`) — P2 + +**Д (3, open 3):** [Д][open] состав/порядок пунктов меню · [Д][open] иконки пунктов · +[Д][open] инлайн-поля (переименование/категория) + +## Экран 3. Редактор заметки (rich / plain / preview) — Ff 0% · Fd 0% +**Ф (10, open 10):** +- [Ф][open] rich-редактор (@nextcloud/text) — P1 +- [Ф][open] панель форматирования: жирный/курсив/цитата/моно/очистить/список/нумерованный/ + заголовок/крупный заголовок/ссылка (всплывающая тулбар-панель, mail/087) — P2 +- [Ф][open] plain-режим — P2 +- [Ф][open] тумблер «Просмотр»/«Правка» (preview⇄edit) — P2 +- [Ф][open] тумблер «Полный экран» — P3 +- [Ф][open] автосохранение с `If-Match: ""` (`PUT /notes/{id}`) — P1 +- [Ф][open] автозаголовок из первой строки (`PUT /autotitle`) — P2 +- [Ф][open] состояние read-only заметки (индикатор, блок правки) — P2 +- [Ф][open] «Сохранение не удалось. Нажмите, чтобы повторить» (ручной ретрай) — P2 +- [Ф][open] плейсхолдеры «Write …» / «Empty note» — P3 + +**Д (5, open 5):** [Д][open] вёрстка редактора · [Д][open] перенос тулбара форматирования на +мобильном (`.text-menubar__entries` flex-wrap) · [Д][open] типографика тела · [Д][open] меню +действий редактора (preview/fullscreen) · [Д][open] индикатор read-only + +## Экран 4. Диалог конфликта версий — Ff 0% · Fd 0% +**Ф (3, open 3):** +- [Ф][open] детект конфликта (сервер вернул конфликт на `If-Match`) — P1 +- [Ф][open] «Использовать версию с сервера» — P1 +- [Ф][open] «Использовать текущую версию» — P1 +- (⚠ обязателен — НЕ молчаливая перезапись, согласовано mail/071 п.2) + +**Д (1, open 1):** [Д][open] вёрстка диалога конфликта + +## Экран 5. Навигация категорий (шторка) — Ff 0% · Fd 0% +Всплывающие/контекстные меню категории (mail/087): «Новая категория», «⋯»-действия категории. +**Ф (8, open 8):** +- [Ф][open] «Новая категория» (создать; drag заметки → назначить) — P2 +- [Ф][open] «Все заметки» + счётчик (сброс фильтра) — P1 +- [Ф][open] «Без категории» + счётчик — P2 +- [Ф][open] список категорий + счётчики, фильтрация по тапу — P2 +- [Ф][open] «Переименовать категорию» (инлайн) — P3 +- [Ф][open] «Удалить категорию» + диалог подтверждения — P3 +- [Ф][open] вложенные подкатегории (`parent/child`) — P3 +- [Ф][open] вход «Настройки заметок» (шестерёнка) — P2 + +**Д (4, open 4):** [Д][open] композиция шторки навигации · [Д][open] иконки папок (тема — серая +`folder-gray.svg`) · [Д][open] счётчики-бейджи · [Д][open] порядок (Все/Категории) + +## Экран 6. Модалка «Настройки заметок» — Ff 0% · Fd 0% +**Ф (5, open 5):** +- [Ф][open] «Отображение»: Форматированный текст / Простой текст / Просмотр — P2 +- [Ф][open] «Расширение файла»: .md / .txt / Свой (+ поле) — P3 +- [Ф][open] «Папка заметок» (WebDAV picker) — P3 +- [Ф][open] секция «Мобильные приложения» (Android / iPhone) — P3 +- [Ф][open] секция «Комбинации клавиш» (в теме скрыта) — n-a? (уточнить — пока open) — P3 + +**Д (2, open 2):** [Д][open] полноэкранная модалка на мобильном (`_mobile-notes.css`) · +[Д][open] вёрстка секций/переключателей + +--- + +## Сводка +| Экран | Ф всего | Ф open | Ff% | Д всего | Д open | Fd% | +|---|---|---|---|---|---|---| +| 1. Список | 10 | 10 | 0% | 6 | 6 | 0% | +| 2. Меню «⋯» | 6 | 6 | 0% | 3 | 3 | 0% | +| 3. Редактор | 10 | 10 | 0% | 5 | 5 | 0% | +| 4. Конфликт | 3 | 3 | 0% | 1 | 1 | 0% | +| 5. Категории | 8 | 8 | 0% | 4 | 4 | 0% | +| 6. Настройки | 5 | 5 | 0% | 2 | 2 | 0% | +| **Итого** | **42** | **42** | **0%** | **21** | **21** | **0%** | + +**Ff_app = 0.0% · Fd_app = 0.0%** (натив пуст — модуль не создан). + +## Предлагаемый порядок реализации (план 1→2→3, mail/071) +- **P1 — read-only ядро:** список заметок (открыть/просмотр), rich-редактор, автосейв `If-Match`, + удаление, избранное, «Все заметки», диалог конфликта. (= итерация 1 плана) +- **P2 — запись/организация:** создание, переименование, категории (создать/сменить/фильтр), + автозаголовок, поиск, группировка, настройки отображения. (= итерация 2) +- **P3 — добивка:** шаринг, подкатегории, удаление/переименование категорий, полноэкранный + режим, расширение файла/папка, попиксельная вёрстка по `_mobile-notes.css`. (= итерация 3) + +## Блокеры +1. **Скелет модуля** — заводит лид (mail/071/093); до него код не пишу. Пинг «готов к + регистрации» — в ответе 093. +2. **NC-апп `notes` на glb** — установлен ли (для интеграционной проверки записи); лид спросил + в PPS 069. До ответа write-путь — на unit-тестах (`core:network`), не на forbion (read-only, mail/073). +3. Повторный (подтверждающий) прогон для гейта — после реализации P1, на устройстве/`bmob-*`.