3.14.3

Where a site reads from the data tables, the screens that ask which credentials use a course now ask the tables too, so a course is never shown as unused when a credential lists it.

  • Fixed **Course usage no longer misses credentials.** The older course-to-credential index is rebuilt only when a credential's own requirements are saved, and it reads plan-of-study courses by saved id only. So a course created after the credential, or a plan entry that names a course by its code, was left out. On sites reading from the data tables, the course usage panel, the curriculum impact check on a course proposal, the unused-course check in the signals report, the credential list on a course page and the Reports ripple block now read the tables, which have every link. Each credential is counted once, and one that lists the course in its plan of study is shown as a plan course, as before. On Martin this restores 11 links, including CHM-130, CHM-130A and EDU-131A on the nursing, arts and science degrees.
  • Fixed CI runs only the suites a pull request's changed files can affect (`.github/scripts/pick-suites.sh`), and the full suite runs once when a release is tagged; the release cannot build or publish unless it passes. The separate run on `main` after a merge is gone.
  • Fixed The public test fixture now has a program type, a plan of study that names a course by code alone, and is written to the data tables, so table-backed rails have real links to check.
  • Fixed New rail `tests/course-usage-from-tables.php` hides a real table link from the legacy index and proves the table readers still find it, and that a course a credential lists several times still gives one row per credential. It puts the index back afterward. The WordPress side of the course, program and Pathways page checks still reads the legacy index on purpose, so those checks stay able to see a difference.