{"record":{"id":"32fc696e8922b208","repo":"instructure/canvas-lms","slug":"canvas-career-permission-group-overrides-failed-e-message","errorCode":null,"errorMessage":"Canvas Career permission group overrides failed: #{e.message}","messagePattern":"Canvas Career permission group overrides failed: #(.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"lib/permissions.rb","lineNumber":136,"sourceCode":"            if perm_def[:group] && (override = label_overrides[perm_key]) && override[:group_label]\n              group_key = perm_def[:group]\n              group_overrides[group_key] = override[:group_label]\n            end\n          end\n\n          if group_overrides.any?\n            return base_groups.transform_values do |group_info|\n              group_key = base_groups.key(group_info)\n              if group_overrides[group_key]\n                group_info.merge(label: group_overrides[group_key])\n              else\n                group_info\n              end\n            end\n          end\n        end\n      rescue => e\n        Rails.logger.warn(\"Canvas Career permission group overrides failed: #{e.message}\")\n      end\n    end\n\n    base_groups\n  end\n\n  def self.group_info(group)\n    PERMISSION_GROUPS[group]\n  end\n\n  def self.group_label(group)\n    PERMISSION_GROUPS.dig(group, :label)&.call\n  end\nend\n","sourceCodeStart":118,"sourceCodeEnd":151,"githubUrl":"https://github.com/instructure/canvas-lms/blob/1c9f0bb8013ed69c4f2efe11fd483025469b7e6c/lib/permissions.rb#L118-L151","documentation":"A fallback warning in lib/permissions.rb when applying Canvas Career permission GROUP overrides raises an exception. The rescue logs e.message and returns base_groups, meaning career-specific permission group customizations are skipped and default group permissions are used.","triggerScenarios":"Building permission groups for a Canvas Career context where the group-override iteration raises — e.g. a group_info record missing fields, an association load failure, or malformed group permission data during group_info transformation.","commonSituations":"Career environments with partially migrated permission group records; custom plugin code raising inside the group override path; nil group/role objects when an expected career group does not exist on the account.","solutions":["Find the full backtrace in the Rails log around this warning (the message only contains e.message).","Inspect the career permission group data for the affected account and repair/normalize the offending group records.","Add nil-guards in the group override block for optional career group associations.","Capture the exception with Canvas::Errors so regressions are tracked instead of only warned."],"exampleFix":"// before\nrescue => e\n  Rails.logger.warn(\"Canvas Career permission group overrides failed: #{e.message}\")\n// after\nrescue => e\n  Rails.logger.warn(\"Canvas Career permission group overrides failed: #{e.message}\")\n  Canvas::Errors.capture(e, tags: { area: \"career_permissions\" })","handlingStrategy":"try-catch","validationCode":"groups = base_groups.select { |g| g.respond_to?(:group_info) && g.group_info.present? }\n# only apply overrides for well-formed groups","typeGuard":"def valid_career_group?(group)\n  group.present? && group.respond_to?(:group_info) &&\n    group.group_info.is_a?(Hash) && group.group_info[:permissions].present?\nend","tryCatchPattern":"begin\n  base_groups = apply_career_group_overrides(base_groups)\nrescue NoMethodError, ActiveRecord::StatementInvalid => e\n  Rails.logger.warn(\"Canvas Career permission group overrides failed: #{e.class}: #{e.message}\")\n  Canvas::Errors.capture(e)\n  base_groups # default group permissions\nend","preventionTips":["Validate career permission group records (group_info shape) before override application","Guard against nil/missing career groups on accounts","Send rescued exceptions to Canvas::Errors for visibility","Test group permission building against accounts without career groups enabled"],"tags":["permissions","canvas-career","rescue-fallback","permission-groups"],"backgroundTag":"api-error-response","analyzedSha":"1c9f0bb8013ed69c4f2efe11fd483025469b7e6c","analyzedAt":"2026-09-15T20:33:18.891Z","contentChangedAt":"2026-09-15T20:33:18.891Z","schemaVersion":2},"datasetVersion":"2026-09-23T02:17:17.105Z"}