diff --git a/openspec/changes/stabilize-frontend-query-and-strict-contracts/.openspec.yaml b/openspec/changes/archive/2026-08-23-stabilize-frontend-query-and-strict-contracts/.openspec.yaml similarity index 100% rename from openspec/changes/stabilize-frontend-query-and-strict-contracts/.openspec.yaml rename to openspec/changes/archive/2026-08-23-stabilize-frontend-query-and-strict-contracts/.openspec.yaml diff --git a/openspec/changes/stabilize-frontend-query-and-strict-contracts/design.md b/openspec/changes/archive/2026-08-23-stabilize-frontend-query-and-strict-contracts/design.md similarity index 100% rename from openspec/changes/stabilize-frontend-query-and-strict-contracts/design.md rename to openspec/changes/archive/2026-08-23-stabilize-frontend-query-and-strict-contracts/design.md diff --git a/openspec/changes/stabilize-frontend-query-and-strict-contracts/proposal.md b/openspec/changes/archive/2026-08-23-stabilize-frontend-query-and-strict-contracts/proposal.md similarity index 100% rename from openspec/changes/stabilize-frontend-query-and-strict-contracts/proposal.md rename to openspec/changes/archive/2026-08-23-stabilize-frontend-query-and-strict-contracts/proposal.md diff --git a/openspec/changes/stabilize-frontend-query-and-strict-contracts/specs/frontend-query-coherence/spec.md b/openspec/changes/archive/2026-08-23-stabilize-frontend-query-and-strict-contracts/specs/frontend-query-coherence/spec.md similarity index 100% rename from openspec/changes/stabilize-frontend-query-and-strict-contracts/specs/frontend-query-coherence/spec.md rename to openspec/changes/archive/2026-08-23-stabilize-frontend-query-and-strict-contracts/specs/frontend-query-coherence/spec.md diff --git a/openspec/changes/stabilize-frontend-query-and-strict-contracts/specs/project-foundation/spec.md b/openspec/changes/archive/2026-08-23-stabilize-frontend-query-and-strict-contracts/specs/project-foundation/spec.md similarity index 100% rename from openspec/changes/stabilize-frontend-query-and-strict-contracts/specs/project-foundation/spec.md rename to openspec/changes/archive/2026-08-23-stabilize-frontend-query-and-strict-contracts/specs/project-foundation/spec.md diff --git a/openspec/changes/stabilize-frontend-query-and-strict-contracts/tasks.md b/openspec/changes/archive/2026-08-23-stabilize-frontend-query-and-strict-contracts/tasks.md similarity index 97% rename from openspec/changes/stabilize-frontend-query-and-strict-contracts/tasks.md rename to openspec/changes/archive/2026-08-23-stabilize-frontend-query-and-strict-contracts/tasks.md index 26792e4..156014e 100644 --- a/openspec/changes/stabilize-frontend-query-and-strict-contracts/tasks.md +++ b/openspec/changes/archive/2026-08-23-stabilize-frontend-query-and-strict-contracts/tasks.md @@ -19,4 +19,4 @@ ## 4. Completion evidence and audit tracking - [x] 4.1 Run `npm run verify` and `openspec validate stabilize-frontend-query-and-strict-contracts --type change --store wealth-ledger-specs`; record their exact successful results. -- [ ] 4.2 Update `docs/development/audit-remediation.md`: mark WL-P1-01 and WL-P1-02 done only after all implementation and verification tasks pass, include date, archive path, commits and exact non-mutating checks, then choose the next single recommended change. +- [x] 4.2 Update `docs/development/audit-remediation.md`: mark WL-P1-01 and WL-P1-02 done only after all implementation and verification tasks pass, include date, archive path, commits and exact non-mutating checks, then choose the next single recommended change. diff --git a/openspec/specs/frontend-query-coherence/spec.md b/openspec/specs/frontend-query-coherence/spec.md new file mode 100644 index 0000000..0669292 --- /dev/null +++ b/openspec/specs/frontend-query-coherence/spec.md @@ -0,0 +1,25 @@ +# frontend-query-coherence Specification + +## Purpose + +Гарантирует, что frontend читает, обновляет и инвалидирует один и тот же кэш API-данных после связанных пользовательских действий. + +## Requirements + +### Requirement: Frontend сохраняет когерентность кэша T-Bank connection +Frontend MUST использовать идентичность кэша, с которой загружается статус T-Bank connection, когда успешная замена или удаление connection обновляет этот статус. После каждого успешного создания, замены или удаления connection frontend MUST инвалидировать идентичность кэша списка Brokerage Accounts, с которой этот список загружается. + +#### Scenario: Успешная замена подключения обновляет status и accounts +- **WHEN** User успешно заменяет T-Bank connection в настройках +- **THEN** frontend показывает статус из успешного ответа и следующий потребитель списка Brokerage Accounts не использует данные, загруженные до замены connection + +#### Scenario: Успешное удаление подключения обновляет status и accounts +- **WHEN** User подтверждает успешное удаление T-Bank connection +- **THEN** frontend показывает состояние без подключения и следующий потребитель списка Brokerage Accounts не использует данные, загруженные до удаления connection + +### Requirement: Generated API queries сохраняют транспортную и cache identity +Frontend MUST сохранять сгенерированную API-клиентом идентичность для запросов Brokerage Accounts, операций Brokerage Account, событий Brokerage Account, Portfolio и T-Bank connection. Потребитель, которому требуется прочитать или инвалидировать один из этих кэшей вне hook, MUST получать его идентичность из владельца соответствующего query, а не формировать отдельный ключ. + +#### Scenario: Потребитель читает кэш списка счетов +- **WHEN** frontend определяет Brokerage Account для уже открытого account route +- **THEN** он читает тот же кэш списка Brokerage Accounts, который использует его query hook diff --git a/openspec/specs/project-foundation/spec.md b/openspec/specs/project-foundation/spec.md index e813480..5cdfca4 100644 --- a/openspec/specs/project-foundation/spec.md +++ b/openspec/specs/project-foundation/spec.md @@ -37,3 +37,10 @@ Backend SHALL публиковать HTTP API с префиксом `/api/v1`, #### Scenario: Запрос приходит с неразрешенного origin - **WHEN** браузер отправляет cross-origin запрос не с настроенного frontend origin - **THEN** backend не разрешает браузеру доступ к ответу через CORS + +### Requirement: Frontend typecheck строго проверяет application и tooling code +Frontend MUST включать TypeScript strict mode для application source и Vite tooling source. Команда локального frontend typecheck MUST завершаться с ошибкой при любом нарушении strict TypeScript и завершаться успешно для committed frontend code. + +#### Scenario: Agent проверяет frontend перед завершением задачи +- **WHEN** агент запускает documented frontend verification или его typecheck stage +- **THEN** проверка выполняет strict TypeScript compilation application и Vite tooling source и сообщает non-zero exit code при strict diagnostic