docs: record backend strict typing completion
Record delivery commit 346a6f0, assertion restrictions, DTO validation, verification results, and the initial SQLite timeouts followed by successful baseline and retry runs.
This commit is contained in:
@@ -227,7 +227,7 @@ authority.
|
|||||||
| WL-P2-03 | Сделать refresh rotation атомарной. | backend, specs, docs | done | [`2026-08-23-harden-auth-and-cache-concurrency`](../../specs/openspec/changes/archive/2026-08-23-harden-auth-and-cache-concurrency/) | — | 2026-08-23; backend `c77b3cf`, specs `6e20cdf`, docs `8568e7b`; CAS one-winner regression test passed. |
|
| WL-P2-03 | Сделать refresh rotation атомарной. | backend, specs, docs | done | [`2026-08-23-harden-auth-and-cache-concurrency`](../../specs/openspec/changes/archive/2026-08-23-harden-auth-and-cache-concurrency/) | — | 2026-08-23; backend `c77b3cf`, specs `6e20cdf`, docs `8568e7b`; CAS one-winner regression test passed. |
|
||||||
| WL-P2-04 | Синхронизировать runtime, OpenAPI и auth success statuses. | backend, frontend | done | [`2026-08-24-align-api-contract-and-client-resilience`](../../specs/openspec/changes/archive/2026-08-24-align-api-contract-and-client-resilience/) | — | 2026-08-24; backend `9bd3400`, frontend `6d892da`, specs `800450d`, docs `b91280c`; metadata regression, frontend OpenAPI check и runtime/snapshot SHA совпали. |
|
| WL-P2-04 | Синхронизировать runtime, OpenAPI и auth success statuses. | backend, frontend | done | [`2026-08-24-align-api-contract-and-client-resilience`](../../specs/openspec/changes/archive/2026-08-24-align-api-contract-and-client-resilience/) | — | 2026-08-24; backend `9bd3400`, frontend `6d892da`, specs `800450d`, docs `b91280c`; metadata regression, frontend OpenAPI check и runtime/snapshot SHA совпали. |
|
||||||
| WL-P2-05 | Восстановить runnable backend e2e gate. | backend | deferred | — | Пересмотреть после следующей stable Prisma: три чистых `migrate deploy` на Node 22 должны пройти подряд. | 2026-08-23; Prisma 7.9.1 на Node 22 воспроизводимо возвращает пустой schema-engine error даже для fresh SQLite DB; published latest также 7.9.1. |
|
| WL-P2-05 | Восстановить runnable backend e2e gate. | backend | deferred | — | Пересмотреть после следующей stable Prisma: три чистых `migrate deploy` на Node 22 должны пройти подряд. | 2026-08-23; Prisma 7.9.1 на Node 22 воспроизводимо возвращает пустой schema-engine error даже для fresh SQLite DB; published latest также 7.9.1. |
|
||||||
| WL-P2-06 | Добавить проходящий app/test TypeScript gate backend. | backend | done | [`2026-08-23-make-local-verification-agent-safe`](../../specs/openspec/changes/archive/2026-08-23-make-local-verification-agent-safe/) | — | 2026-08-23; backend `71d57d6`, specs `72444db`, docs `293df9c`; `npm run typecheck:app` и `npm run typecheck:test` — passed. |
|
| WL-P2-06 | Добавить проходящий app/test TypeScript gate backend. | backend | done | [`2026-08-23-make-local-verification-agent-safe`](../../specs/openspec/changes/archive/2026-08-23-make-local-verification-agent-safe/) | — | 2026-08-23; backend `71d57d6`, specs `72444db`, docs `293df9c`; `npm run typecheck:app` и `npm run typecheck:test` — passed. [2026-09-13: включён strict по P1-10](#2026-09-13--wl-p2-06-strict-typescript). |
|
||||||
| WL-P2-07 | Сохранять cached data во время background refetch. | frontend | done | [`2026-08-24-align-api-contract-and-client-resilience`](../../specs/openspec/changes/archive/2026-08-24-align-api-contract-and-client-resilience/) | — | 2026-08-24; frontend `6d892da`, specs `800450d`, docs `b91280c`; observable Accounts/Portfolio refetch tests и `npm run verify` — passed (17 files, 55 tests). |
|
| WL-P2-07 | Сохранять cached data во время background refetch. | frontend | done | [`2026-08-24-align-api-contract-and-client-resilience`](../../specs/openspec/changes/archive/2026-08-24-align-api-contract-and-client-resilience/) | — | 2026-08-24; frontend `6d892da`, specs `800450d`, docs `b91280c`; observable Accounts/Portfolio refetch tests и `npm run verify` — passed (17 files, 55 tests). |
|
||||||
| WL-P2-08 | Нормализовать cold-start refresh failure. | frontend | done | [`2026-08-24-align-api-contract-and-client-resilience`](../../specs/openspec/changes/archive/2026-08-24-align-api-contract-and-client-resilience/) | — | 2026-08-24; frontend `6d892da`, specs `800450d`, docs `b91280c`; cold-start и protected-401 transport-failure tests passed. |
|
| WL-P2-08 | Нормализовать cold-start refresh failure. | frontend | done | [`2026-08-24-align-api-contract-and-client-resilience`](../../specs/openspec/changes/archive/2026-08-24-align-api-contract-and-client-resilience/) | — | 2026-08-24; frontend `6d892da`, specs `800450d`, docs `b91280c`; cold-start и protected-401 transport-failure tests passed. |
|
||||||
| WL-P2-09 | Проверять backend runtime OpenAPI против frontend snapshot. | backend, frontend | done | [`2026-08-23-make-local-verification-agent-safe`](../../specs/openspec/changes/archive/2026-08-23-make-local-verification-agent-safe/) | — | 2026-08-23; frontend `7a3048c`, backend `71d57d6`, specs `72444db`, docs `293df9c`; runtime и snapshot SHA-256 совпали, frontend `npm run openapi:check` — passed. |
|
| WL-P2-09 | Проверять backend runtime OpenAPI против frontend snapshot. | backend, frontend | done | [`2026-08-23-make-local-verification-agent-safe`](../../specs/openspec/changes/archive/2026-08-23-make-local-verification-agent-safe/) | — | 2026-08-23; frontend `7a3048c`, backend `71d57d6`, specs `72444db`, docs `293df9c`; runtime и snapshot SHA-256 совпали, frontend `npm run openapi:check` — passed. |
|
||||||
@@ -253,6 +253,85 @@ authority.
|
|||||||
|
|
||||||
Terminal evidence добавляется сюда только после завершения соответствующего change.
|
Terminal evidence добавляется сюда только после завершения соответствующего change.
|
||||||
|
|
||||||
|
### 2026-09-13 — WL-P2-06: strict TypeScript
|
||||||
|
|
||||||
|
Поставка backend: commit `346a6f0` (`refactor: enforce strict backend typing`).
|
||||||
|
|
||||||
|
По продолжению P1-10 в [общем tsconfig](../../backend/tsconfig.json) включён
|
||||||
|
`strict: true` без отключения отдельных strict-проверок;
|
||||||
|
`noFallthroughCasesInSwitch` сохранён отдельно. Убраны избыточные настройки,
|
||||||
|
которые теперь включает `strict`.
|
||||||
|
|
||||||
|
После замечания владельца вариант с definite-assignment `!` заменён:
|
||||||
|
в 14 файлах 315 полей DTO объявлены через `declare`. Заполнение входных DTO
|
||||||
|
принадлежит Nest/class-transformer, ответные DTO описывают возвращаемые объекты.
|
||||||
|
`declare` не генерирует поля со значением `undefined` и не подменяет проверку
|
||||||
|
входных данных. Optional/nullable-типы, декораторы и валидация сохранены.
|
||||||
|
В [TbankClient](../../backend/src/tbank/tbank.client.ts)
|
||||||
|
`getOpenAccounts` и `getDividends` задают тип результата на `call<Response>`,
|
||||||
|
как соседние RPC; тип параметра `.then` выводится из этого результата.
|
||||||
|
|
||||||
|
В [ESLint](../../backend/eslint.config.mjs) включён
|
||||||
|
`@typescript-eslint/no-non-null-assertion: error`. Он не охватывает `field!: Type`,
|
||||||
|
поэтому `no-restricted-syntax` отдельно запрещает definite-assignment `!`
|
||||||
|
в свойствах и переменных. Устранены также 51 прежний non-null assertion и
|
||||||
|
четыре definite-assignment assertions в тестах: используются сужение типов,
|
||||||
|
локальные значения, типизированные результаты фильтрации и runtime assertions
|
||||||
|
в тестах. Транзакции, проверки доступа, cache generation и денежная точность
|
||||||
|
сохранены; отсутствующая категория в сводке приводит к явной внутренней ошибке.
|
||||||
|
|
||||||
|
Проверено на Node 22.21.0, backend `3cf883e` с указанными изменениями:
|
||||||
|
|
||||||
|
- `npm run verify` — passed: lint без warnings, strict app/test typechecks,
|
||||||
|
35 Jest suites / 257 tests, Prisma generation и production build.
|
||||||
|
- `DATABASE_URL=file:/tmp/wealthledger-declared-dto-openapi-20260913.db npm run test:openapi-contract`
|
||||||
|
— passed, 1 test; frontend snapshot не менялся.
|
||||||
|
- TypeScript Compiler API подтвердил все strict options в app/test/build/dev
|
||||||
|
configs. Каждый config отклоняет шесть примеров: неинициализированное поле,
|
||||||
|
несовместимый callback, `null` вместо строки, implicit `any`/`this`, доступ
|
||||||
|
к `unknown` в `catch` (TS2564, TS2345, TS2322, TS7006, TS2683, TS18046).
|
||||||
|
- Проверка ESLint через `lintText` подтверждает ошибки для `value!`, `field!`
|
||||||
|
и `let value!`; декларация DTO без `!` разрешена.
|
||||||
|
- Новые тесты ValidationPipe проходят до и после замены деклараций:
|
||||||
|
обязательные credentials, нормализация email, вложенные money DTO и
|
||||||
|
обязательный version с optional-полями `PartialType`. Дополнены проверки
|
||||||
|
инструментов без UID; отдельный тест проверяет имя категории и ошибку
|
||||||
|
при нарушенной ссылке в банковской сводке.
|
||||||
|
- `NODE_ENV=development NODE_OPTIONS=--experimental-vm-modules npx jest --config test/jest-e2e.json --runInBand bank-cards.e2e-spec.ts`
|
||||||
|
с новой `DATABASE_URL=file:/tmp/bank-cards-*/test.db` — passed, 21 tests,
|
||||||
|
включая реальные миграции, валидацию HTTP, права владельца, возвраты,
|
||||||
|
транзакции и перезапуск. Runner использует `RUST_LOG=info` для миграций.
|
||||||
|
Первый прогон дал 19 passed / 2 timeout в сценариях возвратов и потребовал
|
||||||
|
остановки оставшегося Jest-процесса. Повтор на новой базе прошёл 21/21;
|
||||||
|
исходный `3cf883e` в отдельной копии с теми же dependencies также прошёл
|
||||||
|
21/21. Это не доказательство стабильности общего e2e gate.
|
||||||
|
- Полный `strict` проходит; 317 diagnostics из предыдущей оценки устранены.
|
||||||
|
Общий DB/e2e gate и ограничение WL-P2-05 остаются отдельной задачей.
|
||||||
|
|
||||||
|
### 2026-09-13 — WL-P2-06: backend TypeScript
|
||||||
|
|
||||||
|
Выполнен пункт P1-10 списка инженерных улучшений от 13.09.2026
|
||||||
|
как продолжение существующего TypeScript gate. В [общем tsconfig](../../backend/tsconfig.json)
|
||||||
|
включены `noImplicitAny`, `strictBindCallApply`, `noFallthroughCasesInSwitch`;
|
||||||
|
app/test typechecks, production и dev build наследуют эти настройки.
|
||||||
|
Исходный код, зависимости, unsafe-checks и публичный API не менялись.
|
||||||
|
|
||||||
|
Проверено на Node 22.21.0, backend `3cf883e` с указанным изменением tsconfig:
|
||||||
|
|
||||||
|
- `npm run verify` до и после изменения — passed: zero-warning ESLint,
|
||||||
|
оба TypeScript gate, 33 Jest suites / 253 tests, Prisma generation и build.
|
||||||
|
- Проверка через TypeScript Compiler API с виртуальным ошибочным файлом для
|
||||||
|
каждого из четырёх configs — passed: implicit-any параметр даёт TS7006,
|
||||||
|
неверные аргументы `call`/`apply`/`bind` — TS2345/TS2322, проваливание `switch`
|
||||||
|
— TS7029. Контроль с выключенными тремя flags принимает тот же файл.
|
||||||
|
- `DATABASE_URL=file:/tmp/wealthledger-p1-10-openapi-20260913.db npm run test:openapi-contract`
|
||||||
|
— passed, 1 test; runtime OpenAPI совпал с frontend snapshot.
|
||||||
|
- `npx tsc --project tsconfig.typecheck.test.json --incremental false --strict --noImplicitAny --strictBindCallApply --noFallthroughCasesInSwitch --pretty false`
|
||||||
|
— оценка полного `strict`: 317 diagnostics, из них 315 TS2564 для полей DTO
|
||||||
|
и две TS2345 в `TbankClient.getOpenAccounts` / `getDividends` из-за callback
|
||||||
|
для `Promise<unknown>`. Полный `strict` пока не включён; это отдельный этап.
|
||||||
|
- Общий DB/e2e gate не запускался; WL-P2-05 сохраняет прежний статус.
|
||||||
|
|
||||||
### 2026-08-26 — SDD26-01–SDD26-03, SDD26-09, SDD26-12, SDD26-17, SDD26-21, SDD26-28–SDD26-30: done
|
### 2026-08-26 — SDD26-01–SDD26-03, SDD26-09, SDD26-12, SDD26-17, SDD26-21, SDD26-28–SDD26-30: done
|
||||||
|
|
||||||
Change синхронизирован в canonical specs и архивирован в [`2026-08-26-harden-openspec-sdd-quality`](../../specs/openspec/changes/archive/2026-08-26-harden-openspec-sdd-quality/).
|
Change синхронизирован в canonical specs и архивирован в [`2026-08-26-harden-openspec-sdd-quality`](../../specs/openspec/changes/archive/2026-08-26-harden-openspec-sdd-quality/).
|
||||||
|
|||||||
Reference in New Issue
Block a user