10 HTTP suites (app, bank-cards, bonds, stocks, all-accounts, tbank-connection, tbank-income-local, tbank-ledger-local, tbank-local-reads, tbank-read-baseline) переопределяют TbankHourlyScheduler заглушкой { tick: jest.fn() }, как уже делали upcoming-events, value-history, portfolio-structure. Минутный setInterval больше не запускает hourly walk в середине тестов. Ни один из этих suites не обращается к scheduler напрямую.
bank-cards: два кейса (renames default category, enforces actual FK) сами создают карту, чтобы засеять дефолтные категории; кейс preserves history ... across app restart сам переименовывает дефолтную категорию в «Остальное», а не полагается на предыдущий кейс.
Проверки
Каждый из 23 кейсов bank-cards запущен изолированно на свежей disposable SQLite-БД: до правок 3 падали (зависимость от порядка), после правок 23/23 зелёные.
bank-cards и tbank-local-reads отдельными прогонами: зелёные.
Изоляция по времени (minute boundary) доказана отключением таймера, а не измерением частоты флейков: частота не измерялась.
Полный отказ от общего состояния между кейсами (отдельная БД на каждый it) в scope issue не входит.
Closes #65
## Что изменено
- 10 HTTP suites (`app`, `bank-cards`, `bonds`, `stocks`, `all-accounts`, `tbank-connection`, `tbank-income-local`, `tbank-ledger-local`, `tbank-local-reads`, `tbank-read-baseline`) переопределяют `TbankHourlyScheduler` заглушкой `{ tick: jest.fn() }`, как уже делали `upcoming-events`, `value-history`, `portfolio-structure`. Минутный `setInterval` больше не запускает hourly walk в середине тестов. Ни один из этих suites не обращается к scheduler напрямую.
- `bank-cards`: два кейса (`renames default category`, `enforces actual FK`) сами создают карту, чтобы засеять дефолтные категории; кейс `preserves history ... across app restart` сам переименовывает дефолтную категорию в «Остальное», а не полагается на предыдущий кейс.
## Проверки
- Каждый из 23 кейсов `bank-cards` запущен изолированно на свежей disposable SQLite-БД: до правок 3 падали (зависимость от порядка), после правок 23/23 зелёные.
- `bank-cards` и `tbank-local-reads` отдельными прогонами: зелёные.
- `npm run verify`: 40 suites, 268 tests, lint, typecheck, сборка - зелёные.
- `npm run test:e2e`: 20/20 SQLite suites зелёные.
## Ограничения
- Изоляция по времени (minute boundary) доказана отключением таймера, а не измерением частоты флейков: частота не измерялась.
- Полный отказ от общего состояния между кейсами (отдельная БД на каждый `it`) в scope issue не входит.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Closes #65
Что изменено
app,bank-cards,bonds,stocks,all-accounts,tbank-connection,tbank-income-local,tbank-ledger-local,tbank-local-reads,tbank-read-baseline) переопределяютTbankHourlySchedulerзаглушкой{ tick: jest.fn() }, как уже делалиupcoming-events,value-history,portfolio-structure. МинутныйsetIntervalбольше не запускает hourly walk в середине тестов. Ни один из этих suites не обращается к scheduler напрямую.bank-cards: два кейса (renames default category,enforces actual FK) сами создают карту, чтобы засеять дефолтные категории; кейсpreserves history ... across app restartсам переименовывает дефолтную категорию в «Остальное», а не полагается на предыдущий кейс.Проверки
bank-cardsзапущен изолированно на свежей disposable SQLite-БД: до правок 3 падали (зависимость от порядка), после правок 23/23 зелёные.bank-cardsиtbank-local-readsотдельными прогонами: зелёные.npm run verify: 40 suites, 268 tests, lint, typecheck, сборка - зелёные.npm run test:e2e: 20/20 SQLite suites зелёные.Ограничения
it) в scope issue не входит.90a060a211to2c7362c3dd174a6c727eto3a9e3d5dc2