spec: archive quiet-user-feedback and sync canonical specs (#50)
Specs security / security (push) Successful in 8s
Specs verify / verify (push) Successful in 10s

Native archive применил 9 added и 12 modified требований без удалений; все 10 сценариев сохранены. Новый canonical spec frontend-user-feedback внесён в AI_INDEX.
This commit was merged in pull request #52.
This commit is contained in:
2026-10-17 22:18:27 +03:00
parent 5a7e319caf
commit f0478c6d6b
26 changed files with 654 additions and 129 deletions
@@ -0,0 +1,82 @@
## MODIFIED Requirements
### Requirement: Realized analytics never presents an incomplete result as complete
Система MUST формировать итог выбранного периода, его trend buckets,
instrument breakdown и drill-down только после успешного получения всех
необходимых cursor pages исполненных операций этого периода. Каждое comparison
MUST дополнительно требовать полного результата соответствующего периода
сравнения. Ошибка любой необходимой страницы MUST NOT возвращать частичные
totals, comparisons, buckets или
breakdown как полный результат. При временной недоступности клиент MUST
сохранять предыдущий полный результат той же выборки либо показывать
нейтральную недоступность соответствующего расчёта без технических сообщений
и ручного повтора. Восстановление SHALL выполняться автоматически по
`frontend-data-resilience`.
Доступные независимые части MUST оставаться видимыми; неполное сравнение MUST
обозначаться как недоступное без нулевой базы и окончательной разницы. Успешный
полный период без подходящих выплат MUST возвращать нулевой результат и
отображаться с объяснением пустого состояния. Неизвестный результат MUST NOT
подменяться таким нулевым результатом.
#### Scenario: Все страницы операций успешно получены
- **WHEN** для расчёта требуется несколько cursor pages и каждая страница успешно получена
- **THEN** система формирует результат по всем подходящим Ledger Entries со всех страниц
#### Scenario: Одна из страниц операций недоступна
- **WHEN** получение любой необходимой cursor page завершается временной ошибкой
- **THEN** страница сохраняет предыдущий полный результат той же выборки либо показывает нейтральную недоступность расчёта без ручного повтора и не выдаёт частичный результат за полный
#### Scenario: В периоде нет купонов и дивидендов
- **WHEN** все необходимые операции успешно получены, но среди них нет подходящих coupon или dividend Ledger Entries
- **THEN** страница показывает нулевой результат и объясняет, что за выбранный период купоны и дивиденды не найдены
#### Scenario: Основной период готов, сравнение пока нет
- **WHEN** выбранный период полностью рассчитан, а необходимый период сравнения ещё не получен
- **THEN** основной доход остаётся доступным, сравнение обозначается как недоступное без нулевой базы, частичной разницы и сообщения о синхронизации
### Requirement: Account overview has an independent current-month income summary
Обзор выбранного Brokerage Account MUST показывать компактный source-currency
summary «Получено купонами и дивидендами» за период от первого дня текущего
месяца по Europe/Moscow до сегодняшнего дня включительно и действие перехода
на страницу «Пассивный доход». Summary MUST всегда использовать этот current-month
период и MUST NOT наследовать последний пользовательский период страницы аналитики.
Пустой или неуспешный расчёт MUST оставаться локальным состоянием блока и
MUST NOT заменять успешно отображённый Portfolio или другие блоки обзора.
Временная ошибка обновления MUST сохранять доступную сводку той же выборки без
предупреждения и ручного повтора. При отсутствии результата SHALL показываться
нейтральная недоступность после первичного ожидания с автоматическим восстановлением.
#### Scenario: Обзор показывает доход текущего месяца
- **WHEN** обзор Brokerage Account загружен и current-month analytics успешно рассчитана
- **THEN** он показывает отдельные source-currency итоги с начала текущего месяца по сегодняшний день и переход к полной аналитике
#### Scenario: Пользовательский период не влияет на обзор
- **WHEN** User ранее применил на странице аналитики период, отличный от текущего месяца
- **THEN** summary обзора по-прежнему рассчитывается от первого дня текущего месяца по сегодняшний день
#### Scenario: Current-month summary недоступен
- **WHEN** Portfolio обзора успешно загружен, но расчёт current-month summary завершается временной ошибкой
- **THEN** Portfolio и остальные блоки остаются доступными, а summary сохраняет предыдущий результат той же выборки либо показывает нейтральную недоступность без ручного повтора
## ADDED Requirements
### Requirement: Доход обновляется без технических сообщений
Страница дохода MUST сохранять применённый период, черновик фильтров и
доступный результат при фоновом обновлении. Временная ошибка SHALL
восстанавливаться автоматически без кнопок обновления и повтора, времени
получения данных и уведомлений об их загрузке. Изменение периода MUST NOT
подписывать прежний результат новыми датами. Ошибки пользовательского периода
MUST оставаться у полей и MUST NOT запускать автоматический повтор ошибочного
ввода. Подтверждённая потеря доступа MUST скрывать личные результаты.
#### Scenario: Доход обновляется при редактировании периода
- **WHEN** пользователь редактирует черновик дат, а фоновое обновление применённого периода завершилось
- **THEN** черновик и фокус сохраняются, результат относится к прежнему применённому периоду и техническое уведомление не появляется
#### Scenario: Новый период пока недоступен
- **WHEN** пользователь применил другой допустимый период, но его расчёт ещё не получен
- **THEN** страница показывает ожидание или недоступность нового результата, не выдаёт прежние суммы за доход нового периода и восстанавливается автоматически