UCT ← Back to the explorer's documentation page  ·  source: DEV-TODO.md

Development TODO

Deferred work, tracked here so nothing rides on memory. Ordered by value.

1. Adjudication review process (highest value, human-in-the-loop)

The final-clean layer currently carries 44 provisional adjudications (resolutions/com.csv, decided_by = "provisional (Claude), pending review") and ~230 unresolved specialisation-years flagged at low confidence (validation/pending_adjudication_<year>.csv).

Review workflow to implement/run:

  1. Confirm the 44 provisional entries. For each register row: open the PDF at the cited page, check the rationale, then either (a) amend decided_by/decided_date to the reviewer's name to confirm, (b) edit the action/value and re-run python build_final_dataset.py --year <y>, or (c) delete the row (the case returns to the pending report). The finaliser fails on stale entries, so typos surface immediately.
  2. Work the pending queue, largest deltas first. Each row carries a suggested_action:
    • set_stated_corrected (R1b) — confirm the misprint and add an R3 row.
    • check_extraction (R2b) — the extracted course set is probably incomplete; inspect data/interim/<year>-com-ug.txt at the source page and fix the parser (as-printed fix), NOT the register.
    • adjudicate in resolutions/com.csv (R4) — the ±6…±24 tail; decide per case or accept the computed default and record accept_computed.
  3. Faculty confirmation items (need someone with curriculum authority):
    • the un-printed selection rules behind the unlabelled_choice_menu adjudications (CSC 4th year, PPE year 2, senior Economics years) — a one-line rule per menu would upgrade accept_stated to pin_choice, fixing the menu-inflated fee estimates too;
    • the N-suffix fee-book rows (~R600, assumed exam-only, excluded from costing);
    • the AD published-fee variant mapping (ad_duration method).
  4. CU020BUS01 (AdvDip Actuarial Science) 2021/2022: the early-edition AdvDip layout prints an approved-course pool (pp17-18 of the 2021 book — every 3000-level ECO course etc.) which the engine read as a 672-credit year-1 curriculum (300 in 2022; found 2026-08-06 by a

    250-credit spec-year scan, alongside SCI hazard H41 which was fixed). Needs a COM-config fix (recognise the pool as alternative rows or an elective list), not an adjudication.

Tooling idea (nice-to-have): a small review.py that walks the pending report interactively (show row + PDF page reference, prompt for a decision, append the register row) would make a review session ~10× faster.

2. EBE adjudication pass (register is empty; queue much reduced)

The 2026-08 engine fixes (hazards H37-H39: footnote-marked year headings, elective-core menus, optional-courses sections, "(minimum)" totals, five slot-line shapes) resolved most of what this pass had queued — EBE is now 509 consistent / 31 unresolved spec-years (was 344/185). Remaining:

3. LAW follow-ups

4. FHS follow-ups

5. SCI/HUM follow-ups (extraction + rules layer landed 2026-08-06)

6. Analysis layer

6b. Rules-layer follow-ups (from the 2026-08 rules sweep)

Optional tables the rules sections could still yield (evidence and page refs in the sweep notes; build only if analysis needs them):

7. Smaller engineering items