70 lines
4.2 KiB
Markdown
70 lines
4.2 KiB
Markdown
## 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 не должны меняться.
|