sim_reconcile_unaccounted_jobs()'s per-job trigger check (sim_loop.c) now also excludes JOB_IS_DONE(job->state) || JOB_IS_EXIT(job->state), alongside the existing job->accounts != NULL skip. A terminal job is never searched for a matching recorded DISPATCH entry, so a leftover or duplicate DISPATCH decision from a later replay round can no longer resurrect allocs/accounts on a job that has already completed - the exact mechanism behind info worker's assigned-jobs listing showing a finished job as still consuming a worker's resources. The exclusion mirrors job_state_regresses_terminal()'s existing "terminal is permanent" invariant (core_events.c) rather than inventing a new rule. The function's doc comment gains a paragraph clarifying the terminal exclusion is complementary to, not a reversal of, the existing PEND/RUN state-independence rationale that motivated this trigger's original widening. Both RED-phase tests (task 1.1) pass; the pre-existing PEND eager-capture regression test and core_events.c's JOBS_PUSH resync-merge terminal-state tests are unaffected. The analogous resync-merge branch was investigated and confirmed already correct. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YAWMhfRJFnmmnG8h97yUDd |
||
|---|---|---|
| .. | ||
| settings | ||
| specs | ||
| steering | ||