docs: record account-ledger-explicit-filters evidence
This commit is contained in:
@@ -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`.
|
||||||
|
|||||||
Reference in New Issue
Block a user