Files

70 lines
4.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 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 не должны меняться.