You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
fix(people): keep synchronous governed reads off the ASGI event loop #320
The governed PostgreSQL read port is synchronous DB-API work (connection/cursor/execute/fetch). Running that service call on the ASGI event-loop thread can stall unrelated concurrent requests while database I/O blocks. The same defect was independently exposed in Position-history #154 and Employment-history #155; this issue owns the canonical People root repair rather than copying leaf fixes upstream.
Required RED -> GREEN
Add an owner-level HTTP regression that records the protected People read-port thread and requires it to differ from the ASGI event-loop thread.
The predecessor exact source must fail that contract because the service call executes directly in the coroutine.
Apply the minimum causal repair at fix(people): harden governed People reads #55: keep the synchronous application/persistence contract but offload the complete read_worker_people_record(...) call through an async worker boundary such as asyncio.to_thread(...).
Preserve current 403/404/409/500 exception mapping and purpose-bound authorization semantics; worker exceptions must propagate through the await boundary.
Do not open a long-running PostgreSQL transaction around authentication or unrelated work. The existing short read transaction remains owned by the PostgreSQL port.
After fix(people): harden governed People reads #55 moves, descendants must ordinary non-force adopt the canonical owner delta. No force push, destructive rebase, mutable source copy, predecessor-GREEN transfer, or gate weakening.
Keep open until the owner repair reaches protected truth with exact-head Foundation/security/review evidence.
Owner repair is now on #55. Test-first e1b23b2ad08cb4a1c53adbf1002d6204f37871cc adds the regression requiring the governed read port to run off the ASGI event-loop thread. Causal source d9803ae86fbc63bb41197c55d071dbba033361e8 awaits asyncio.to_thread(read_worker_people_record, ...) and preserves existing exception mapping/short PostgreSQL transaction ownership. The test-only hosted runs were cancelled when superseded; current exact-head Foundation 34822030870, CodeQL 34822030874, Security 34822030884, and SAST 34822030815 are newly queued, so no hosted GREEN is claimed. Employment descendants ordinary non-force adopted the owner delta (#149afafd9b... → #15528a0993... → #156b0c8dcf...). Keep issue open until protected integration.
Activity
seonghobae commentedon Sep 14, 2026
Owner repair is now on #55. Test-first
e1b23b2ad08cb4a1c53adbf1002d6204f37871ccadds the regression requiring the governed read port to run off the ASGI event-loop thread. Causal sourced9803ae86fbc63bb41197c55d071dbba033361e8awaitsasyncio.to_thread(read_worker_people_record, ...)and preserves existing exception mapping/short PostgreSQL transaction ownership. The test-only hosted runs were cancelled when superseded; current exact-head Foundation34822030870, CodeQL34822030874, Security34822030884, and SAST34822030815are newly queued, so no hosted GREEN is claimed. Employment descendants ordinary non-force adopted the owner delta (#149afafd9b...→ #15528a0993...→ #156b0c8dcf...). Keep issue open until protected integration.