diff --git a/docs/adr/20261027T184038082Z-supervise-module-lifecycle-and-managed-workers-within-one-shutdown-budget.md b/docs/adr/20261027T184038082Z-supervise-module-lifecycle-and-managed-workers-within-one-shutdown-budget.md index 11f0fff..15a90bf 100644 --- a/docs/adr/20261027T184038082Z-supervise-module-lifecycle-and-managed-workers-within-one-shutdown-budget.md +++ b/docs/adr/20261027T184038082Z-supervise-module-lifecycle-and-managed-workers-within-one-shutdown-budget.md @@ -2,7 +2,7 @@ title: "Supervise module lifecycle and managed workers within one shutdown budget" date: 2026-10-27 status: accepted -implementation: in-progress +implementation: implemented summary: Order module startup and reverse cleanup while supervising services and background workers under one bounded shutdown. tags: - lifecycle @@ -12,7 +12,8 @@ related: - /docs/adr/20261025T214616275Z-version-light-core-packages-in-the-root-module-and-nest-heavy-dependency-modules.md tracking: - https://gitea.auvem.com/corestack/go/issues/5 -implemented_by: [] +implemented_by: + - https://gitea.auvem.com/corestack/go/pulls/13 --- # Supervise module lifecycle and managed workers within one shutdown budget @@ -71,4 +72,4 @@ The accepted signatures have the following edge semantics: * One coordinator owns admission, cancellation, hook ordering and completion accounting. Applications must route background work through `Go` and supply cooperative callbacks to claim graceful whole-app completion; this is an explicit boundary, not automatic goroutine discovery. * The shutdown bound requires asynchronous hook invocation and synchronized worker admission/completion, even when a consumer has no background workers. A blocked hook can consume the entire budget and leave earlier modules without teardown; a second signal deliberately accepts that same incomplete cleanup sooner. * Delivery should remain approximately 300–500 production lines plus focused race tests, a two-service package Example and public/package docs, in one PR. Verify startup/reverse ordering, partial rollback, service and worker failure propagation, normal completion, cancellation/error classification (including a first signal during setup with successful partial cleanup and rollback returning nil, and an initiating setup failure remaining observable), admission races, teardown unblocking workers, a shared deadline (including an uncooperative hook), second signals and joined errors. Test with injected signals, release blocked test goroutines explicitly, and use no real process signals. -* No plan tier is needed. The decision is accepted and implementation is in progress; independent implementation review and publication remain pending. Reconcile delivery metadata against the latest target branch and actual PR evidence before final review/merge. +* No plan tier is needed. The accepted decision is implemented by [PR 13](https://gitea.auvem.com/corestack/go/pulls/13), including managed workers, bounded shutdown, focused race tests, the two-service example and public documentation. Independent standard and high implementation reviews are complete with no outstanding findings, and required local checks passed on the reviewed code. Publication is complete; CI and merge readiness are tracked in the PR. Delivery was reconciled against main at `46c4416ed44b4c8cfc69570b9bcb572b624d765e` plus the PR; this records implementation evidence, not a merge or release.