canvas-course-qc — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited canvas-course-qc (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Systematically walk a Canvas course from top to bottom — syllabus, modules, pages, assignments, and rubrics — and produce a prioritised list of issues to fix before publication.
Call get_course with the course ID to retrieve:
workflow_state: unpublished, available, completed)Report the publication status upfront — if the course is already live, note that this is a post-launch audit.
Call get_syllabus for the course. Check:
Flag any missing or placeholder syllabus content.
Call list_modules for the course to get all modules. For each module:
get_module (with the module ID) to get its publication state, unlock date, and prerequisite chain.list_module_items (with the course ID and module ID) to get the full item list.For each module record:
From the module items collected in Step 3, identify items of type Page. For each page item:
Call get_page (with the course ID and page URL or slug from the module item) to retrieve its content and publication state.
Check for:
href="/courses/ patterns that reference a different course IDFlag each issue with the module name and page title.
Call list_assignments for the course. For each assignment:
Call get_assignment (with the course ID and assignment ID) to verify:
none unless intentional)If rubric_id is null on an assignment that appears to require rubric grading (based on its description mentioning criteria or a grading rubric), flag it as a missing rubric.
Call list_rubrics for the course to get all course-level rubrics.
For each rubric:
Flag rubrics with zero assignment associations (orphaned rubrics — may indicate an assignment link was removed).
Organise findings by severity:
Ask the designer if they want to drill into any specific finding or export the full list.
Course QC Report — [Course Name] ([course code])
Status: [Published / Unpublished] | Modules: [n] | Assignments: [n] | Pages: [n]
BLOCKERS ([n] found)
• Module "[name]" — empty (no items)
• Page "[title]" in module "[name]" — unpublished (students cannot access)
• Assignment "[name]" — submission type not configured
WARNINGS ([n] found)
• Syllabus — contains placeholder text ("TBD" in section 2)
• Assignment "[name]" — no due date set
• Assignment "[name]" — points possible is 0 (intentional?)
• Assignment "[name]" — no rubric attached (description mentions criteria)
SUGGESTIONS ([n] found)
• Rubric "[name]" — not associated with any assignment
• Module "[name]" — empty (optional module, consider removing or adding a note)
PASSED
✓ All published pages have content
✓ All modules have items
✓ Syllabus is present and non-emptyget_course_structure aggregator in canvas-lms-mcp; this skill explicitly chains list_modules → list_module_items → get_page / get_assignment. For large courses (20+ modules), this may take a few minutes.ExternalUrl for manual verification by the designer.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.