docs(specs): archive frontend view model boundary change

This commit is contained in:
2026-08-25 13:17:45 +03:00
parent 736885fe65
commit 5cc42f30ca
5 changed files with 323 additions and 0 deletions
@@ -0,0 +1,69 @@
## Why
Frontend conventions уже называют разделение ViewModel/View, а project template
описывает эту границу подробнее. Однако поставленный finance UI сейчас содержит
page view, который смешивает рендеринг с server-state hooks, соседней загрузкой
данных, доменной группировкой и derived presentation calculations. В результате
получается misleading example для будущих AI-assisted changes: агент может
следовать крупнейшей локальной странице и всё равно нарушить intended boundary.
Это нужно исправить сейчас, потому что проблема не сводится к локальной
сложности одного файла. Текущий пример ослабляет guidance, которое должно
удерживать будущую frontend-работу маленькой, reviewable и testable. Если
граница остаётся implicit, та же ошибка может повториться на следующих finance
pages даже после ручной очистки текущего файла.
## What Changes
- Восстановить frontend page architecture так, чтобы data fetching, state
selection, domain grouping, derived display flags и callbacks жили в
ViewModel или container layer, а view modules оставались сосредоточены на
rendering props.
- Уточнить frontend-local guidance для AI agents и maintainers, чтобы роли
container, ViewModel и view modules были explicit и согласованы с reference
template.
- Держать view modules маленькими по ответственности: когда section или state
имеет отдельный смысл и может быть самостоятельно назван, его нужно выносить
в соседний presentation component, а не накапливать внутри одного большого
view.
- Сохранить текущее user-visible поведение account page, routing, localized
text, loading/error/empty/loaded states, cached-snapshot behavior и API
contract.
- Добавить focused regression coverage для derived presentation data,
перенесённых во ViewModel, сохранив existing rendering coverage для видимых
состояний страницы.
- Non-goal: вводить automatic lint или dependency-cruiser rule для этой границы
в данном change.
- Non-goal: нормализовать другие account-related pages, которые сейчас
используют другие page architecture patterns.
- Non-goal: менять HTTP routes, generated OpenAPI types, backend behavior,
finance domain terminology, visual design или portfolio calculations за
пределами переноса existing display-only derivation в правильный frontend
layer.
## Capabilities
### New Capabilities
_Нет._
### Modified Capabilities
_Нет._
Это behavior-preserving frontend architecture и documentation hardening change.
Он отказывается от Delta Specs через `skip_specs: true`, потому что не меняются
user-visible capability, API contract, durable data behavior или product
requirement. Любое обнаруженное observable behavior change должно вернуться к
Proposal и Delta Specs до Design.
## Impact
Users должны видеть одно и то же поведение account page до и после этого
change. Frontend maintainers и AI agents получают более ясное local rule о том,
где должна жить page logic, и исправленный account page example, которому можно
следовать.
Affected implementation area — frontend page structure и frontend-local
architecture documentation. Specs отслеживает этот SDD lifecycle. Backend и
отдельный as-built docs repository не должны меняться.