Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1950 commits
Select commit Hold shift + click to select a range
abc595d
Require Site Admins to have special permission to generate access tokens
ccutrer Apr 15, 2026
077f267
limit discovery page sign-in options to 10 total
mhulse Apr 2, 2026
2769568
add status indicator and view link to discovery page
mhulse Apr 7, 2026
a059208
Show nav_menu_link tabs on K5 Resources page
evanbattaglia Apr 2, 2026
0abdfc1
make Custom Links FE URL validation strict as ruby
evanbattaglia Apr 2, 2026
cea2df9
Show URL under label in course nav links list
evanbattaglia Apr 9, 2026
ab7d519
pass discovery custom message through preview token
mhulse Apr 9, 2026
70ed8c5
Fix wrapping of buttons on App details page
pfgray Apr 20, 2026
d287d4c
handle deleted legacy auth providers in discovery
mhulse Apr 16, 2026
b741841
restore scopes for event types
jakeoeding Apr 20, 2026
79d6059
fix: change language on assign access card form errors
meister245 Apr 14, 2026
546ca8a
Pass current_user to SisPseudonym.for at all request-context calls
davidwenzlick Apr 1, 2026
b1ff1ef
Revert "fix: 500 error when attachment contains external file URLs"
Ardena Apr 20, 2026
6073f95
Remove EAP Feature Option toggle from Profile Tray
drakeaharper Apr 17, 2026
c03c524
Inject Canvas RCE into educator announcement widget
jasonxris Apr 16, 2026
49c9ab3
[i18n] Update package translations
Apr 21, 2026
fd7cc54
[i18n] Update canvas-media translations.
Apr 21, 2026
020a83a
[i18n] Update RCE translations.
Apr 21, 2026
0501420
Optimize TII migration worker query performance
csuzdy Apr 16, 2026
cc3dd03
Add on_migration_failed hook to TII migration worker
csuzdy Apr 17, 2026
6fa2344
Hide dashboard switch button for observer self
Gazuru Apr 16, 2026
e5e2c8e
remove use_pv5 flag from pv4_client(); always use pv5
szro0 Apr 8, 2026
6140e85
Add SIS export functionality for inst tagging.
viktor-duka-inst Apr 20, 2026
f61b9de
fix(a11y): visible labels for custom dimension inputs
patrikgerzsenyi Apr 17, 2026
1f8e1dd
Extend Pendo tracking for new player events
Apr 20, 2026
e32f416
allow debugging job sever in VSCode
gubi995 Apr 20, 2026
d7d7f2e
allow debugging rspecs in VSCode
gubi995 Apr 20, 2026
2f9269c
Add index on learning_outcome_results
andrasmaroy Apr 15, 2026
f1fad2d
fix domain in JWT generated for PV5 API
peter-michaleczky Apr 17, 2026
e14276e
fix "Times Assessed" total count
buribalazs Apr 17, 2026
a9791a3
allow restoring temp enrollment as a regular one via sis import
gubi995 Apr 21, 2026
8b1541d
update ko translation
Apr 21, 2026
74d0c13
Switch PageView auth from access token to JWT
adam-delic Feb 28, 2026
6aacb99
update da-x-k12 translation
Apr 21, 2026
a851373
update fr-CA translation
Apr 21, 2026
bed23e3
update ko translation
Apr 21, 2026
4ac3be2
increase debounce time on short user queries
foldesimi Apr 14, 2026
bcbff92
update ms translation
Apr 21, 2026
75aea28
update nb-x-k12 translation
Apr 21, 2026
5814760
update sv-x-k12 translation
Apr 21, 2026
62a5b89
spec: add e2e tests for heading a11y rules
AdamJelenszky Apr 17, 2026
d7f1e3b
Display substitution variables for Apps
pfgray Apr 8, 2026
2e19a03
fix: change focus logic for date in assign access card
meister245 Apr 15, 2026
869d910
Address nits from EGG-2492 & EGG-2493
cjlangston713 Apr 21, 2026
ef7cad3
accept multiple enrollment_term_id in course_api
mayatyner Apr 20, 2026
e7446fd
Enable Duplicate Assignment with Peer Reviews
instout Apr 8, 2026
ef56070
Restore peer review sub assignment on undelete
Apr 14, 2026
869061d
Only backfill local copies to primary root account
Hawkbawk Apr 15, 2026
c0c7c41
fix session tokens cross-deploy compatibility with new field
ccutrer Apr 21, 2026
3517b4e
add discovery page guard and rename jwt claim key
mhulse Apr 21, 2026
bf9e296
Add UI decorations for site-admin tasks in PermissionButton
cvkline Apr 21, 2026
7b3e21a
Update Add Link modal hint text
smcgee31 Apr 15, 2026
cfa925a
bundle update aws
ccutrer Apr 21, 2026
624a878
bundle update datadog
ccutrer Apr 21, 2026
0ed4b33
bundle update addressable
ccutrer Apr 21, 2026
1a80650
bundle update axe-core
ccutrer Apr 21, 2026
ff013b5
bundle update code_ownership
ccutrer Apr 21, 2026
195eccd
bundle update erb
ccutrer Apr 21, 2026
eb139f9
bundle update feedjira
ccutrer Apr 21, 2026
2f1d220
bundle update ffi
ccutrer Apr 21, 2026
5e98722
bundle update git
ccutrer Apr 21, 2026
2a67896
bundle update graphql
ccutrer Apr 21, 2026
2744397
bundle update json
ccutrer Apr 21, 2026
8aa213c
bundle update mime-types-data
ccutrer Apr 21, 2026
71b78ee
bundle update minitest
ccutrer Apr 21, 2026
116b1df
bundle update multi_json
ccutrer Apr 21, 2026
7ceccfd
bundle update parser
ccutrer Apr 21, 2026
ac14e89
bundle update prosopite
ccutrer Apr 21, 2026
efdab4a
bundle update rake
ccutrer Apr 21, 2026
ac21bca
bundle update regexp_parser
ccutrer Apr 21, 2026
0ea5473
bundle update rspec
ccutrer Apr 21, 2026
4e73de6
bundle update selenium-webdriver
ccutrer Apr 21, 2026
a963a67
bundle update simple_oauth
ccutrer Apr 21, 2026
3f9a6da
bundle update rrule
ccutrer Apr 21, 2026
8edde94
bundle update sqlite3
ccutrer Apr 21, 2026
48175df
bundle update timecop
ccutrer Apr 21, 2026
9a55c92
bundle update vault
ccutrer Apr 21, 2026
8e3c12b
Make sure that the icon_url is always returned in registration APIs
tucker-m Apr 21, 2026
6832b4d
[i18n] Update package translations
Apr 22, 2026
a0be5e8
[i18n] Update RCE translations.
Apr 22, 2026
89968d1
Delete obsolete item-assign-to-tray tests
Gazuru Apr 21, 2026
648b068
Remove select from pageinfo queries.
viktor-duka-inst Apr 16, 2026
5cc1d82
bump platform-institutional-tagging to 6.1.0
david-hajnal Apr 22, 2026
c15523e
Fix Page views show a next page when there isn't one
Farkas76 Apr 21, 2026
4191ede
[BCE] return html body when there is no external content
danieltorok-instructure Apr 21, 2026
3511042
Bootstrap new Pendo FF
subpardaemon Apr 20, 2026
8fef53a
fix(a11y): save confirmation announcement
patrikgerzsenyi Apr 2, 2026
e1d2463
add tier_1 visible_on hook to smart_search flag
balinthorvathinst Apr 22, 2026
7fcf35d
update ko translation
Apr 22, 2026
b17e9a6
update ko translation
Apr 22, 2026
745e895
Make AI Rubrics available in tier 2
Apr 21, 2026
6fe80d8
Add autopilot JWT workflow
JacksonHowe Apr 20, 2026
127b932
Rename Impact feature flag
akos0horvath Apr 22, 2026
3479114
include rubric rating order into content export and migration
fmarcso Apr 17, 2026
8961865
Hide SIS import inst tagging content
viktor-duka-inst Apr 22, 2026
8ace550
Add tier_1_visible_on_hook to a11y_checker_ignite_ai flag
viszpis Apr 22, 2026
3001d18
redesign Knowledge Chat UI components
cguanzon Apr 21, 2026
73596e8
spec: add tests to progress overview widget
June-eoh Apr 17, 2026
4dc7c47
Revert "Fix doc preview height to use min-height"
marwan-hasan-12 Apr 21, 2026
e993277
New Quizzes duplicates should not be published
mark-tc-mcdermott Mar 19, 2026
5bd3c04
Add Canvas.load_consul_subtree helper
rmsy Apr 17, 2026
4858140
Migrate outgoing_mail.yml to Consul
rmsy Apr 22, 2026
c089ac3
fix leaked React roots in AssignmentGroup tests
jbutte Apr 22, 2026
0516a77
Remove prefer_original_client_id LTI flag
smcgee31 Apr 22, 2026
c3dbadc
Use app/app_id
Hawkbawk Apr 15, 2026
813cb47
Remove disable_graphql_authentication flag
smcgee31 Apr 22, 2026
a030ffc
Disable UUID access when flags are on without removing UUID
Apr 13, 2026
c11c8b2
disable widget interactions in customization mode
ahmedselim-hue Apr 21, 2026
547cb83
Add default discussion settings feature & permissions
Feb 17, 2026
4756a0b
Add permissions for the Course Settings Navigation & Feature Options …
Mar 31, 2026
c9e56a1
make another round of redesign improvements
cguanzon Apr 22, 2026
5d4a6c6
Revert "deduplicate quiz attempts in classic quizzes"
sipulalaci Apr 23, 2026
4d3dd7b
fix(a11y): SR alerts for caption add/delete and file selection
patrikgerzsenyi Apr 21, 2026
c72d6a8
Add restrictions in content imports
Apr 13, 2026
7190c9b
Batch grading period loading in GraphQL loader
Gazuru Apr 20, 2026
8a5bdb8
Add independant setting for Course Details tab in Settings
Apr 16, 2026
74f517b
bump platform-ibump platform-institutional-tagging to 6.2.0
david-hajnal Apr 22, 2026
9ab05f7
bump platform-institutional-tagging to 6.3.0
david-hajnal Apr 23, 2026
3a44da3
Consent update package no.2
subpardaemon Apr 21, 2026
c3d3f5d
update ko translation
Apr 23, 2026
5ed284b
update ko translation
Apr 23, 2026
8100230
Fix cross-shard user file links in export packages
Ardena Apr 23, 2026
7bbdcca
Support start_at/end_at params in enrollments_api#bulk_enrollment
JacksonHowe Apr 22, 2026
81dee8d
fix StudentCell props value
Apr 20, 2026
cf78a12
Stop auto-favoriting new courses for stale users
Gazuru Apr 17, 2026
81902f3
pass rcs config directly to AMS
samanthaernst Apr 17, 2026
37f8e5e
Add example to enrollments_api#bulk_enrollment docs
JacksonHowe Apr 23, 2026
c727b2b
Add logging to session token parsing
westonkd Apr 23, 2026
3d0aa19
Fix overlapping mastery path ranges at 100%
Gazuru Apr 16, 2026
cc20909
Fix requirement selector to match by id not name
marwan-hasan-12 Apr 21, 2026
f99c1ec
fix intermittent window is not defined in vitest
jbutte Apr 23, 2026
290c217
Enable overlaying of local template registrations
pfgray Apr 16, 2026
6cb3d80
Update AssignmentOverrideApplicator to support Peer Reviews
instout Apr 3, 2026
648b421
Prevent Updating Assignment Due Date via Edit Modal
instout Apr 13, 2026
b6bab95
fix location based tag for file preview
Apr 23, 2026
0f0c205
Add tier_2_visible_on hook to oak_visible_on_hook
peterpopovics-instructure Apr 23, 2026
3a191b7
fix: disable drag n drop for assignments with peer review
meister245 Apr 23, 2026
a435ce6
Filter student widgets out of educator dashboard
jasonxris Apr 22, 2026
de5a180
Filter todo items by course
jasonxris Apr 22, 2026
efdcb89
Remove aslaughter from pr assignment
maths22 Apr 23, 2026
57b70c1
fix: filter external URLs from attachment ID extraction
Apr 20, 2026
aae6a6e
avoid ivar name collisions in SAMLController
ccutrer Apr 23, 2026
8bd9ed5
fix the failing test for content_spec.rb
Apr 23, 2026
e7b2c6b
Consume platform-ui instui-bindings package
drakeaharper Apr 17, 2026
f5a3b6c
[i18n] Update package translations
Apr 24, 2026
615c1f2
[i18n] Update canvas-media translations.
Apr 24, 2026
7240d26
add partial index on course_account_associations
foldesimi Apr 23, 2026
01f6ff4
spec: add e2e tests for a11y course checker admin dashboard
AdamJelenszky Apr 22, 2026
08bf724
spec: fix flaky ModuleProgressionLoader spec
jbutte Apr 24, 2026
13b60c4
update ko translation
Apr 24, 2026
2583500
update ko translation
Apr 24, 2026
7162a8d
Live events for discussion reply edit/delete
braysch Mar 13, 2026
9da75b3
fix: modify tab title for student peer review
meister245 Apr 22, 2026
cb76361
Inst categories and tags inside can be mixed by state.
viktor-duka-inst Apr 22, 2026
4157db2
fix flaky NewStudentGroupModal test
jbutte Apr 24, 2026
0e7e71c
deduplicate quiz attempts in classic quizzes
kaibjorkman Mar 18, 2026
bf605b6
spec: Reorganize widget_dashboard specs into subdirs
June-eoh Apr 23, 2026
9fad4f0
bundle update rubocop
ccutrer Apr 21, 2026
fd40428
bundle update oj
ccutrer Apr 21, 2026
6f8b0d5
squash old migrations 202512
ccutrer Mar 18, 2026
7af5e6d
Add Notebook tab to course navigation
sarah-gerard Apr 23, 2026
bd32b08
improve tabs controller for custom nav menu links
evanbattaglia Apr 21, 2026
88f531a
show unread count visually in Recent Activity
ahmedselim-hue Apr 22, 2026
07e4e73
[BCE] create external ref during update if it doesnt exists yet
danieltorok-instructure Apr 23, 2026
3d79d70
update ko translation
Apr 27, 2026
08d9dae
Text change for the CPF to AP migration info box
scott-Instructure Apr 24, 2026
1a16b92
update ko translation
Apr 27, 2026
62a1355
fix flaky NewStudentGroupModal test again
jbutte Apr 24, 2026
9acfbe0
Migrate notification_service.yml to Consul
rmsy Apr 23, 2026
054c048
migrate type-checking from tsc to tsgo (TS7)
aaronshaf Apr 23, 2026
07b6584
Add flag for cross-domain file access
westonkd Apr 27, 2026
b1d9d4e
improve edit page to match redesigns
cguanzon Apr 23, 2026
55cf5da
add i18next: migrate 57 files across 35 features
aaronshaf Apr 21, 2026
46ad0c3
Add tier_1_visible_on_hook to study_assist flag
ericsaupe Apr 23, 2026
abc9a72
Add V2 auth token support to LLM Conversation Service
jason-instructure Apr 21, 2026
32610e5
Use cache and/or secondary read replica in AccountDomain lookup
Apr 27, 2026
b8d30ac
Fire Pendo events on flashcard thumbs
ericsaupe Apr 27, 2026
e239785
[i18n] Update package translations
Apr 28, 2026
b50a3d7
Batch enrollment queries for course permissions
Gazuru Apr 24, 2026
b523762
Add missing translations for educator todo widget
vetraz Apr 23, 2026
51a23ac
Fix Item Banks link in non-English locales
moe-hajjaj Apr 21, 2026
bca7784
Extend FF for inst tagging to subaccount level.
viktor-duka-inst Apr 28, 2026
5e97c2f
fix(a11y): improve caption creator accessibility
patrikgerzsenyi Apr 20, 2026
774c2d4
Change inst tagging permission to account level.
viktor-duka-inst Apr 28, 2026
9501935
Fix cross-origin postMessage handling in media player iframe
pzaj-inst Apr 27, 2026
a1a47e3
Fetch peerReviewSubAssignment via Gradebook GraphQL
Apr 24, 2026
3817d54
update ko translation
Apr 28, 2026
36b770b
update ko translation
Apr 28, 2026
ddfb954
keep focus in textarea when sending messages
cguanzon Apr 27, 2026
7791d0e
Add context_code to todo item API response
vetraz Apr 27, 2026
2edd85b
remove migration that deletes a Notification incorrectly
jstanley0 Apr 27, 2026
149600e
remove some dead code from Notification
jstanley0 Apr 27, 2026
f792e59
Emit course completion events to Kafka
JacksonHowe Apr 17, 2026
aa3ee98
Recalc stale admin enrollment states
ericsaupe Apr 22, 2026
9020362
Add feature flag for UUID verifier usage
westonkd Apr 27, 2026
bec7cc5
Log when changes happen to inherited registrations
tucker-m Apr 25, 2026
556252f
Show activation changes in registration history
Hawkbawk Apr 17, 2026
22cb392
Invalidate history cache after registration mutations
Hawkbawk Apr 17, 2026
2e4efe4
Add Peer Reviews to Recent Feedback
instout Apr 24, 2026
c65f2db
allow deletion of inherited apps
xandroxygen Apr 15, 2026
7809042
Use DrawerLayout for study tools tray
ericsaupe Apr 27, 2026
b9ddf64
spec: Add a way to log things about the DB before/after tests run
tucker-m Apr 16, 2026
5267cf9
Add spec for CoursePermissionsPreloader
Gazuru Apr 28, 2026
656c97e
Fix checkpoint due dates missing from To-Do after copy
Gazuru Apr 27, 2026
b12b4a5
Fix API documentation redirect edge cases
evatapai Apr 27, 2026
d42433b
add pagination to grading_rubrics api endpoint
chanoto89 Apr 24, 2026
3ff1fa4
Fix todo list crash when points_possible is null
ericsaupe Apr 28, 2026
4c1f5ab
remove redundant role from course aside menu
ahmedselim-hue Apr 27, 2026
5d5bad1
fix deep linking response crash
evanbattaglia Apr 24, 2026
38e889c
[i18n] Update package translations
Apr 29, 2026
dec3bea
[i18n] Update RCE translations.
Apr 29, 2026
6f38463
Replace string workflowstate with enum in inst tagging
viktor-duka-inst Apr 27, 2026
1ca4b24
Expose horizon_account in sub-accounts API include
Apr 22, 2026
ca0932b
Skip homerooms API call without course view permission
marwan-hasan-12 Apr 20, 2026
4f5bf55
update ko translation
Apr 29, 2026
e00f2be
update ko translation
Apr 29, 2026
a225ccb
Fix nondev JS error
subpardaemon Apr 29, 2026
91a432c
Add access token expiration reminder email
smcgee31 Apr 20, 2026
c551c77
consume @instructure/platform-nutrition-facts
drakeaharper Apr 27, 2026
e57dd18
replace eslint with oxlint
aaronshaf Apr 28, 2026
6e669b2
re-enable skipped ui-media-player tests for InstUI v11
aaronshaf Apr 29, 2026
e9bcddc
Sanitize auto-grade error messages shown to users
dwilli77 Apr 15, 2026
679c8d4
show letter grade when scored is zero
dwilli77 Apr 13, 2026
0fcd0a4
Fix gradebook history filter for checkpoints
dwilli77 Apr 16, 2026
009e58d
fix rubric points diff not showing on create
chanoto89 Apr 27, 2026
7094148
remove reference to nonexistent mappings file
jstanley0 Apr 29, 2026
57941aa
stop deleting past attachment associations
spencerolson Apr 1, 2026
50bcbaa
Add aria-label to peer review icon
Apr 29, 2026
50518ca
refactor rubric form nested tables & gen criteria
chanoto89 Mar 31, 2026
dec5418
implement tabbed AI Experience show page
cguanzon Apr 28, 2026
d8be436
pass disable_keyboard_shortcuts setting to speedgrader 2
kaibjorkman Apr 9, 2026
375560f
Add TeacherTodoMetricsQuery for segmented grading metrics
jasonxris Apr 28, 2026
db3d095
Extract shared notebook code to @canvas/notebook
sarah-gerard Apr 24, 2026
015028a
Add study_assist endpoint backed by Cedar
ericsaupe Apr 21, 2026
65ef518
fix educator_dashboard_user? caching bugs
fmarcso Apr 29, 2026
a5c577f
add cascade-restore indexes for institutional tags
david-hajnal Apr 28, 2026
726aa16
Fix duplicate expand buttons on bar chart
Apr 28, 2026
c4f6a97
Render gradebook view directly instead of redirect
Apr 28, 2026
e47cb12
spec: add e2e tests for table related a11y checker rules
AdamJelenszky Apr 28, 2026
318f2ad
Add size_bytes field to GraphQL File type
Apr 29, 2026
436d7c3
use permission system + include[] in a11y APIs
fmarcso Apr 30, 2026
1ec91e5
add grade post policy tray to individual gradebook
Apr 3, 2026
3c67cd1
Revert "use permission system + include[] in a11y APIs"
fmarcso Apr 30, 2026
512ad62
spec: add e2e tests for low contrast a11y checker rule
AdamJelenszky Apr 29, 2026
d7328a4
Fix courseProgression null in multi-course query
Gazuru Apr 29, 2026
6c9b890
Fix text overlap in rubric InstructorScore label
hossamg-122 Apr 28, 2026
b337fb4
link caption status text to language name via aria-describedby
patrikgerzsenyi Apr 7, 2026
06213fa
update ko translation
Apr 30, 2026
1c9f0bb
update ko translation
Apr 30, 2026
8ff2638
Merge branch 'master' into jab/live-events-classic-quiz-no-assn-new-e…
JoshBothell May 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
194 changes: 194 additions & 0 deletions .claude/skills/create_commit_msg/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,194 @@
---
name: create_commit_msg
description: Help create a well-formatted git commit message following Canvas LMS conventions
disable-model-invocation: true
---

# Create Commit

Help create a well-formatted git commit message following Canvas LMS conventions.

## Format Requirements

**Title line** (required):
- Maximum 60 characters
- Concise summary of the change
- Imperative mood (e.g., "Fix bug" not "Fixed bug")

**Body** (required for non-trivial changes):
- Each line maximum 60 characters
- Explain WHY the change was made
- Include technical details and context
- Describe what was changed (if not obvious from title)
- Keep it concise but detailed
- Avoid redundant information

**Ticket reference** (required):
- Use `refs TICKET-ID` for general work
- Use `Fixes TICKET-ID` for bug fixes
- Use `closes TICKET-ID` for completing features
- If ticket is unknown, prompt user for it

**Feature flag** (required):
- Use `flag=flag_name` if a feature flag is involved
- Use `flag=none` if no flag is needed

**Test plan** (required):
- Include manual testing steps for QA
- Focus on user-facing verification steps
- Be specific about expected results
- Include different scenarios/edge cases
- Don't mention automated tests (always implied)

## Instructions for Claude

⚠️ **CRITICAL: NEVER AUTOMATICALLY COMMIT** ⚠️
- This command ONLY generates the commit message
- DO NOT run `git commit` or any commit commands
- ONLY display the message to the user
- ALWAYS ask for explicit confirmation before committing
- Wait for user approval before taking any git actions
- **Each invocation requires NEW explicit approval** — prior
approval in the same session does NOT carry over. Even if
the user approved a commit earlier in this conversation,
you MUST ask again for each new invocation of this command.

When the user invokes this command:

1. **Gather information**:
- Review ONLY staged changes: `git diff --staged`
- Check staged files: `git status`
- DO NOT look at unstaged changes (`git diff` without
`--staged`) — only staged content is being committed
- **If nothing is staged, stop immediately** and tell
the user there is nothing to commit
- Identify what was changed and why
- If ticket number or feature flag is unknown, ask
for BOTH in a single message (not separately)

2. **Generate commit message**:
- Title: 60 chars max, imperative mood
- Body: 60 chars per line, explain the "why"
- Include technical details and context
- Add ticket reference (refs/Fixes/closes)
- Add flag reference (flag=name or flag=none)
- Create detailed test plan with manual steps

3. **Format**:
```
Short title (max 50 chars)

Body paragraph explaining the change. Each line max
65 chars. Explain why this change was needed and what
it fixes or improves.

Additional context about the implementation if needed.
Break into multiple paragraphs for readability.

Changes:
- Bullet point summary of key changes (optional)
- Keep bullets concise but informative
- Focus on what, not how

refs TICKET-1234
flag=feature_flag_name

Test plan:
Setup:
- Setup step 1
- Setup step 2

Testing:
- Test step 1 with expected result
- Test step 2 with expected result
- Verify edge case X
- Verify edge case Y

Expected Results:
- Clear description of what should happen
```

4. **Display message and get approval**:
- Show the complete generated commit message in a code block
- DO NOT commit anything at this stage
- Ask: "Would you like me to commit these changes with
this message?"
- If user says yes, THEN run the git commit command
using a heredoc to preserve formatting:
```
git commit -m "$(cat <<'EOF'
Title here

Body here
EOF
)"
```
- NEVER use `--no-verify` to skip hooks
- If user requests changes, regenerate the message
- NEVER commit without explicit user confirmation

## Example (Generic)

```
Add validation for email input field

Email addresses were not being validated before submission,
allowing invalid formats to be saved to the database. This
caused downstream errors in notification systems.

Added client-side validation using regex pattern and
server-side validation in the controller. Invalid emails
now show an error message and prevent form submission.

Changes:
- Add email format validation to user form
- Add server-side validation in UsersController
- Display error message for invalid email format
- Add validation tests for edge cases

refs COURSE-1234
flag=none

Test plan:
Setup:
- Navigate to user profile edit page as any user role

Testing:
- Enter valid email (user@example.com) and verify it saves
- Enter invalid email (notanemail) and verify error appears
- Enter email without @ symbol and verify error appears
- Enter email without domain and verify error appears
- Try submitting form with invalid email via console
- Verify server rejects invalid email with proper error
- Test with very long email address (255+ chars)
- Verify email validation works for new user creation

Expected Results:
- Valid emails save successfully without errors
- Invalid emails show clear error message and block save
- Server validation prevents bypassing client validation
- Error messages are clear and actionable
```

## Command Workflow

1. User invokes `/create_commit_msg`
2. Claude reviews ONLY staged changes (`git diff --staged`)
3. Claude asks for ticket number (if needed)
4. Claude asks about feature flags (if needed)
5. Claude generates and displays the commit message
6. **Claude asks: "Would you like me to commit with this
message?"**
7. User reviews and approves OR requests changes
8. Only after approval: Claude runs git commit command

**Important**: Steps 1-6 MUST complete before any git commit
command is executed. The user must explicitly approve.

## Notes

- Keep commit messages focused on one logical change
- If changes are unrelated, create separate commits
- Test plan should be thorough but realistic for QA
- Include accessibility testing when UI changes are made
- Specify browser/environment requirements if relevant
64 changes: 64 additions & 0 deletions .claude/skills/ketchup/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
---
name: ketchup
description: Rebuild context after /clear by analyzing uncommitted changes across Canvas LMS and all plugin repositories
disable-model-invocation: true
argument-hint: [optional: "commits" to include committed changes]
---

I just cleared context. Help me ketchup by analyzing all uncommitted changes.

## Repository Changes

The script has gathered git status and diffs from the Canvas LMS main repository and all plugin subrepositories. Here's all the data:

!`.claude/skills/ketchup/get-diffs.sh $ARGUMENTS`

## Your Task

Analyze the repository changes above and provide a comprehensive summary:

### 1. Identify What's Being Worked On
Based on the nature of changes across all repositories, infer:
- What feature or task is being implemented
- The scope and purpose of the changes
- Any patterns (e.g., refactoring, bug fix, new feature, test updates)

### 2. Assess Progress
Determine if the changes are:
- Complete and ready for commit
- In progress with more work needed
- Just started/exploratory

### 3. Key Files and Locations
List the most important files being modified with their paths and relevant line numbers.
For example: `app/models/user.rb:45-67`

### 4. Likely Next Steps
Based on incomplete work or patterns in the changes, suggest what the developer might work on next.

### 5. Committed vs Uncommitted (if applicable)
If commit information was requested and included, note which changes are already committed in addition
to still uncommitted.

## Analysis Guidelines

- **Focus on actual code changes**, not just filenames
- **Consider relationships** between changes (e.g., model + controller + view + test)
- **Look for TODOs or incomplete implementations** in the diffs
- **Identify missing pieces** (e.g., tests for new features, migrations for schema changes)
- **Be specific** with file paths and line numbers when referencing code
- **Keep the summary concise** but comprehensive

## Important Notes

- The get-diffs.sh script handles all git operations without consuming tokens
- It works from any directory within Canvas LMS (main repo or plugin subdirectory)
- Plugin repositories under `gems/plugins/*` are separate git repositories
- By default, only uncommitted changes are analyzed
- Pass "commits" or "committed" in $ARGUMENTS to also analyze recent commits

## Example Usage

- `/ketchup` - Analyzes only uncommitted changes
- `/ketchup commits` - Analyzes both uncommitted changes and recent commits
- `/ketchup some changes have been committed` - Also includes commit analysis
Loading
Loading