src/queue/processors.ts ~2447-2450: if (!actuationLock.acquired) return; — the pass returns, the job completes "successfully", and nothing re-queues the disposition. No audit event records that a planned action was abandoned.
Contrast review-evasion.ts ~80-82, which throws the retryable PrActuationLockContendedError (5s backoff) for the same condition. The class exists precisely for this.
This is a silent amplifier for every restart incident: after a kill, the recovered job re-runs, republishes a no-op surface, then hits its own dead predecessor's orphaned actuation lock here and returns — so the disposition is lost a second time, now with no trace at all.
Fix
Throw PrActuationLockContendedError here too (or at minimum audit the abandonment and enqueue a trailing agent-regate-pr).
Refs #9003, #9007, #9021.
src/queue/processors.ts~2447-2450:if (!actuationLock.acquired) return;— the pass returns, the job completes "successfully", and nothing re-queues the disposition. No audit event records that a planned action was abandoned.Contrast
review-evasion.ts~80-82, which throws the retryablePrActuationLockContendedError(5s backoff) for the same condition. The class exists precisely for this.This is a silent amplifier for every restart incident: after a kill, the recovered job re-runs, republishes a no-op surface, then hits its own dead predecessor's orphaned actuation lock here and returns — so the disposition is lost a second time, now with no trace at all.
Fix
Throw
PrActuationLockContendedErrorhere too (or at minimum audit the abandonment and enqueue a trailingagent-regate-pr).Refs #9003, #9007, #9021.