2.2.0
This release is about **seeing what changed between catalog years**. A new comparison report shows added, removed, discontinued and edited programs, credentials, courses and policies between any two years, in a printable form a registrar can hand over. The handbook now renders per year as well, so each catalog year serves its own sections and its PDF matches. A migration is included for colleges whose older data shared records across years.
- Added Year-to-year catalog diff report (admin): compare any two catalog years to see added, removed, discontinued, and field-level changed programs, credentials, courses, and policies, with a printable registrar-facing view
- Added REST endpoint `GET kenii/v1/admin/catalog-years/diff` returning the structured year-over-year comparison
- Added `wp kenii split-shared-years` migration: converts legacy shared-year data to true per-year records and assigns unassigned catalog records to the active year
- Changed The handbook renders per catalog year: each year serves its own section tree (with a safe fallback for years without tagged sections), and the catalog PDF renders the handbook for its own year
- Changed Internal write-service layer for programs, credentials, and courses (`includes/catalog-services.php`); the admin REST controllers are now thin wrappers over callable services. No user-facing change.
- Fixed Year cloning no longer corrupts JSON meta containing escaped characters, no longer drops legacy program fields carried by hybrid credentials, and no longer copies internal snapshot/edit-lock keys onto the new year
- Fixed Program hero subtitles render the program type (previously always empty)
- Fixed Requirements and plan-of-study remapping no longer injects an empty course list into text-only sections