-
released this
2026-08-24 18:48:01 -05:00 | 79 commits to main since this releaseCanvas C4:
list_modulesandget_page. The tenant is complete at nine tools.Added
list_modules— a course's outline in order, items inline, with each module's
per-studentstate. That state is the only thing on this tenant that answers "where am
I in this course" — grades say how it went, the planner says what is due, neither says
what has been worked through. A null state means the course does not track progress,
which is not "nothing started".get_page— lecture notes, weekly overviews, exam guidance. The largest body of
prose this tenant can reach: 78 of one course's 146 module items, median 4,620 characters.- Items say which tool can open them, or say nothing.
opens_withis absent on Files,
external links and publisher tools — a listing that presents a File identically to a Page
invites a model to promise a reading it cannot deliver.
Changed
list_module_itemsis dropped.include[]=itemsreturns items inline for every
module in one call, so a second tool would exist only to re-fetch what the first already
returns — the argument that cancelledlist_submissions.get_pagereverses the decision that declined pages. The original reasoning was
sound in the abstract and wrong about this account: a page is smaller than the syllabus
this tenant already returns. What the abstract argument could not see is that pages are
over half of all module content, so declining them turnedlist_modulesinto a list of
things nothing could open.
Cost
list_modulesis the most expensive call in this project — 5.32 with items for one
course, against 0.07–1.14 for everything else here. It takes acourse_idrather than
sweeping.Testing
All eight new guards proved by breaking them — including "a File is openable, it has a
url" and "the numeric id is the page handle", each of which would have left the two tools
unusable together while looking correct apart.1383 tests green.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads