feat: worker presence layer + batch-loop docs (#7)

* feat: add next_action field to update_job_status response

* docs: add Batch-loop section to README

* feat: presence layer — registerWorker, startHeartbeat, registerShutdownHandlers

* feat: bootstrap worker presence at server startup, remove inline presence from wait-for-job

* docs: document worker presence layer in CLAUDE.md

* docs: refine Batch-loop intro — add 'Hier is de flow:' per implementation plan
This commit is contained in:
Janpeter Visser 2026-05-01 16:39:26 +02:00 committed by GitHub
parent c990d8547e
commit f87b20744b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 243 additions and 108 deletions

View file

@ -0,0 +1,25 @@
import { describe, it, expect } from 'vitest'
import { resolveNextAction } from '../src/tools/update-job-status.js'
describe('resolveNextAction', () => {
it('returns wait_for_job_again when queue has jobs after done', () => {
expect(resolveNextAction(3, 'done')).toBe('wait_for_job_again')
})
it('returns queue_empty when queue is empty after done', () => {
expect(resolveNextAction(0, 'done')).toBe('queue_empty')
})
it('returns wait_for_job_again when queue has jobs after failed', () => {
expect(resolveNextAction(1, 'failed')).toBe('wait_for_job_again')
})
it('returns queue_empty when queue is empty after failed', () => {
expect(resolveNextAction(0, 'failed')).toBe('queue_empty')
})
it('returns idle for running status regardless of queue count', () => {
expect(resolveNextAction(5, 'running')).toBe('idle')
expect(resolveNextAction(0, 'running')).toBe('idle')
})
})