docs(specs): archive frontend view model boundary change
This commit is contained in:
@@ -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 не должны меняться.
|
||||
Reference in New Issue
Block a user