--- id: "bug-1591" status: "fixed" status_updated: "2026-09-24" status_note: "" component: "scheduler" severity: "unknown" timestamp: "2026-08-19T03:45:00Z" last_seen: "2026-09-19T09:00:00Z" occurrences: 2 files: ["src/scheduler/src/repl_info.c (queued job: ~230", "assigned job: ~356)", "src/scheduler/src/repl_break.c (~665)", "src/scheduler/src/sim_loop.c (~379", "383", "387)", "src/scheduler/src/sim_verify.c (~293", "325", "335", "346", "373", "380", "389)", "src/scheduler/src/driver.c (~652)", "src/scheduler/src/core_events.c (~872", "907", "979)", "src/scheduler/src/recording_session.c (~173) -- full raw-jobid-print inventory for the scheduler tree", "not yet fixed"] tags: ["scheduler", "repl", "jobid", "human-readable", "logging", "ux", "not-yet-fixed"] related: ["bug-1588"] legacy: true --- # bug-1591: User-reported: `(sim) info queue all` in the scheduler's interactive REPL prints raw packed jobids… ## Description User-reported: `(sim) info queue all` in the scheduler's interactive REPL prints raw packed jobids instead of the human-readable form, e.g. `[sim] queued job: jobid=4645085138445664257 priority=0` instead of the 'cluster-apiserver-timestamp-sequence' form (e.g. '3-1-1755590313-976') already used elsewhere in this codebase (bug-1588 fixed the same class of issue in src/controller/job.c's TRACE lines). ## Environment _Not recorded (migrated from buglog.json)._ ## Reproduction _Not recorded (migrated from buglog.json)._ ## Root cause Same class as bug-1588 (already fixed for src/controller/job.c): fmt_jobid()/fmt_jobid_ex() (src/lib/utils.c, declared src/include/utils.h:132-133) is the established human-readable jobid formatter already used elsewhere in this exact scheduler tree -- scheduler.c, handler.c, plugins/limit.c, plugins/fcfs.c, and even repl_info.c ITSELF at other call sites (e.g. line 119/143/184, per bug-1588's original grep) already call it correctly. The two sites the user's `info queue all` output actually exercises -- repl_info.c's 'queued job: jobid=%llu' (~230, the queue-dump command, `info queue |all`) and its sibling 'assigned job: jobid=%llu' (~356, inside repl_info_worker_one, `info worker |all`) -- were simply never converted, the same oversight bug-1588 already found and fixed in job.c. A broader grep of src/scheduler/src/ for the raw `jobid=%llu`/`jobid: %llu` pattern (see `file` field above) found ~15 more sites across repl_break.c (breakpoint-hit message), sim_loop.c/sim_verify.c (batch --sim DISPATCH/PEND/PREEMPT decision output and --sim-verify divergence reports), driver.c/core_events.c/recording_session.c (WARN/ERROR log lines for unknown-jobid and preemption-not-yet-implemented conditions) -- all likely candidates for the same fix, not yet individually confirmed to be in-scope (some may be deliberately terse WARN/ERROR paths where the raw id is acceptable; needs a per-site judgment call when this is picked up, not a blanket mechanical replace). ## Fix Fixed. All 15 raw jobid=%llu sites converted to fmt_jobid() across src/scheduler/src/repl_info.c (2), repl_break.c (1), sim_loop.c (3), sim_verify.c (7), driver.c (1), recording_session.c (1), core_events.c (3) -- same mechanical pattern as bug-1588's job.c fix. This intentionally changed observable REPL/--sim/--sim-verify output text, which broke 5 test binaries' assertions that hardcoded the OLD raw-numeric jobid format (e.g. `strstr(captured, "jobid=4242")`); updated all affected assertions in test_sim_alt_events.c, test_repl_execution_control.c, test_sim_event_loop.c, test_sim_verify.c, and test_repl_breakpoints_inspection.c to compute their expected marker strings dynamically via fmt_jobid() too, matching the existing precedent already used in src/controller/testsuite/test.c. Verified via two /xce-build scheduler asan --incremental runs: first run caught a genuine test regression (5 unexpected failures, all traced to the hardcoded-format issue above, not a production bug); after the test fixes, final run is Ok:41/Fail:1 out of 42 -- all 10 affected tests confirmed individually passing, the only remaining failure is the pre-existing unrelated bug-1560 (test_admin_request's symlink-escape test). One build-tooling wrinkle encountered along the way (not a code bug): an --incremental ninja run once silently skipped recompiling one changed test object, giving a stale Ok:40/Fail:2 result until the object was force-rebuilt -- worth a non-incremental rebuild if an --incremental result ever looks surprising. ## Verification _Not recorded (migrated from buglog.json)._ ## References - Related: bug-1588