Reproduce in PostgreSQL: hold a conflicting packet_work_orders row lock in a separate transaction for over five seconds while the apply reaches one of these updates. The lock error escapes and rolls back the entire apply, including unrelated packet/project/close changes. Change-order approval is one possible lock holder; its real duration was not measured.
Acceptance criteria:
Isolate these operations with suitable savepoints or lock-skipping behavior.
Count/report busy work rather than discard unrelated updates.
Keep work-order counters, flags and observed statuses internally consistent when skipping.
Add deterministic two-connection tests for each affected path and verify a later run catches up.
Validation: static control-flow inspection; no timed DB reproduction. Source: Grok.
Reviewed revision: 18333600b55b70971877c1a0c72d1d61b6ce9c69. Raised from the November 2026 independent project reviews and parent verification. No production system was tested.
Priority: medium.
The feed applies a transaction-wide five-second lock timeout ([server/packetstation/feed/apply.py:662](https://gt.pescoinc.biz/spencerm/PacketStation/src/commit/18333600b55b70971877c1a0c72d1d61b6ce9c69/server/packetstation/feed/apply.py#L662)), but work-order updates in _wo_gone, _wo_back and _observe sit outside run.guarded savepoints: [server/packetstation/feed/apply.py:953](https://gt.pescoinc.biz/spencerm/PacketStation/src/commit/18333600b55b70971877c1a0c72d1d61b6ce9c69/server/packetstation/feed/apply.py#L953), [server/packetstation/feed/apply.py:995](https://gt.pescoinc.biz/spencerm/PacketStation/src/commit/18333600b55b70971877c1a0c72d1d61b6ce9c69/server/packetstation/feed/apply.py#L995), [server/packetstation/feed/apply.py:1060](https://gt.pescoinc.biz/spencerm/PacketStation/src/commit/18333600b55b70971877c1a0c72d1d61b6ce9c69/server/packetstation/feed/apply.py#L1060).
Reproduce in PostgreSQL: hold a conflicting packet_work_orders row lock in a separate transaction for over five seconds while the apply reaches one of these updates. The lock error escapes and rolls back the entire apply, including unrelated packet/project/close changes. Change-order approval is one possible lock holder; its real duration was not measured.
Acceptance criteria:
- Isolate these operations with suitable savepoints or lock-skipping behavior.
- Count/report busy work rather than discard unrelated updates.
- Keep work-order counters, flags and observed statuses internally consistent when skipping.
- Add deterministic two-connection tests for each affected path and verify a later run catches up.
Validation: static control-flow inspection; no timed DB reproduction. Source: Grok.
Reviewed revision: `18333600b55b70971877c1a0c72d1d61b6ce9c69`. Raised from the November 2026 independent project reviews and parent verification. No production system was tested.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Priority: medium.
The feed applies a transaction-wide five-second lock timeout (server/packetstation/feed/apply.py:662), but work-order updates in _wo_gone, _wo_back and _observe sit outside run.guarded savepoints: server/packetstation/feed/apply.py:953, server/packetstation/feed/apply.py:995, server/packetstation/feed/apply.py:1060.
Reproduce in PostgreSQL: hold a conflicting packet_work_orders row lock in a separate transaction for over five seconds while the apply reaches one of these updates. The lock error escapes and rolls back the entire apply, including unrelated packet/project/close changes. Change-order approval is one possible lock holder; its real duration was not measured.
Acceptance criteria:
Validation: static control-flow inspection; no timed DB reproduction. Source: Grok.
Reviewed revision:
18333600b55b70971877c1a0c72d1d61b6ce9c69. Raised from the November 2026 independent project reviews and parent verification. No production system was tested.