Files
specs/openspec/changes/archive/2026-08-25-codify-frontend-view-model-boundary/proposal.md
T

4.2 KiB
Raw Blame History

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 не должны меняться.