Live events for "classic quiz with no assignment" content type + live events for all quiz types content update + new event types for quizzes#39
Open
JoshBothell wants to merge 1950 commits into
Conversation
JoshBothell
commented
Mar 17, 2026
- Live events for "classic quiz with no assignment" content type
- Live events for all quiz types content update
- New event types for quizzes to avoid confusion regarding using "assignment_updated" events for quizzes with no assignment.
blunckr-aj
approved these changes
Mar 17, 2026
Author
|
submitted to Instructure, awaiting approval. |
Closes AE-3819 Change-Id: I2e40d945d52ca238c187e8fa99e21c8a729c0daf Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/406614 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Reviewed-by: Aaron Ogata <aogata@instructure.com> QA-Review: Cody Cutrer <cody@instructure.com> Product-Review: Cody Cutrer <cody@instructure.com>
The discovery page had no cap on the number of sign-in option buttons, which violated an a11y audit requirement. Users could save an unlimited number of items across the primary and secondary sections. Backend validation now rejects configurations exceeding 10 total items. Primary and secondary sections are treated as empty when absent, since discovery_page_active= can write discovery page settings without those keys. The frontend enforces the same limit by disabling the Add button at the cap and blocking saves when over the limit. A live item counter in the modal footer shows green below the limit, yellow at the limit, and red with an explanatory message when over it. Existing configurations above 10 still render, but must be reduced before saving again. closes AE-3686 flag=new_login_ui_identity_discovery_page [skip-crystalball] test plan: - enable "New Canvas Login UI: Identity Service Discovery Page" at /accounts/site_admin/settings#tab-features - visit /accounts/self/authentication_providers - click "Configure" for "Identity Service Discovery Page" - verify the counter shows 0/10 with no items added - add sign-in options one at a time - verify the counter increments only after each item is committed, not while the form is open - verify the counter is green below 10 items - verify the counter turns yellow at exactly 10 - verify the Add button is disabled at 10 items - verify Save is disabled when over the limit - verify the counter turns red above 10 with an error message - verify existing configs above 10 load and display the red counter, and Save is blocked until reduced Change-Id: Ib88d61c8415905b609581ef3b892d21ce59d9712 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/405720 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> QA-Review: Michael Hulse <michael.hulse@instructure.com> Product-Review: Michael Hulse <michael.hulse@instructure.com> Reviewed-by: Weston Dransfield <wdransfield@instructure.com>
Added a DiscoveryPageStatus component to the configure modal header that shows an "Enabled" or "Disabled" pill based on the discovery page active state, along with a "View Discovery Page" link that opens the discovery page URL in a new tab. Also replaced the native window.confirm exit confirmation with the InstUI-based confirm() dialog, and added a save confirmation warning when the discovery page is currently enabled to alert admins that changes will be immediately visible to users. closes AE-3698 closes AE-3699 flag=new_login_ui_identity_discovery_page [skip-crystalball] test plan: - enable "New Canvas Login UI: Identity Service Discovery Page" at /accounts/site_admin/settings#tab-features - visit /accounts/self/authentication_providers - click "Configure" for "Discovery Page" to open the modal - verify the "Disabled" pill appears in the header - verify the "View Discovery Page" link opens the discovery page in a new tab - enable the discovery page toggle, save the form - reopen the modal and verify "Enabled" pill shows - make a change and click Save - verify a confirmation dialog warns that changes will be immediately visible to users - cancel the confirmation and verify save did not occur - confirm the dialog and verify save completes - make a change and click Close - verify an unsaved changes confirmation dialog appears - cancel and verify the modal stays open - confirm close and verify the modal closes - resize the browser narrow and verify the pill and link wrap below the heading as a single unit Change-Id: Ia83817d0d6c479d153e98672395255480c817369 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/406023 QA-Review: Michael Hulse <michael.hulse@instructure.com> Product-Review: Michael Hulse <michael.hulse@instructure.com> Reviewed-by: Weston Dransfield <wdransfield@instructure.com> Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Custom nav links (nav_menu_link_* tab IDs) were not surfaced in the K5 course Resources tab. Now they appear as a "Links" section with external link cards. Also fixes issue in course.rb where for K5 subject courses, on the settings page, the "no eye" icon was not being displayed for disabled tabs. refs INTEROP-10283 flag=nav_menu_links test plan: - Enable K5 on a subaccount: Admin → Account Settings → check "Canvas for Elementary" for this account" → Save - make a course under this subaccount. This will be a K5 subject course. (homeroom course can be enabled in course settings) - Add custom links in account nav settings and course nav settings - From the course main page, click the Resources tab - Verify the "Other Resources" section appears with clickable external link cards - disable one of the nav menu links and verify that it shows with a "no eye" icon for a teacher or admin but does not show at all for a student Change-Id: I2aa8ade75874b059129c69e3986b2e3720c0154c Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/406428 Reviewed-by: Csaba Csuzdi <csaba.csuzdi@instructure.com> QA-Review: Csaba Csuzdi <csaba.csuzdi@instructure.com> Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Product-Review: Alexis Nast <alexis.nast@instructure.com>
closes INTEROP-10325 flag=nav_menu_links * also, for consistency, uses CanvasHttp.validate_url() in NavMenuLink validation even if URl starts with '/' * also be forgiving if they just paste a URL in and they end up with https://https://example.com Test plan: - add a custom link with url "http://example.com/1 2" (with space) and observe that it now changes space to %20 (previously it would keep the space and then cause a ruby error when saving) - add a link with URL "http://canvas-web.inseng.test//accounts/self" (double slash after host) in Course settings. check that the link works before and after save. Check in the rails console that it is stored as "/accounts/self" - try to add a link with URL "//example.com/123" and observe that the front-end rejects it. - try adding URL https://https://example.com and observe that it gets turned into https://example.com Change-Id: I40a9908bf357f0176c95a78d8d29dfcd32bc49ea Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/406376 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Reviewed-by: Csaba Csuzdi <csaba.csuzdi@instructure.com> QA-Review: Csaba Csuzdi <csaba.csuzdi@instructure.com> Product-Review: Alexis Nast <alexis.nast@instructure.com>
Display link URL as small secondary text below the label for NavMenuLink tabs in course settings, matching the same pattern as account settings. closes INTEROP-10480 flag=nav_menu_links test plan: - Go to course settings > Navigation - add a custom link (nav menu link) - Verify nav menu link items show their URL in small text below the label. click link to make sure it works. - save and refresh page and make sure link still appears - add an custom link with internal url (http://canvas-web.inseng.test/courses/123) and save. after page refresh check that the link starts with "/" but still shows the full url with http://canvas-web.inseng.test Change-Id: I147b49f5723e4f257a1179c91a9eb5d45ad2ca09 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/406184 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Reviewed-by: Csaba Csuzdi <csaba.csuzdi@instructure.com> QA-Review: Csaba Csuzdi <csaba.csuzdi@instructure.com> Product-Review: Alexis Nast <alexis.nast@instructure.com>
Adds the ic-brand-Discovery-custom-message brand variable to the JWT claims generated for the discovery page preview iframe. The value is read from the account's brand config and included in the token payload so the preview page can display it without requiring frontend changes. The custom message is gated behind the new_login_ui_custom_labels site admin feature flag, consistent with how login and registration custom messages are handled. closes AE-3736 flag=new_login_ui_custom_labels [skip-crystalball] test plan: - enable “New Canvas Login UI: Custom Labels” flag at /accounts/site_admin/settings#tab-features - enable "New Canvas Login UI: Identity Service Discovery Page" flag at /accounts/site_admin/settings#tab-features - visit /accounts/self/authentication_providers - click "Configure" for "Discovery Page" to open the modal - confirm custom_message appears in the JWT payload - disable the “New Canvas Login UI: Custom Labels” flag - confirm custom_message is null in the JWT payload Change-Id: Ib482b854a9353e5e072c8cae433141cc90e2c02b Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/406096 QA-Review: Michael Hulse <michael.hulse@instructure.com> Product-Review: Michael Hulse <michael.hulse@instructure.com> Reviewed-by: Dave Wenzlick <david.wenzlick@instructure.com> Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
This commit fixes an issue with with the wrapping of the buttons on the App details page. If there were too many buttons, they would all be on one line and would overflow the container. This commit changes the flex wrapper div to have `flex-wrap: wrap` so that the buttons will wrap to the next line if there are too many. test plan: 1. Go to the App details page for an app with many buttons (Create a registration update request, and view a DR app with reinstallation enabled). 2. Ensure that the buttons wrap to the next line and do not overflow the container. closes INTEROP-10507 flag=none Change-Id: I7e945d50a5aaaef11a18716d03208272c3c7631d Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/406872 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Reviewed-by: Ryan Hawkins <ryan.hawkins@instructure.com> QA-Review: Ryan Hawkins <ryan.hawkins@instructure.com> Product-Review: Ryan Hawkins <ryan.hawkins@instructure.com>
When validating discovery page settings, the validator would crash with ActiveRecord::SubclassNotFound when encountering a deleted provider with an invalid auth_type (e.g., legacy “twitter” that no longer has a subclass). This occurred because Rails attempted STI resolution during the iteration and method call. We now use a database query with the valid_for_discovery_page scope to check provider existence and activity directly, avoiding STI instantiation entirely. Invalid or deleted providers gracefully return nil and fail validation with a clear error message instead of raising an exception. closes AE-3825 flag=none [skip-crystalball] test plan: - run the account settings validator spec - ensure the new test for legacy deleted providers passes without raising SubclassNotFound exceptions - validate an account with a discovery page entry referencing a deleted provider - expect validation to fail with the appropriate error message, not with an STI instantiation exception Change-Id: I12c116989b46ae94700d72278e26447281f67ba2 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/406707 QA-Review: Michael Hulse <michael.hulse@instructure.com> Product-Review: Michael Hulse <michael.hulse@instructure.com> Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Reviewed-by: Weston Dransfield <wdransfield@instructure.com>
refs AE-3801 flag=none many developer keys include this and would break if it disappeared. re-introducing it to prevent that until a better story evolves around handling invalid scopes on dev keys Change-Id: I9dc4b4dd926a77989d20b318404066eab553311c Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/406965 Reviewed-by: Xander Moffatt <xmoffatt@instructure.com> Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> QA-Review: Jake Oeding <jake.oeding@instructure.com> Product-Review: Jake Oeding <jake.oeding@instructure.com>
refs EGG-2507 flag=peer_review_allocation_and_grading Replaced the following localized messages for errors: - "Unlock date" -> "Available from date" - "Lock date" -> "Until date" This change only modifies customer visible UI strings, the lock / unlock terminology on the backend is kept as is. [fsc-timeout=120] [fsc-node-count=35] [fsc-max-nodes=35] test plan: - create an assignment and attempt to set the dates in a wrong way - set due date to 15th April - set review due date to 13rd April - set available from date to 6th April - set until date to 5th April - error messages should display under each field - verify "lock" and "unlock" language is changed Change-Id: Ibc6bd81159564f777634558fca7cd01f13bb421d Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/406292 Reviewed-by: Artsiom Bolhar <artsiom.bolhar@instructure.com> Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Reviewed-by: Jason Gillett <jason.gillett@instructure.com> QA-Review: Jason Gillett <jason.gillett@instructure.com> Product-Review: Martin Yosifov <martin.yosifov@instructure.com>
refs AE-3466 flag=none Instructure Identity pseudonyms are only filtered from SisPseudonym.for results when current_user: is provided. Without it, pending inst pseudonyms are visible to all callers. Not addressed (no current_user context available): - Authentication loading (authentication_methods.rb, inst_access_token.rb, kaltura_helper.rb) — these load the session user's own pseudonym; filtering on self would be incorrect - Model layer (course.rb, user.rb, message.rb, etc.) - Background jobs and exporters (live_events.rb, gradebook_exporter.rb, enrollment_importer.rb, user_list_v2.rb, lti/*.rb, account_reports, custom_reports) test plan: - specs pass (here and in mra PS) Change-Id: I0de2508641ae7436b1233427ac5d28dfb5c26f09 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/405582 Reviewed-by: Weston Dransfield <wdransfield@instructure.com> Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> QA-Review: Dave Wenzlick <david.wenzlick@instructure.com> Product-Review: Dave Wenzlick <david.wenzlick@instructure.com>
This reverts commit 6b97896. Reason for revert: This doesn't resolve the issue from the ticket, and we're concerned it might have unintended consequences that we don't need. Change-Id: Ieeb4195340f8476da9f9f221e2cf4dc96fc94515 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/406994 Reviewed-by: Kasra Rismanchi <kasra.rismanchi@instructure.com> QA-Review: Kasra Rismanchi <kasra.rismanchi@instructure.com> Product-Review: Kasra Rismanchi <kasra.rismanchi@instructure.com> Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
EAP ending; widget dashboard moves to GA Opt-in. Drops the "Use Widgets for Dashboard" toggle and "Early Adopter Program Settings" section. The dashboard version switcher button stays. closes LX-4100 flag=widget_dashboard test plan: - Enable widget_dashboard feature flag on root account; log in as student - Open user profile tray; confirm "Early Adopter Program Settings" heading and toggle are gone - Confirm Accessibility Settings section still renders - Confirm "Switch to new/old dashboard view" button on dashboard still toggles both ways Change-Id: Ieb45ed4191673b11575ad2fa69be0c5bb735d384 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/406776 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Reviewed-by: Sarah Gerard <sarah.gerard@instructure.com> QA-Review: Sarah Gerard <sarah.gerard@instructure.com> Product-Review: Drake Harper <drake.harper@instructure.com>
Wire CanvasRce into the educator announcement creation widget via platform-ui's renderMessageEditor render prop. The host renders a bare CanvasRce — platform-ui owns the FormField wrapper, label, required asterisk, and screen-reader announcement. The main goal of this ticket is that the RCE is wired into the widget and can be used to create an announcement closes EGG-2471 flag=educator_dashboard test plan: - enable educator_dashboard feature flag - visit /, open the announcement creation widget - verify the RCE renders - type content, pick a course, and submit - verify the announcement is created with the content that was in the RCE Change-Id: I55ec5c0deb705716f32508da46f73e6ea0d5bd85 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/406799 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Reviewed-by: Angela Gomba <angela.gomba@instructure.com> QA-Review: Angela Gomba <angela.gomba@instructure.com> Product-Review: Jason Gillett <jason.gillett@instructure.com>
Change-Id: I1078d7ed968cacedec3cd5ba6824982ae3b0e9c1 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/407015 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Change-Id: I139258443665bf910d7821dbd26c5604f4846d67 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/407016 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Change-Id: Id7578a9992980dc9d0e4d7c653cc3564cac0c920 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/407017 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Cache TPs for ACTLs. Check current submission first in find_attempt_for_report before loading all versions. Preload old versions of submissions with multiple attempts. refs INTEROP-10487 flag=lti_asset_processor_tii_migration test plan: - enable lti_asset_processor_tii_migration on an account - set up account with TII LTI 2.0 tool proxy and assignments with originality reports - trigger migration via the API - verify migration completes successfully - verify asset processors and asset reports are created correctly for each assignment Change-Id: I1329cce53050601a9d3aa327072cec3830f0c010 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/406676 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Reviewed-by: Evan Battaglia <ebattaglia@instructure.com> QA-Review: Evan Battaglia <ebattaglia@instructure.com> Product-Review: Csaba Csuzdi <csaba.csuzdi@instructure.com>
The new on_migration_failed function makes it possible to add custom alerting to the migrator refs INTEROP-10487 flag=lti_asset_processor_tii_migration test plan: - regression test: - add a logline to on_migration_failed - create an LTI2 TP - configure an assignment with it - inject an error to tii_tp_migration function - migrate - check in the logs if on_migration_failed was called Change-Id: Iaec6c77419b1be850e33c4ab59e85e532d894f67 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/406746 Reviewed-by: Evan Battaglia <ebattaglia@instructure.com> Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> QA-Review: Csaba Csuzdi <csaba.csuzdi@instructure.com> Product-Review: Csaba Csuzdi <csaba.csuzdi@instructure.com>
The "Switch to new dashboard view" button should be hidden when an observer is observing themselves, since observers are not meant to see the widget dashboard in that case. Observers viewing a student and plain students still see the button as before. fixes LX-3829 flag=widget_dashboard test plan: - log in as an observer that observes a student - go to dashboard, select the student in observer picker - verify "Switch to new dashboard" button is visible - switch the observer picker to self - verify the button is hidden - log in as a student - go to dashboard - verify "Switch to new dashboard" button is visible Change-Id: I30182bcee184794c264ef59dd2266112dec3d558 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/406646 Reviewed-by: Sarah Gerard <sarah.gerard@instructure.com> QA-Review: Sarah Gerard <sarah.gerard@instructure.com> Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Product-Review: Zoe Lubitz <zoe.lubitz@instructure.com>
The multiple_root_accounts plugin was already changed to use pv5 so this change will have no effect. Test Plan Check that PageView functionality has not changed. flag=none refs PVIEW-1004 Change-Id: I7ab14d9594b9829f195b2205b995a9b527e83d3a Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/405816 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> QA-Review: Robert Sznyida <robert.sznyida@instructure.com> Reviewed-by: Peter Michaleczky <peter.michaleczky@instructure.com> Product-Review: Robert Sznyida <robert.sznyida@instructure.com>
closes IMP-7330 flag=institutional_tags Test Plan: - Use SIS import to import all inst tagging content - Run the separate export for them. - Run the provisioning export for them. - Both should be correct. Change-Id: I1eafb88b15eac7d087dfa91f7b78485fb17cc273 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/406865 Reviewed-by: Kristof Mehes <kristof.mehes@instructure.com> Reviewed-by: David Hajnal <david.hajnal@instructure.com> QA-Review: David Hajnal <david.hajnal@instructure.com> Product-Review: David Hajnal <david.hajnal@instructure.com> Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
- Make Width and Height input labels visible instead of screen-reader-only - Remove redundant "Custom width and height (Pixels)" heading - Update FormFieldGroup description to "Custom Dimensions" (screen-reader-only) - Fix lock icon alignment between inputs - Fix focus ring overflow causing horizontal scroll fixes ARC-11311 flag=none test plan: - open Studio Media Options tray - select custom dimensions - verify Width and Height labels are visible - verify lock icon is centered between inputs - focus each input, verify no horizontal scroll Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> Change-Id: I85291a80a8cf0d33f88ce1ecbb223e82c4213dca Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/406757 Reviewed-by: Kristóf Baján <kristof.bajan@instructure.com> Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> QA-Review: Kristóf Baján <kristof.bajan@instructure.com> Reviewed-by: Zoltan Dalmadi <zoltan.dalmadi@instructure.com> Product-Review: Patrik Gerzsenyi <patrik.gerzsenyi@instructure.com>
Bump @instructure/studio-player to 1.10.0 which
adds studio_transcript_editing track event for
inline transcript editing. Wire it to Pendo
behind rce_asr_captioning_improvements flag:
- canvas_transcript_editing (enter_edit_mode,
segment_edited, autosave_succeeded,
autosave_failed) with user roles attached
Also fixes CSS issues introduced by the player
upgrade: loading state and transcript editing
layout now render correctly.
refs ARC-11580
flag=rce_asr_captioning_improvements
test plan:
- Enable rce_asr_captioning_improvements flag
- Embed a media with Show Rolling Transcript
enabled and open it in RCE Editor
- Verify loading state displays correctly
(no blank screen or broken layout)
- Click Edit Transcript and edit a segment
- Verify transcript editing UI renders correctly
- Verify Pendo events fire with correct params
via console.log in trackPendoEvent:
- enter_edit_mode on clicking edit
- segment_edited on saving a line
- autosave_succeeded / autosave_failed
depending on network outcome
- Confirm roles array is included in the event
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Change-Id: I7229067e33c42def7c19d66db6351815e570ae46
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/406866
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Tamas Jakli <tamas.jakli@instructure.com>
Reviewed-by: Kristóf Baján <kristof.bajan@instructure.com>
QA-Review: Kristóf Baján <kristof.bajan@instructure.com>
Product-Review: Jozsef Gubicza <jozsef.gubicza@instructure.com>
test plan: - include `docker-compose/rdbg.override.yml` in your `.env` file. - then `inst canvas restart --debug` from the terminal - put a breakpoint in user.rb#sortable_name - lunch "Attach with rdbg to jobs server (tcp 12356)" debug config - from the rails console trigger a delayed job `User.first.delay.sortable_name` - the code execution should stop at your breakpoint Change-Id: I30ffe489932d859e7f14029f2727c5e4ff6a0af1 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/406762 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Reviewed-by: James Butters <jbutters@instructure.com> Build-Review: James Butters <jbutters@instructure.com> QA-Review: Adrián Grúber <adrian.gruber@instructure.com> Product-Review: Adrián Grúber <adrian.gruber@instructure.com>
test plan: - run `inst canvas restart --debug` - choose any rspec tests case - put a breakpoint on one of the lines - run the test with "Debug Current Spec (Docker)" debug config - the execution should stop at the breakpoint. Change-Id: I0c5f0e39c3f9fcd2decc81a4613794a5d9a1062c Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/406860 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Reviewed-by: James Butters <jbutters@instructure.com> QA-Review: Adrián Grúber <adrian.gruber@instructure.com> Product-Review: Adrián Grúber <adrian.gruber@instructure.com>
This index improves performance of the `update_learning_outcome_results` query from ~6 minutes down to ~50ms. flag = none closes: QO-1394 Change-Id: I8c3a4f2a44455a6004ca0300ef197e16bfd6b5cf Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/406484 Reviewed-by: Cody Cutrer <cody@instructure.com> Migration-Review: Cody Cutrer <cody@instructure.com> QA-Review: Hossam Aladdin <hossam.alaaeldin@instructure.com> Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Product-Review: András Maróy <andras.maroy@instructure.com>
GraderErrors were displayed directly to users in the auto_grade_orchestration flow, but the grade_service was wrapping all errors — including internal Ruby errors and verbose Cedar API responses — as GraderErrors. This caused technical stack traces and internal details to leak to users. Now only known-safe Cedar error subclasses surface their messages to users, mapped to grading-specific copy. The base CedarClientError and all unexpected errors log their details and raise a generic user-safe message. The criteria mismatch error likewise logs its count details instead of exposing them. refs EVAL-6799 flag=project_lhotse test plan: Setup: - Set up a course with an assignment, rubric, and a student submission eligible for auto-grading Testing: - Trigger auto-grading on a submission that exceeds the Cedar content length limit and verify the user sees "The submission is too long to be graded automatically." rather than a raw Cedar message - Trigger auto-grading when Cedar's rate limit is hit and verify "Grading is temporarily unavailable. Please try again later." - Simulate a Cedar API error that doesn't match a known subclass and verify the user sees a generic message, not internal Cedar API details Change-Id: If349e5a07f0104b6a535cf1f512d0e06da44c6fe Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/406489 Reviewed-by: Rajmund Csehil <rajmund.csehil@instructure.com> Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Reviewed-by: Chris Soto <christopher.soto@instructure.com> QA-Review: Chris Soto <christopher.soto@instructure.com> Product-Review: Yasi Afsharnive <yasaman.afsharnive@instructure.com>
if a grade was zero, it was displayed as a dash in the individual gradebook closes EVAL-6516 flag=none test plan: - set up an assignment to use a grading scheme -- ensure 0% is covered in the scheme - grade that assignment as a zero - verify that the letter grade is displayed correctly in the Student Information section of the individual gradebook Change-Id: Ief85b7bdf38ed9ace698680b34308e56b9a6156d Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/406325 Reviewed-by: Chris Soto <christopher.soto@instructure.com> Reviewed-by: Spencer Olson <solson@instructure.com> QA-Review: Derek Williams <derek.williams@instructure.com> Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Product-Review: Yasi Afsharnive <yasaman.afsharnive@instructure.com>
When a graded discussion uses checkpoints, grade change events are recorded against each SubAssignment ID, not the parent assignment. Filtering gradebook history by the parent assignment returned no results because the query used an exact match on the parent ID. When the selected assignment is a checkpoint parent, expand the query to include the parent and all active sub-assignment IDs using an IN clause via the existing for_scope_conditions path. Grader and student filters are still applied when provided. fixes EVAL-5785 flag=discussion_checkpoints Test plan: Setup: - Have a course with at least one student enrolled - Create a graded discussion with checkpoints enabled and publish it - Grade the student on both checkpoints Testing: - Go to Gradebook History for the course - In the Artifact filter, search for and select the discussion topic - Click Filter - Verify grade change events are returned for both checkpoints (Reply to Topic, Required Replies) - Re-filter adding a Grader and verify only events for that grader are returned - Re-filter adding the Student and verify only events for that student are returned - Verify a non-checkpoint assignment still works correctly in the Artifact filter Expected Results: - Checkpoint grade changes appear when filtering by the parent discussion assignment - Grader and student filters narrow results correctly - Non-checkpoint assignments are unaffected Change-Id: I9a5cbfbed92f29ff05edbf249805a15c1d73cf6c Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/406665 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Reviewed-by: Chris Soto <christopher.soto@instructure.com> Reviewed-by: Kai Bjorkman <kbjorkman@instructure.com> QA-Review: Derek Williams <derek.williams@instructure.com> Product-Review: Yasi Afsharnive <yasaman.afsharnive@instructure.com>
this commit fixes the AssignmentPointsDifferenceModal from not rendering when a user creates a rubric with points possible that is different from the assignment points possible on the assignment's page. The issue was that the check for whether the points were different was including a check for whether there was already an active rubric so it only displayed when updating the rubric on the assignment fixes EVAL-6830 flag=enhanced_rubrics test plan: - go to the assignment's show page and verify that when creating a new rubric for the assignment that if the points are different from the assignment points possible and the "Use for assignment grading" checkbox is checked that the AssignmentPointsDifferenceModal renders - after save, verify that the AssignmentPointsDifferenceModal is also rendered if you edit that rubric with points different. - remove the rubric from the assignment. - create a new rubric and verify that if you create a rubric with points different and do not have the "Use for assignment grading" checkbox checked that the AssignmentPointsDifferenceModal does not render. - go to the /rubrics page and verify that when creating or updating a rubric that it never triggers the AssignmentPointsDifferenceModal. Change-Id: Icb045078138c76222f9b51712f9f05814a4ad53a Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/407475 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Reviewed-by: Kai Bjorkman <kbjorkman@instructure.com> Reviewed-by: Derek Williams <derek.williams@instructure.com> QA-Review: Derek Williams <derek.williams@instructure.com> Product-Review: Yasi Afsharnive <yasaman.afsharnive@instructure.com>
the file referenced was removed in g/261784 actually, the file referenced never existed in that location; the comment was updated to reference ui/features in g/258807, which landed a week after the file was deleted from app/coffeescripts flag=none test plan: N/A refs FOO-6341 Change-Id: Ib6c83f41adfcace929a8b8c15faa59deb51c4753 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/407617 Reviewed-by: August Thornton <august@instructure.com> Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> QA-Review: Jeremy Stanley <jeremy@instructure.com> Product-Review: Jeremy Stanley <jeremy@instructure.com>
When a student submits a new attempt on an assignment, we want to keep
the AttachmentAssociations from previous attempts around. This moves us
towards a future where we use AttachmentAssociation-based auth checks
to determine if a submission is associated with an attachment.
Note that this change does not impact the returned attachments from
Submission#attachments. That will continue to only return attachments
from the most recent attempt.
closes GROW-234
flag=none
[fsc-timeout=75]
[fsc-node-count=10]
Test Plan 1:
1. turn OFF "Assignment Enhancements - Student"
2. create a file upload assignment
3. submit File A as a student. then submit again, but submit File B.
4. Go to /courses/:id/assignments/:assignment_id for the assignment,
as the student
5. Notice you only see a "Download File B" link in the sidebar, not a
"Download File A" link.
Test Plan 2:
1. create a file upload assignment
2. submit File A as a student. then submit again, but submit File B.
3. Go to /graphiql as a site admin user
4. Make sure the following request only returns File B
query MyQuery {
submission(
userId: <the student id>,
assignmentId: <the assignment id>
) {
attachments {
displayName
_id
}
}
}
Change-Id: Ibc15fb29f9b3fa26594b4785c852eaf0b442122a
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/405710
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Rajmund Csehil <rajmund.csehil@instructure.com>
QA-Review: Rajmund Csehil <rajmund.csehil@instructure.com>
Product-Review: Cameron Ray <cameron.ray@instructure.com>
Adds accessible label to IconPeerReviewLine so screen readers can identify the icon in the student peer reviews list. closes EGG-2375 flag=peer_review_allocation_and_grading QA: https://instructure.atlassian.net/browse/EGG-2375?focusedCommentId=2912334 test plan: - Navigate to an assignment with peer reviews - Open student view and check the peer reviews section - Inspect the HTML via the dev tools and verify that the SVG has the aria-label "Peer Review" Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Change-Id: Id1fcd277c5ce026a2d8ee07a70fd8e4c7bcf36ce Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/407626 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Reviewed-by: Martin Yosifov <martin.yosifov@instructure.com> QA-Review: Martin Yosifov <martin.yosifov@instructure.com> Product-Review: Angela Gomba <angela.gomba@instructure.com>
this commit refactors the rubric form to not use nested tables in the criteria container. it will instead be seperate sections with headers for each criteria. it also fixes the display and responsiveness of the Generate Criteria buttons so that they display correctly and wrap responsively on smaller screens. fixes EVAL-6753 fixes EVAL-6755 flag=enhanced_rubrics test plan: - open the rubric form page and add a criteria, an outcome criteria, and a couple AI generated criteria. - verify that the criteria are all displayed correctly - make the criteria responsive down to 320px and verify that they are still displayed correctly - verify that the GeneratedCriteriaHeader component renders properly and that the contents of the header wrap responsively as well. - verify that the Generate Criteria button for an individual criterion is displayed correctly and becomes added to the action menu for that criterion when the viewport is under 550px - verify that both Generate Criteria buttons correctly open and close the RegenerateCriteriaModal and that the modal closes correctly when cancelling or regenerating criteria. Change-Id: I6302148ee5bceca41e16664fc1ed7dbe9f06e114 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/405700 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Reviewed-by: Derek Williams <derek.williams@instructure.com> Reviewed-by: László Sipula <laszlo.sipula@instructure.com> QA-Review: László Sipula <laszlo.sipula@instructure.com> Product-Review: Cameron Ray <cameron.ray@instructure.com>
flag=ai_experiences fixes EGG-336 implements tabbed view to match designs Removes AI Analysis section (will be re-introduced once we get real AC) refactors frontend code to fix linter errors removes backend code used only by old ai conversations route also: removes AI analysis, as it was a POC. it will be reintroduced when PM comes up with new Analysis AC test plan: - jenkins passes - see demo video in ticket (it should give you a general idea of what to test) Change-Id: I1a34d2b1c7c0608df4c859d374cdb871e9bee766 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/407602 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Reviewed-by: Jason Anderson <jason.anderson@instructure.com> QA-Review: Jason Anderson <jason.anderson@instructure.com> Product-Review: Caleb Guanzon <cguanzon@instructure.com>
pass ENV.disable_keyboard_shortcuts to the speedgrader context so the new speedgrader can respect the user's keyboard shortcut preference. fixes EVAL-6474 flag=none test plan: - go to account settings and enable "Disable Keyboard Shortcuts" - open speedgrader with the new speedgrader enabled - press J or K - verify student does not navigate Change-Id: I42dc5d966e59ca5dcd6ce2ddfbc4d42c28e79116 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/406423 Reviewed-by: Chris Soto <christopher.soto@instructure.com> Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Reviewed-by: Derek Williams <derek.williams@instructure.com> QA-Review: Derek Williams <derek.williams@instructure.com> Product-Review: Cameron Ray <cameron.ray@instructure.com>
Returns five submission counts for a single assignment scoped to the teacher calling the API: on_time, late, and resubmitted needs-grading pills, plus submitted and total enrollment counts. For moderated assignments before grades are published, applies the same provisional-grade exclusion used by NeedsGradingCountQueryOptimized so all five metrics reflect what is on this teacher's plate. Wires the counts into the todo item API serializer alongside the existing needs_grading_count field. refs EGG-2561 flag=educator_dashboard test plan: - bin/rspec spec/models/assignments/teacher_todo_metrics_query_spec.rb - bin/rspec spec/models/assignments/needs_grading_count_query_spec.rb - bin/rspec spec/apis/v1/todo_items_api_spec.rb Change-Id: I9e3da4cb911984f34b4cb5d1bebc4f1611a06810 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/407562 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Reviewed-by: Martin Yosifov <martin.yosifov@instructure.com> QA-Review: Martin Yosifov <martin.yosifov@instructure.com> Product-Review: Jason Gillett <jason.gillett@instructure.com>
Move reusable API, query, translation, and theme code from ui/features/notebook/ into the new ui/shared/notebook/ package so the upcoming notebook_index feature can import from a single shared location. closes LX-4122 flag=none test plan: - open a wiki page with notebook feature enabled - verify notebook button appears and tray opens - verify highlights and note saving still work Change-Id: I51bf286bce892fe85732fe4f8b545118961a1496 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/407329 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Reviewed-by: Eric Saupe <eric.saupe@instructure.com> QA-Review: Eric Saupe <eric.saupe@instructure.com> Product-Review: Sarah Gerard <sarah.gerard@instructure.com>
Replace Journey-based study tools with a Canvas endpoint that calls Cedar directly for Summarize, Quiz me, and Flashcards. Journey plumbing removed from the study_assist path. closes LX-4114 flag=study_assist test plan: - enable study_assist in a course and sign in as a student - open a wiki page and click the study tools button - verify chips show Summarize, Quiz me, Flashcards (per per-tool feature flags) - click Summarize and confirm a summary renders - click Quiz me and Flashcards and confirm they render - click regenerate on Quiz / Flashcards and confirm a new call is made - open a course file (PDF or text) and repeat - disable study_assist or each per-tool flag and confirm the tools hide or return an error Change-Id: Ia9c7b53d13a0e6991a72bbfcf0635d81e5576958 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/407249 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Reviewed-by: Sarah Gerard <sarah.gerard@instructure.com> QA-Review: Sarah Gerard <sarah.gerard@instructure.com> Product-Review: Eric Saupe <eric.saupe@instructure.com>
closes: EGG-2540 flag=educator_dashboard test plan: - enable educator_dashboard on default account - as a teacher, visit / and confirm the educator dashboard renders - as a student, visit / and confirm it does not render Change-Id: I15cd02dd6f04a8d9448573706a82cb4f4259e1e7 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/407599 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Reviewed-by: Jason Gillett <jason.gillett@instructure.com> QA-Review: Jason Gillett <jason.gillett@instructure.com> Product-Review: Ferenc Marcsó <ferenc.marcso@instructure.com>
Cascade-restore queries filter by workflow_state='deleted'
and updated_at to find rows archived in the same operation.
Without partial composite indexes these scans grow with
total deleted rows. Add postdeploy partial indexes on
(institutional_tag_id, updated_at) and
(category_id, updated_at) to keep restore O(matched rows).
refs IMP-7422
flag=none
test plan:
- run db:migrate; verify both indexes exist
- archive a category with tags + associations
- restore the category; confirm cascade restores
associated tags and associations
- EXPLAIN cascade_restore_associations_for query uses
idx_inst_tag_assoc_tag_archived_updated_at
Change-Id: If678db8dc0f1455bad4b61c90ef5d0512d4ece88
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/407569
Reviewed-by: Norbert György <norbert.gyorgy@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Cody Cutrer <cody@instructure.com>
Migration-Review: Cody Cutrer <cody@instructure.com>
QA-Review: David Hajnal <david.hajnal@instructure.com>
Product-Review: David Hajnal <david.hajnal@instructure.com>
Hover state should be driven by actual cursor position, not per-cell enter/leave events which browsers drop on fast movement. fixes OUTC-783 flag=improved_lmgb test plan: - open Learning Mastery Gradebook - sweep cursor quickly across multiple outcome bar charts - verify only one expand button is visible at any time - click expand and confirm the popover still opens correctly Change-Id: Id679125072712e26331d6e9aae1c7fea28401669 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/407488 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> QA-Review: Balázs Buri <balazs.buri@instructure.com> Reviewed-by: Balázs Buri <balazs.buri@instructure.com> Product-Review: Sam Garza <sam.garza@instructure.com>
When switching to LMGB via ?view=learning_mastery, render the correct template directly instead of redirecting to /gradebook. The redirect + re-read pattern was unreliable: if the DB read in the second request returned stale data (e.g., read replica lag), Traditional Gradebook would show instead of LMGB. fixes OUTC-784 flag=outcomes_gradebook test plan: - Go to Traditional Gradebook for a course - Open the gradebook dropdown menu - Click "Learning Mastery Gradebook" - Verify LMGB loads consistently (no intermittent Traditional Gradebook reload) Change-Id: I0eada5c063c3f40bc789b1ce95059f71d705118c Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/407516 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Reviewed-by: Balázs Buri <balazs.buri@instructure.com> QA-Review: Balázs Buri <balazs.buri@instructure.com> Product-Review: Sam Garza <sam.garza@instructure.com>
Implementation of E2E tests, consisting of tests for: -missing table caption rule -missing table headers rule -missing table header scope rule closes RCX-5005 flag=a11y_checker [fsc-timeout=75] [fsc-node-count=10] test plan: - tests should pass Change-Id: I4b65fc7e155fecaefbb37755f0a6e9a06306fcb9 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/407512 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Reviewed-by: Marta Nagy <marta.nagy@instructure.com> QA-Review: Adam Zoltan Jelenszky <adam.jelenszky@instructure.com> Product-Review: Adam Zoltan Jelenszky <adam.jelenszky@instructure.com>
closes RCX-5073 test-plan: -pipeline passes -open http://canvas-web.inseng.test/graphiql -go to course endpoint -execute a query to show the files -both size, and size_bytes should work Change-Id: Ib143bf5bc78f259072878d419e9f2b41960b7a33 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/407590 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Reviewed-by: Rajmund Csehil <rajmund.csehil@instructure.com> QA-Review: Ferenc Marcsó <ferenc.marcso@instructure.com> Product-Review: Ádám Máté <adam.mate@instructure.com>
closes: EGG-2452 flag=educator_dashboard test plan: - enable educator_dashboard and a11y_checker_account_statistics on the account - GET the educator a11y statistics endpoint (users/:id/educator_accessibility_course_statistics) with no include[]: rows omit course_name, course_code, published, closed_issue_count - adding ?include[]=closed_issue_count &include[]=course_details includes those fields - as a student, the endpoint returns 403 - as a teacher in only completed/deleted courses, the endpoint returns 403 - POST users/:id/educator_accessibility_course_scan as a teacher returns 200; as a student, 403 Change-Id: Iad2793c951271ac8d14ff1bf7c4c9dc4d7bdb28c Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/407655 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Reviewed-by: Dániel Török <daniel.torok@instructure.com> Reviewed-by: Zsolt Mester <zsolt.mester@instructure.com> QA-Review: Zsolt Mester <zsolt.mester@instructure.com> Product-Review: Ferenc Marcsó <ferenc.marcso@instructure.com>
Move AssignmentPostingPolicyTray to ui/shared/ so it can be used from both the regular and individual gradebook without violating feature interdependence rules. Add a "Grade Post Policy" button to AssignmentActions in the individual gradebook that opens the tray. closes EVAL-6228 flag=none test plan: - Open the individual gradebook - Select an assignment - Confirm "Grade Post Policy" button appears below Curve Grades - Click the button and confirm the tray opens with the assignment name in the header - Save a policy change and confirm the success alert Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Change-Id: Iba13726eacba29007c1345b8d36acc6839963744 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/405769 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Reviewed-by: Jacob DeWar <jacob.dewar@instructure.com> QA-Review: Jacob DeWar <jacob.dewar@instructure.com> Reviewed-by: Chris Soto <christopher.soto@instructure.com> Product-Review: Yasi Afsharnive <yasaman.afsharnive@instructure.com>
This reverts commit 436d7c3. Reason for revert: This change causing regression issues, for example site admin could not access a11y features. Change-Id: I8b552e9a1cd2715350af5a2107a34d08563a9441 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/407437 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Reviewed-by: Zsolt Mester <zsolt.mester@instructure.com> QA-Review: Zsolt Mester <zsolt.mester@instructure.com> Product-Review: Ferenc Marcsó <ferenc.marcso@instructure.com>
Implementation of E2E tests, consisting of tests for: -low contrast issues with small text -low contrast issues with large text closes RCX-5002 flag=a11y_checker [fsc-timeout=75] [fsc-node-count=10] test plan: - tests should pass Change-Id: I9b19cbd9b9f5966492925b391a094eacd2744f20 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/407600 Reviewed-by: Marta Nagy <marta.nagy@instructure.com> Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> QA-Review: Adam Zoltan Jelenszky <adam.jelenszky@instructure.com> Product-Review: Adam Zoltan Jelenszky <adam.jelenszky@instructure.com>
User.courseProgression returned null when queried via enrollments → course → usersConnection across more than one course. Move context.scoped_merge!(course:) out of the preload_course_permissions.then block so its scoped path is attributed to the resolver, not the deferred batch flush. fixes LX-4162 flag=none test plan: - as a learner enrolled in 2+ module-based courses with completion requirements, run the multi-course GraphQL query from the ticket - verify courseProgression.requirements is populated for every course (not null) - single-course query still returns progression - REST progress endpoint still works Change-Id: Iadd785788e6c6e153a5067fc1e2973c2e31b0fe6 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/407576 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Reviewed-by: Sarah Gerard <sarah.gerard@instructure.com> QA-Review: Sarah Gerard <sarah.gerard@instructure.com> Product-Review: Sarah Gerard <sarah.gerard@instructure.com>
The "Instructor Score" / "Peer Review Score" label in the rubric assessment panel was overflowing and overlapping adjacent content when translated into languages with longer strings (e.g., Norwegian). Wrapped the label in TruncateText so it truncates gracefully when space is constrained, and added a Tooltip that appears on hover only when the text is actually truncated, preserving the full label for accessibility. Changes: - Import TruncateText and Tooltip components - Track truncation state via onUpdate callback - Render Tooltip conditionally based on truncation - Adjust margin when label is truncated fixes EVAL-5857 flag=none Test plan: Setup: - Enable a course with peer review assignments - Create a rubric and attach it to the assignment - Open Canvas in English and in Norwegian (Account Settings > Language) Testing: - In English: verify "Instructor Score" label renders normally with no truncation or tooltip - Switch language to Norwegian and reopen the rubric assessment panel - Verify the label truncates instead of overflowing into adjacent content - Hover over the truncated label and verify a tooltip appears showing the full translated label text - Verify the layout does not shift or break for other rubric elements - Repeat for peer review rubric and verify "Peer Review Score" behaves the same way Expected Results: - No text overlap in any language - Tooltip only appears when label is actually truncated - English labels are unaffected and render normally - Layout remains stable across both score label types Change-Id: I1453fcd3192b85ce32c27140f7873e9b0012d664 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/407478 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Reviewed-by: Chris Soto <christopher.soto@instructure.com> Reviewed-by: Derek Williams <derek.williams@instructure.com> Reviewed-by: Kai Bjorkman <kbjorkman@instructure.com> QA-Review: Chris Soto <christopher.soto@instructure.com> QA-Review: Jacob DeWar <jacob.dewar@instructure.com> Product-Review: Cameron Ray <cameron.ray@instructure.com>
Screen reader users navigating the caption list now hear the status (Processing/Failed) when focusing a language name, satisfying WCAG 1.3.1. refs ARC-11503 flag=rce_asr_captioning_improvements test plan: - open Caption Manager, trigger auto-captioning - verify screen reader announces status with the language name - verify no aria-describedby in ready state Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> Change-Id: I27e5e2d9d0ef1b202d16e823de112ac0ca1c8008 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/405975 Reviewed-by: Tamas Jakli <tamas.jakli@instructure.com> Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Reviewed-by: Jozsef Gubicza <jozsef.gubicza@instructure.com> QA-Review: Jozsef Gubicza <jozsef.gubicza@instructure.com> Product-Review: Patrik Gerzsenyi <patrik.gerzsenyi@instructure.com>
Change-Id: I08bb9f45154aeec6c199a5fc3c000e5673a6e0e2 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/407679 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Change-Id: I51dbde60f0a52a1a1a9f90190d3006c2649feb65 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/407681 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
d83c5e9 to
414f36c
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.