- 11 записей типа goal закрыты с причиной, называющей задачи-наследники; ROADMAP.md удалён, индекс остался один — BACKLOG.md; - 33 записи переписаны: ссылка «Двигает пункты N «Завершения» цели» уступила место прямому утверждению — без целей номера пунктов вели в никуда; - шапка BACKLOG.md размечена парой <!-- стадия -->, порядок строк теперь объявлен зависимостью, а не важностью.
44 lines
3.2 KiB
Markdown
44 lines
3.2 KiB
Markdown
# ✨ Сделать приложение устанавливаемым на телефон
|
|
|
|
- **Тип:** feature
|
|
- **Категория:** Очередь — Ставить на телефон есть смысл, когда есть что ставить.
|
|
- **Зачем:** Приложение, живущее вкладкой браузера, теряется среди прочих: ярлыка на экране у него нет.
|
|
|
|
Приложение ставится с телефона и запускается с ярлыка без адресной строки, а
|
|
открытое без сети показывает это состоянием.
|
|
|
|
Берётся после того, как есть что ставить, — то есть после
|
|
`records-list-screen`.
|
|
|
|
## Затрагивает
|
|
|
|
- манифест приложения: имя, иконки под размеры экранов, цвета, режим показа;
|
|
- service worker: регистрация, обновление версии, поведение без сети;
|
|
- раздача манифеста и service worker с правильными заголовками и без длинного
|
|
кэша;
|
|
- версионирование собранной статики, чтобы установленное приложение обновлялось;
|
|
- `docs/conventions/web-ui.md` — раздел про статику и кэш;
|
|
- `docs/security.md` — service worker перехватывает запросы, и это новая
|
|
поверхность.
|
|
|
|
## Критерии приёмки
|
|
|
|
- Приложение предлагается к установке и после установки запускается с ярлыка на
|
|
отдельном экране, без адресной строки. Оракул — проверка на телефоне и
|
|
сверка манифеста инструментом браузера.
|
|
- Открытое без сети приложение показывает состояние «связи нет», а не пустую
|
|
страницу и не ошибку браузера. Оракул — тест либо ручная проверка с
|
|
выключенной сетью.
|
|
- Новая выкладка доходит до установленного приложения: старая статика из кэша не
|
|
переживает обновление. Оракул — установка, выкладка изменённой версии,
|
|
перезапуск приложения показывает новую.
|
|
- Service worker не кэширует ответы API и не отдаёт чужие данные после смены
|
|
сессии. Оракул — тест: после выхода и входа другой учётной записью список
|
|
записей чужих не содержит.
|
|
|
|
## Рамки
|
|
|
|
Офлайн-чтения готовых расшифровок и очереди отправки без сети **не делаем** —
|
|
это за границей из паспорта. Web Push не делаем: уведомления идут через apprise
|
|
и ntfy — задача `ntfy-delivery`.
|