docs: record account-ledger-explicit-filters evidence

This commit is contained in:
2026-08-27 14:57:33 +03:00
parent 820cf55103
commit 2bc56db680
+66
View File
@@ -661,3 +661,69 @@ accent-цвет ссылок — восстановлен через `[data-dept
подтвердил неизменность routing/chain-логики, сохранение `<nav>`/`aria-label`/ подтвердил неизменность routing/chain-логики, сохранение `<nav>`/`aria-label`/
`data-depth`, адаптивного скрытия промежуточных крошек и отсутствие остаточных `data-depth`, адаптивного скрытия промежуточных крошек и отсутствие остаточных
`breadcrumbs-*` ссылок во `frontend/src`. `breadcrumbs-*` ссылок во `frontend/src`.
## 2026-08-27-account-ledger-explicit-filters
**Change:** account-ledger-explicit-filters (schema `wealth-ledger-sdd`)
**Archive path:** `specs/openspec/changes/archive/2026-08-27-account-ledger-explicit-filters`
**Specs sync:** в main spec `brokerage-account-ledger` добавлен Requirement
`User can explicitly apply ledger filters` с четырьмя scenarios: черновик не
делает запрос до `Применить`, `Применить` коммитит draft и сбрасывает cursor,
`Сбросить` очищает фильтр и пагинацию, пагинация остаётся привязанной к
последнему применённому фильтру.
### Delivery Map
| Area | Status | Outcome |
| --- | --- | --- |
| frontend | affected | Страница `account-operations` переведена на draft/applied семантику фильтров: два `DateInput` c `DD.MM.YYYY`, `min/max` и русской локалью через `DatesProvider`; категории собраны в `MultiSelect` с placeholder `Выберите категории`; кнопки `Применить`/`Сбросить` управляют применённым состоянием; `Сбросить` дополнительно инвалидирует unfiltered query key, чтобы React Query не подменял обязательный повторный запрос свежим cache hit; добавлены risk-based тесты для сценариев «черновик без запроса» и «reset перезапрашивает без categories» |
| backend | N/A | API `/api/v1/brokerage-accounts/{accountId}/operations`, query params `from`/`to`/`categories`/`cursor`/`limit`, серверный дефолт периода и cache identity не менялись |
| specs | affected | Approved Proposal, Design, Tasks и delta spec заархивированы; Requirement синхронизирован в main spec `brokerage-account-ledger` |
| docs | affected | `features/brokerage-account-ledger.md` описывает staged draft/applied поведение, явные `Применить`/`Сбросить` и пагинацию по последнему применённому фильтру |
### Delivery commits
| Repo | Commit | Subject |
| --- | --- | --- |
| frontend | `7d748a65d384e76220e234aa37a21b05b81e442a` | feat(account-operations): require explicit ledger filters |
| specs (archive) | `69d4e63a5110f744a2428dd9d40525bf025a2db8` | docs(specs): archive account-ledger-explicit-filters |
| docs (as-built) | `820cf5510318e0868eba46a6ff0b556053cb9806` | docs(brokerage-account-ledger): describe explicit filters |
| docs (evidence) | current evidence commit | docs: record explicit ledger filters evidence |
### Verification
| Command (repo) | Наблюдённый результат |
| --- | --- |
| `source ~/.nvm/nvm.sh && nvm use 22 >/dev/null && node -v && npm run verify` (frontend) | pass; Node `v22.21.0`, canonical gate прошёл: strict TypeScript, Biome, coverage (`21` files / `79` tests), Knip, dependency-cruiser и production build без ошибок |
| `npm ci` (frontend) | pass; lockfile не изменился, install завершён |
| `npm run verify` (docs) | pass; markdownlint `38` files, `0` issues, `git diff --check` clean |
| `openspec validate account-ledger-explicit-filters --type change --strict --store wealth-ledger-specs` (specs, pre-archive) | pass; change valid |
| `openspec archive account-ledger-explicit-filters --yes --store wealth-ledger-specs` (specs) | pass; Task status `✓ Complete`, main spec `brokerage-account-ledger` обновлён, change archived as `2026-08-27-account-ledger-explicit-filters` |
| `openspec validate --specs --strict --store wealth-ledger-specs` (specs, pre/post-archive) | pass; `20 passed, 0 failed` |
| `git diff --check` (frontend/docs/specs) | pass |
| `openspec validate --archived --strict --store wealth-ledger-specs` (specs, post-archive) | external failure; `39 passed, 1 failed` because unrelated archived change `2026-08-27-consume-mantine-components` still has `1 incomplete task`; `2026-08-27-account-ledger-explicit-filters` itself passed archived validation |
Environment note: during `npm ci` the default shell used Node `v26.7.0` and
printed an `EBADENGINE` warning, поэтому canonical frontend gate был повторно
запущен под `nvm use 22` и именно этот результат считается verification
evidence. В `specs` рабочее дерево после archive остаётся с незафиксированным
соседним change `add-session-oriented-sdd-skills`; он не входит в delivery
этой фичи и не включался в archive commit.
Все Tasks были отмечены completed до archive. Semantic verification подтвердила
утверждённые Proposal, Design и delta scenarios: черновик фильтров не меняет
видимый ledger и не делает новый запрос до `Применить`; `Применить` коммитит
draft и сбрасывает cursor; `Сбросить` очищает draft/applied state и принуждает
повторный unfiltered fetch; кнопки пагинации продолжают работать по последнему
применённому фильтру; backend contract и server default period не меняются.
### Independent read-only review
Verdict: **PASS**. Critical findings — `0`, Important findings — `0`, Minor
findings — `0`. Проверка diff и post-archive состояния подтвердила, что
изменение локализовано во frontend/docs/specs, не меняет backend/API contract,
не затрагивает денежные вычисления, auth, data integrity или security, не
вводит лишних зависимостей сверх `@mantine/dates` и `dayjs`, а дополнительная
invalidate-on-reset логика закрывает реальный cache edge case вместо тестового
костыля. Residual blocker относится не к этой фиче, а к чужому archived change
`consume-mantine-components`.