Files
specs/openspec/changes/compact-portfolio-totals/tasks.md
T

9.2 KiB
Raw Blame History

1. Frontend: компактная сводка и сохранение состояний

Основа — утверждённый Design, включая пакет a1-symbols-r1 и все восемь PNG из его Materials. Перед первой Node-командой активировать frontend .nvmrc через nvm use --silent. Зависимости устанавливать из lockfile через npm ci; новую инфраструктуру и зависимости не добавлять.

  • 1.1 [frontend] Открыть существующий formatDecimal через публичный shared/lib и использовать его в сводке с локальными знаками ₽/$/€, ISO-fallback и доступными названиями валют из i18n, сохранив поведение общего formatMoney.

    • Covers: portfolio-view — Обозначение и доступная идентичность валюты в сводке; portfolio-view — Полные точные значения и смысл валютной сводки
    • Verification: Scoped Vitest через npm run test:run -- src/shared/lib/display.test.ts src/pages/account: полные обычные и длинные decimal strings из Delta Specs, дробные нули, отрицательные значения и -0.5; видимые знаки и доступные полные названия RUB/USD/EUR; раздельные USD/CAD и неизвестный ISO; прежние результаты formatMoney вне сводки. Дополнить поведенческие тесты на существующей presentation boundary без копии алгоритма formatter в assertions.
  • 1.2 [frontend] Реализовать A1 в PortfolioTotals и page-local CSS: отдельные карточки, badge и сумма в строке при вместимости, responsive сетка и полный перенос длинной суммы под метку; сохранить исходные membership, порядок и смысл итогов.

    • Covers: portfolio-view — Компактная сводка валютных итогов Portfolio; portfolio-view — Обозначение и доступная идентичность валюты в сводке; portfolio-view — Полные точные значения и смысл валютной сводки
    • Verification: npm run test:run -- src/pages/account: одна/три/больше валют, отсутствие фиктивных карточек, отсутствие повторного добавления Cash Balance или общего межвалютного итога; при неизвестной стоимости позиции показываются только переданные суммы, без обещания полной оценки. Проверить семантическую связь названия с полным значением и отсутствие tab stop у карточки. Реальный reflow проверяется в 1.4, а не выводится из jsdom.
  • 1.3 [frontend] Заменить область сводки в page-owned initial skeleton тремя декоративными A1 placeholders и дополнить существующие account-page regression checks для сохранённых данных и состояний, не меняя query/VM policy.

    • Covers: portfolio-view — Состояния и ошибки Portfolio на клиенте; portfolio-view — Полные точные значения и смысл валютной сводки
    • Verification: npm run test:run -- src/pages/account src/entities/portfolio: initial busy label без сумм и фокусируемых shapes; refetch → error → retry → success сохраняет прежние суммы и UTC lastSuccessfulAt до успешного ответа; server stale отдельно и вместе с client error; 404 с/без Client Cached Snapshot; штатные действия ошибок подключения/токена/временной и неизвестной ошибки; empty по positions/cashBalances и непустой состав без totals. Переиспользовать имеющиеся assertions cache policy: 30 секунд, без automatic retry/polling/focus refetch; добавлять только недостающее покрытие затронутых инвариантов.
  • 1.4 [frontend] Проверить реализованный пакет в браузере, исправить расхождения в пределах Design и выполнить canonical frontend gate.

    • Covers: portfolio-view — Компактная сводка валютных итогов Portfolio; portfolio-view — Обозначение и доступная идентичность валюты в сводке; portfolio-view — Полные точные значения и смысл валютной сводки; portfolio-view — Состояния и ошибки Portfolio на клиенте
    • Verification: В существующей локальной витрине/приложении сравнить сводку и loading с a1-symbols-r1 на 320, 390 и 1440 px и по обе стороны 48/62 em; использовать синтетические обычные, длинные, отрицательные значения, одну/три/дополнительные валюты и zoom 200%. Проверить все цифры и знаки, получение полной ширины под меткой, отсутствие обрезания и горизонтального overflow сводки (scrollWidth <= clientWidth для сводки/карточек), меньшую высоту обычных одной/трёх валют относительно прежнего UI при одинаковых данных, ширине, шрифте и масштабе. Проверить accessibility tree, клавиатурный retry, initial/refetch/error/stale и неизменность соседних sections. Сохранить observed measurements/screenshots как implementation evidence, не как новую revision Design. Затем после lockfile install выполнить npm run verify из frontend; runtime-openapi не требуется по Design.

2. Документация и canonical пакет

  • 2.1 [docs] После проверенной frontend реализации обновить features/portfolio-view.md описанием фактической компактной сводки, валютных знаков, точных переносимых сумм и ограничений оценки; сохранить согласованное описание состояний.

    • Covers: portfolio-view — Компактная сводка валютных итогов Portfolio; portfolio-view — Обозначение и доступная идентичность валюты в сводке; portfolio-view — Полные точные значения и смысл валютной сводки; portfolio-view — Состояния и ошибки Portfolio на клиенте
    • Verification: Scoped review соответствия документа реализованному UI и применимых локальных ссылок; из docs после nvm use --silent и npm ci выполнить npm run verify. Не переносить planning или будущие verification results в as-built документацию.
  • 2.2 [specs] Подготовить к поставке полный canonical change package: утверждённые planning artifacts, восемь Materials a1-symbols-r1 и фактические отметки завершения implementation Tasks; сохранить неизменными approval-bound содержимое и относительную структуру пакета.

    • Covers: N/A — задача не вводит отдельного пользовательского поведения; specs владеет поставкой уже подготовленного normative/UI пакета и checklist progress согласно Delivery Map. Main-spec sync и archive остаются последующей Finalization.
    • Verification: Из specs под активированным frontend runtime выполнить openspec schema validate wealth-ledger-sdd --verbose, openspec validate compact-portfolio-totals --type change --strict --store wealth-ledger-specs и openspec validate --specs --strict --store wealth-ledger-specs. Сверить полный native Delta membership, prerequisite approval fingerprints и Tasks fingerprint с нормализацией только checklist progress; проверить все пути/SHA-256 материалов из Design. Не создавать независимый PASS, Completion Evidence или archive в этой task.