Skip to content

Queue lifecycle rejection diagnostics outside blocking I/O - #202

Merged
PLN merged 1 commit into
mainfrom
fix/nonblocking-transition-diagnostics
Sep 13, 2026
Merged

PLN merged 1 commit into
mainfrom
fix/nonblocking-transition-diagnostics

Conversation

@PLN

@PLN PLN commented Sep 13, 2026

Copy link
Copy Markdown
Owner

An illegal-transition diagnostic called the console logger while holding the lifecycle mutex, allowing a blocked output sink to stop independent decisions. Rejections now enqueue a bounded daemon/err record in the affected unit's journal, carrying its invocation and manager origin. Accepted state stays unchanged. The existing journal writer, capacity/loss counters and close ownership handle persistence; no new writer class is introduced.

Diagnostic text is capped at 4096 UTF-8 bytes, with truncation marked. One shared diagnostic group uses the normal invocation byte/record allowance. Journal origins publish as immutable atomic copies so diagnostic admission never waits for the storage mutex.

Validation: the blocked-console regression fails on the previous implementation and now permits snapshots, independent start/stop and manager close. Storage-stall pressure verifies bounded admission, loss reporting, immutable origin/invocation identity, UTF-8 truncation and persisted records. Twenty focused race repetitions, the full uncached race suite, vet and Windows/Linux staticcheck passed. Three combined repetitions passed after integration. Exact source 2d0f6f3dc45eff130fc23415d35c5d51d933b7e3 passed CI run 34765837025 and six cases ten times each under SYSTEM and a headless standard user, with no skips and full fixture cleanup. Both package binary hashes and source identity were verified in the retained qualification evidence. Broader daemon output and Windows event resources remain R5 work.

@PLN
PLN merged commit de0c901 into main Sep 13, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant