A registrar can confer a degree
Until now, a student who had finished every requirement in their program looked exactly like one still enrolled — no graduation date, nothing to click, no distinction anywhere: not on the directory, not on the transcript, not in a roster export.
Once a student's audit genuinely shows every required credit earned, a Confer degree button appears on their record for a records-manager, behind a type-the-student's-name confirmation. Conferring sets a graduation date that then follows the student onto their transcript, the institution's student directory, and their data export. Undoing a conferral is a separate, logged action — it isn't silently reversible from the same click.
Exports are now signed and independently verifiable
Student record exports and institution data exports have always shipped a manifest.json, but nothing about it proved the bundle hadn't been altered after it left Folio — a receiving registrar, or a student re-importing their own records elsewhere, had no way to check.
Both export types now embed a signed integrity block: every file in the bundle is hashed, folded into a Merkle root, and the root is signed. A new public /verify/export-manifest check recomputes that signature against an uploaded bundle and confirms whether it matches — no database lookup involved, so it works even on a bundle exported months ago.
A downloadable portfolio for faculty
If your profile is public and you have at least one Folio Page-enabled certificate, /u/[handle] now offers a Download portfolio action that bundles your bio, publications, and a summary block per published document (with its verify link and QR code) into a single PDF. The full text of each document still lives at its own /verify/[code] page — the portfolio is a summary, not a re-hosting of your work.
Also new
- Retracted papers get flagged in search. A retracted paper used to rank in Verified Search the same as any other result. If Folio has already checked a paper in your library and knows it was retracted, that result now carries a warning badge. An unbadged result means "not checked," never "confirmed clean" — Folio doesn't run a live retraction check against every search result, only against papers already in your library.
- A waitlisted student can see their place in line. Your record page now shows exactly where you sit — "Place 2 of 5" — using the same join-order that already decides who gets the next freed seat. It's a separate section above your transcript, since waitlisted registrations correctly don't appear on the transcript itself.
- Shared Discovery Agent source lists are actually reachable now. These pages have quietly supported clean sharing (canonical links, previews) for a while, but nothing on the site linked to one — you needed the exact URL. An opted-in profile now lists its owner's shared agents, and they're included in the sitemap.
- A page-enabled certificate can now be found by search engines. A published Folio Page (and the "Preprint" tag it can carry) was set to
noindexregardless of whether you'd opted in to public indexing. It now indexes correctly once you've opted in — a revoked certificate stays out either way. - Course-linked assignments now notify students. Posting an assignment tied to a course used to insert it silently. Enrolled students now get the same course announcement and email notification a manual instructor announcement already triggers. Standalone join-code assignments (not tied to a course) are unaffected.
Fixed
- A student's "credits earned" total could disagree with their own requirement checklist. Waived or substituted courses already counted toward satisfying individual requirements, but the aggregate "X of Y credits earned" figure — shown to both the student and institution admins — was only reading regular enrollments, so the two views of the same progress didn't match. Waived credit now folds into the total on both surfaces.
- Removing a student from a roster silently promoted the next waitlisted student, with no confirmation shown. Freeing a seat from the status dropdown already flashed "so-and-so was promoted from the waitlist" — the Remove button froze the same event but said nothing, since it reloaded the page instead of reading the response. Both controls now show the same toast.