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 |
||
|---|---|---|
| .. | ||
| hooks | ||
| .gitignore | ||
| _scan-state.json | ||
| anatomy-index.json | ||
| anatomy.md | ||
| buglog.json | ||
| cerebrum.md | ||
| config.json | ||
| cron-manifest.json | ||
| cron-state.json | ||
| memory.md | ||
| OPENWOLF.md | ||
| reframe-frameworks.md | ||
| STATUS.md | ||