fix: bound hourly step awaits by the per-step wait limit (#56) #78

Merged
ksv741 merged 1 commits from fix/56-hourly-step-await-bound into develop 2026-10-12 22:25:28 +03:00
Owner

Summary

Follow-up к #77 по CRITICAL-замечанию ревью specs#33: deadline покрывал только waitWorks (durable-строки шагов), а ожидания membership.request/member.done, access.local, dispatch portfolio/operations/events.refresh и post-wait events.get могли зависнуть до barrier — попытка оставалась running бесконечно.

Changes

  • все await'ы walk до terminal barrier гоняются с WORK_WAIT_BOUND_MS (15 мин) через race (withBound); истечение трактуется как проблемная секция (как failed dispatch) либо как INTERRUPTED-закрытие для access.local
  • вызов не отменяется; поздняя durable-строка fenced по attemptId, как и любая поздняя публикация
  • 4 новых lifecycle-теста: зависшие portfolio/membership dispatch, member.done, post-wait events.get — попытка терминальна в ограниченное время

Linked Issue

Refs #56. Cross-repo: WealthLedger/specs#33 (review follow-up), WealthLedger/docs#37.

Verification

  • Команда / результат / ограничения: node test/sqlite.cjs tbank-hourly-lifecycle.e2e-spec.ts — 20/20; node test/sqlite.cjs --all — exit 0; npm run verify (lint, typecheck, unit, build) — exit 0. Ограничение: локальные Prisma-вызовы (recordHourlyChild/works/settleHourly) bound'ом не покрыты — при зависшем SQLite процесс мёртв в любом случае.

Breaking Changes (если есть)

Нет: HTTP contract не менялся.

## Summary Follow-up к #77 по CRITICAL-замечанию ревью specs#33: deadline покрывал только `waitWorks` (durable-строки шагов), а ожидания `membership.request`/`member.done`, `access.local`, dispatch `portfolio`/`operations`/`events.refresh` и post-wait `events.get` могли зависнуть до barrier — попытка оставалась `running` бесконечно. ## Changes - все await'ы walk до terminal barrier гоняются с `WORK_WAIT_BOUND_MS` (15 мин) через race (`withBound`); истечение трактуется как проблемная секция (как failed dispatch) либо как `INTERRUPTED`-закрытие для `access.local` - вызов не отменяется; поздняя durable-строка fenced по `attemptId`, как и любая поздняя публикация - 4 новых lifecycle-теста: зависшие portfolio/membership dispatch, `member.done`, post-wait `events.get` — попытка терминальна в ограниченное время ## Linked Issue Refs #56. Cross-repo: WealthLedger/specs#33 (review follow-up), WealthLedger/docs#37. ## Verification - Команда / результат / ограничения: `node test/sqlite.cjs tbank-hourly-lifecycle.e2e-spec.ts` — 20/20; `node test/sqlite.cjs --all` — exit 0; `npm run verify` (lint, typecheck, unit, build) — exit 0. Ограничение: локальные Prisma-вызовы (`recordHourlyChild`/`works`/`settleHourly`) bound'ом не покрыты — при зависшем SQLite процесс мёртв в любом случае. ## Breaking Changes (если есть) Нет: HTTP contract не менялся.
codex-bot added 1 commit 2026-10-12 22:18:17 +03:00
fix: bound hourly step awaits by the per-step wait limit (#56)
Backend verify / commits (pull_request) Successful in 32s
Backend verify / security (pull_request) Successful in 12s
Backend verify / verify (pull_request) Successful in 5m45s
52fa3a36ba
ksv741 merged commit 90486d4237 into develop 2026-10-12 22:25:28 +03:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: WealthLedger/backend#78