Lock-poisoning tolerance is scattered across 5 crates and 12+ sites with inconsistent behavior — some log (orchestrator.rs:452 documents its unwrap_or_else(PoisonError::into_inner)), some are fully silent. Worst case: agent-core/src/hook_runtime.rs (~161, also 149/194/288) does hooks.read().ok() — after a panic while holding the lock, every button binding silently stops working for the life of the agent.
Options, in preference order:
parking_lot (no poisoning semantics, already in the dependency graph via gpui) — also lighter in the hook's hot path. Watch the gpui/gpui-component lock pins when adding the direct dependency.
- A single shared helper encoding one policy (
PoisonError::into_inner + one warn), replacing all ad-hoc sites.
Surfaced by the standards audit behind #381.
Lock-poisoning tolerance is scattered across 5 crates and 12+ sites with inconsistent behavior — some log (
orchestrator.rs:452documents itsunwrap_or_else(PoisonError::into_inner)), some are fully silent. Worst case:agent-core/src/hook_runtime.rs(~161, also 149/194/288) doeshooks.read().ok()— after a panic while holding the lock, every button binding silently stops working for the life of the agent.Options, in preference order:
parking_lot(no poisoning semantics, already in the dependency graph via gpui) — also lighter in the hook's hot path. Watch the gpui/gpui-component lock pins when adding the direct dependency.PoisonError::into_inner+ one warn), replacing all ad-hoc sites.Surfaced by the standards audit behind #381.