myxce/.kiro/specs/worker-rejoin-resync
Rongsong Shen 442fcf4544
feat(worker-rejoin-resync): reconciliation round lifecycle (task 3.1)
New src/controller/resync.c/resync.h: resync_arm_round(cluster_t*,
worker_t*) enumerates every non-terminal job assigned to a host,
populates worker_t.resync (round_token, query job-ID set, deadline),
sets XCE_WORKER_RECONCILING, and schedules a non-blocking delaymgr
one-shot timeout. resync_resolve_round() clears the round; a fired
timeout resolves it too, via resync_round_is_current()'s by-value
round-token check -- delay.c/delay.h expose no true cancel/dequeue
primitive, so a stale timer from an already-superseded round becomes a
safe no-op instead of touching a newer round's live state (verified
safe against both misresolving the wrong round and use-after-free: the
timeout closure never holds a pointer into resync_state_t itself).

5 new tests: query-set correctness, fresh-token-per-arm, the
RECONCILING flag's set/clear lifecycle, and a direct (non-blocking)
timeout-fire proof via an XCE_TESTING-gated seam confirmed compiled out
of the production binary. Full suite: 1232 tests, 0 failures.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y4M5MJM2zK6nU43da267Ku
2026-09-01 12:53:09 +00:00
..
brief.md docs(kiro): reconcile spec metadata, promote 3 new specs, fix template path 2026-08-16 11:02:06 +00:00
design.md feat(worker-rejoin-resync): reconcile unqueried job assignment (task 2.2) 2026-09-01 11:40:47 +00:00
requirements.md docs(worker-rejoin-resync): add requirements, design, and research docs 2026-09-01 07:08:41 +00:00
research.md docs(worker-rejoin-resync): add requirements, design, and research docs 2026-09-01 07:08:41 +00:00
spec.json docs(worker-rejoin-resync): fix design review findings; add tasks.md 2026-09-01 08:03:10 +00:00
tasks.md feat(worker-rejoin-resync): reconciliation round lifecycle (task 3.1) 2026-09-01 12:53:09 +00:00