--- id: "bug-1682" status: "fixed" status_updated: "2026-09-24" status_note: "" component: "scheduler" severity: "unknown" timestamp: "2026-08-24T21:40:00Z" last_seen: "2026-09-19T09:30:00Z" occurrences: 1 files: ["src/scheduler/src/plugin.c"] tags: ["scheduler", "plugin", "session-hooks", "guard-bug", "latent", "scheduler-driver-equivalence"] related: ["bug-1681", "bug-1492"] legacy: true --- # bug-1682: Found while fixing bug-1681 (source read of plugin_end_session(), src/scheduler/src/plugin.c): the… ## Description Found while fixing bug-1681 (source read of plugin_end_session(), src/scheduler/src/plugin.c): the per-plugin iteration guard checks the WRONG field. plugin_end_session()'s loop tests `if (plugin->begin_session_fn != NULL) { plugin->end_session_fn(plugin); }` -- guards on begin_session_fn but calls end_session_fn. Pre-existing, not introduced by bug-1681's fix (untouched by that diff). Previously documented (not fixed) in testsuite/test_driver_session_ordering.c's own file header comment as a known 'CONCERN surfaced during this test's construction' -- flagged there for the reviewer, deliberately left unfixed as out of that task's scope. Confirmed still present in current code. ## Environment _Not recorded (migrated from buglog.json)._ ## Reproduction _Not recorded (migrated from buglog.json)._ ## Root cause Copy-paste from plugin_begin_session()'s loop body (which correctly guards on begin_session_fn before calling it) without updating the guard field for the end_session variant. ## Fix FIXED (2026-09-19, /xce-audit-invariants scheduler dimension-1 audit). Prior tag-only "fixed"/"closed-by-scheduler-sim-live-allocation" stamps on this entry were premature/incorrect -- confirmed by this audit's independent re-read of plugin.c that the guard-field bug was still genuinely present in code as of the scheduler-sim-live-allocation feature's completion (that feature touched plugin_job_election/plugin_prepare_allocation/plugin_commit_decision only, never plugin_begin_session/plugin_end_session's bodies). Now actually fixed: changed plugin_end_session()'s guard from plugin->begin_session_fn != NULL to plugin->end_session_fn != NULL (src/scheduler/src/plugin.c). Confirmed via TDD (RED: new test_end_session_invokes_end_session_fn_when_only_it_is_set() fails 84/85 against the pre-fix guard; GREEN: 85/85 after). Duplicate of bug-1492 (same defect, originally filed 2026-08-04, discovered again independently during this bug's own 2026-08-24 investigation without cross-referencing the earlier entry) -- see bug-1492 for the original filing. ## Verification _Not recorded (migrated from buglog.json)._ ## References - Related: bug-1681, bug-1492