Two gaps in the Phase 3 regression net:
1. test_core_events.c: test_job_update_run_adoption_carries_shared_allocs
-- scheduler-side counterpart of bug-1976. A JOB_UPDATE marking a job
RUN whose jalloc carries shared-pool records (the per-project limit
charge + the external resource itself) must rebuild job->accounts
with accounts_shared mirroring them, or the next sched_account_jobs
pass never charges the limit vres and every global limit admits
forever. Also pins the payload ownership move (updated.allocs == NULL).
2. test_limit_project_scope.c: test_queue_scope_per_queue_instance_names
-- the per_queue shape of limits.yaml's extlic_qdist: queues:-scoped
limit slices its usage instance per queue ("limit=<name>/q=<queue>")
exactly as per_project slices by project ("/p="); cap lands at the
instance's own vres idx; out-of-scope queues match nothing. Uses the
same heap group-config lifetime contract as the project shape, so
free_limit_config() gained queues handling (and NULL-guarded the
projects group -- per_queue configs carry projects == NULL, which the
unconditional dereference crashed on; deterministic under
MALLOC_PERTURB_, every run).
Co-Authored-By: Claude Code <noreply@anthropic.com>