В первом полном npm run test:e2e suite test/portfolio-structure.e2e-spec.ts упал в beforeEach (PUT /api/v1/tbank-connection с Bearer <token> вернул 401 вместо 200). В повторном полном прогоне и при отдельных запусках (3 раза) прошёл. Деталей 401 в логе нет.
Что известно
Токен подписывается при загрузке модуля: new JwtService().sign({ sub, type: 'access' }, { secret: process.env.JWT_SECRET }).
setupFiles (test/e2e-env.cjs) задаёт JWT_SECRET до каждого файла, поэтому отсутствие секрета маловероятно.
Стратегия требует algorithms: ['HS256'], type: 'access', существующий sub (пользователь создаётся в beforeAll).
Что сделать
Воспроизвести: многократно гнать полный test:e2e и зафиксировать частоту.
Найти источник недетерминизма (порядок suites, общее состояние, время) и устранить.
Критерии готовности
Причина установлена и записана.
N последовательных полных прогонов без 401 (N указать в закрытии).
## Наблюдение
В первом полном `npm run test:e2e` suite `test/portfolio-structure.e2e-spec.ts` упал в `beforeEach` (PUT `/api/v1/tbank-connection` с `Bearer <token>` вернул 401 вместо 200). В повторном полном прогоне и при отдельных запусках (3 раза) прошёл. Деталей 401 в логе нет.
## Что известно
- Токен подписывается при загрузке модуля: `new JwtService().sign({ sub, type: 'access' }, { secret: process.env.JWT_SECRET })`.
- `setupFiles` (`test/e2e-env.cjs`) задаёт `JWT_SECRET` до каждого файла, поэтому отсутствие секрета маловероятно.
- Стратегия требует `algorithms: ['HS256']`, `type: 'access'`, существующий `sub` (пользователь создаётся в `beforeAll`).
## Что сделать
1. Воспроизвести: многократно гнать полный `test:e2e` и зафиксировать частоту.
2. Логировать причину 401 (JsonWebTokenError / TokenExpired / пользователь) в падающем прогоне.
3. Найти источник недетерминизма (порядок suites, общее состояние, время) и устранить.
## Критерии готовности
- Причина установлена и записана.
- N последовательных полных прогонов без 401 (N указать в закрытии).
Закрыто как неактуальное: флейк не воспроизведён, причина не установлена.
Проверка на develop (Node 24.21.0):
Полные npm run test:e2e прошли 19 раз подряд без падений: 1 базовый, 6 подряд и 12 подряд с временным логированием причины 401 в JwtAuthGuard.handleRequest.
В этих логах для portfolio-structure 401 не было ни разу. Были только ожидаемые 401 No auth token из негативных тестов других suites.
Дополнительно 24 параллельных запуска portfolio-structure по 8 одновременно, с очищенным кешем ts-jest и при нагрузке на CPU: 0 падений.
Кодом отброшены варианты: JWT_SECRET (задаётся в setupFiles), срок жизни токена, общее состояние (у каждого suite своя временная БД).
Диагностический код откатен, изменений в репозитории нет. Критерий «причина установлена» не выполнен, закрываем по решению владельца. Если флейк повторится, нужен лог упавшего прогона с причиной 401, тогда issue можно переоткрыть.
Закрыто как неактуальное: флейк не воспроизведён, причина не установлена.
Проверка на `develop` (Node 24.21.0):
- Полные `npm run test:e2e` прошли 19 раз подряд без падений: 1 базовый, 6 подряд и 12 подряд с временным логированием причины 401 в `JwtAuthGuard.handleRequest`.
- В этих логах для `portfolio-structure` 401 не было ни разу. Были только ожидаемые 401 `No auth token` из негативных тестов других suites.
- Дополнительно 24 параллельных запуска `portfolio-structure` по 8 одновременно, с очищенным кешем ts-jest и при нагрузке на CPU: 0 падений.
- Кодом отброшены варианты: `JWT_SECRET` (задаётся в `setupFiles`), срок жизни токена, общее состояние (у каждого suite своя временная БД).
Диагностический код откатен, изменений в репозитории нет. Критерий «причина установлена» не выполнен, закрываем по решению владельца. Если флейк повторится, нужен лог упавшего прогона с причиной 401, тогда 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.
Наблюдение
В первом полном
npm run test:e2esuitetest/portfolio-structure.e2e-spec.tsупал вbeforeEach(PUT/api/v1/tbank-connectionсBearer <token>вернул 401 вместо 200). В повторном полном прогоне и при отдельных запусках (3 раза) прошёл. Деталей 401 в логе нет.Что известно
new JwtService().sign({ sub, type: 'access' }, { secret: process.env.JWT_SECRET }).setupFiles(test/e2e-env.cjs) задаётJWT_SECRETдо каждого файла, поэтому отсутствие секрета маловероятно.algorithms: ['HS256'],type: 'access', существующийsub(пользователь создаётся вbeforeAll).Что сделать
test:e2eи зафиксировать частоту.Критерии готовности
Закрыто как неактуальное: флейк не воспроизведён, причина не установлена.
Проверка на
develop(Node 24.21.0):npm run test:e2eпрошли 19 раз подряд без падений: 1 базовый, 6 подряд и 12 подряд с временным логированием причины 401 вJwtAuthGuard.handleRequest.portfolio-structure401 не было ни разу. Были только ожидаемые 401No auth tokenиз негативных тестов других suites.portfolio-structureпо 8 одновременно, с очищенным кешем ts-jest и при нагрузке на CPU: 0 падений.JWT_SECRET(задаётся вsetupFiles), срок жизни токена, общее состояние (у каждого suite своя временная БД).Диагностический код откатен, изменений в репозитории нет. Критерий «причина установлена» не выполнен, закрываем по решению владельца. Если флейк повторится, нужен лог упавшего прогона с причиной 401, тогда issue можно переоткрыть.