-
released this
2026-08-24 18:13:36 -05:00 | 81 commits to main since this releaseCanvas C3:
list_upcoming_assignments. One request answers "what is due" across
every course, sorted by due date, with submission state attached. Seven tools.The filter is the phase, and the obvious implementation is wrong
Filter on
submissions, not onplannable_type. Canvas states whether an item counts
toward a grade in the item itself —submissionsis a dict of flags on anything gradeable
and the literalfalseon anything else.Probe 10 returned 23 items:
assignment×14,discussion_topic×5,announcement×4 —
and one of those five discussion topics is gradeable and carries a due date. A graded
discussion is real coursework, so an allowlist of("assignment", "quiz")reports fifteen
items as fourteen, silently.The trap the plan predicted was quizzes, and a different instance of the same class fired
instead. Noquizitem appeared in the window at all — so a type allowlist would have
looked perfectly correct that day and broken the first week a quiz was set.Added
start_date/end_datego to Canvas, proved server-side with a window containing
nothing that returned zero items rather than everything.- Sorted by
due_atwith undated items last. Canvas orders byplannable_date, which
is a sort key rather than a deadline. non_coursework_ignoredis reported — "nothing is due" and "the planner held four
announcements and no work" are different facts.
Changed
- The planner's submission shape is reconciled with C2's by OMISSION rather than nulls.
It carries no score; an absent key says "this tool does not answer that", while a null one
reads as "not graded yet".
Corrected
- The 0.29 planner cost recorded earlier was for ten items. Twenty-three cost 1.138, so
the honest margin over the fan-out is about 2x, not 5x.
All six new guards proved by breaking them, including filtering by
plannable_typethe
obvious way.1374 tests green.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads