Apply runs inside the long-lived API process; restarts/self-kills risk stuck state and no timeout/kill policy.
Proposal
Introduce a systemd service (Type=oneshot) like pikit-update-runner that executes apply_version/apply and reports status via state file.
API enqueues apply requests and monitors state; runner handles downloads/extract/restart and exits.
Add timeout/restart settings and clearer logs.
Adjust state/lock handling to be runner-owned; API becomes controller/monitor only.
Acceptance
Killing the API mid-apply no longer leaves installs stuck; runner continues/cleans up.
Apply has a timeout and writes final state (success/failure).
Tests cover enqueue + runner execution and stuck-run recovery.
Problem
- Apply runs inside the long-lived API process; restarts/self-kills risk stuck state and no timeout/kill policy.
Proposal
- Introduce a systemd service (Type=oneshot) like pikit-update-runner that executes apply_version/apply and reports status via state file.
- API enqueues apply requests and monitors state; runner handles downloads/extract/restart and exits.
- Add timeout/restart settings and clearer logs.
- Adjust state/lock handling to be runner-owned; API becomes controller/monitor only.
Acceptance
- Killing the API mid-apply no longer leaves installs stuck; runner continues/cleans up.
- Apply has a timeout and writes final state (success/failure).
- Tests cover enqueue + runner execution and stuck-run recovery.
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.
Problem
Proposal
Acceptance