instructure/canvas-lms · error
Rubric criteria not descriptive enough
Error message
Rubric criteria not descriptive enough
What it means
GradeService#call checks whether the supplied rubric matches Canvas's default (generic) template via rubric_matches_default_template?. A default-template rubric lacks the descriptive, assignment-specific criteria the external Cedar grading engine needs, so the service refuses to grade rather than send useless criteria. This is an input-quality guard for the AI grading pipeline.
Solutions
- Edit the rubric criteria to be assignment-specific (distinct descriptions, points, learning outcomes) so it no longer matches the default template
- Create a custom rubric for the assignment instead of the default one before running GradeService
- If you control the caller, validate the rubric upstream and surface a friendly 'rubric too generic' message to the instructor
Example fix
// before
rubric = Rubric.default_template_for(course)
GradeService.new(essay:, rubric:, rubric_association:).call
// after
rubric = Rubric.default_template_for(course)
rubric.update!(data: rubric.data.map { |c| c.merge(description: custom_description(c)) })
GradeService.new(essay:, rubric:, rubric_association:).call Defensive patterns
Strategy: validation
Validate before calling
raise 'rubric too generic' if GradeService.new(essay:, rubric:, rubric_association:).send(:rubric_matches_default_template?)
Type guard
rubric.present? && !rubric_matches_default_template?(rubric)
Try / catch
begin
GradeService.new(essay:, rubric:, rubric_association:).call
rescue RuntimeError => e
prompt_custom_rubric if e.message.include?('not descriptive enough')
end Prevention
- Customize rubric criteria before enabling AI grading
- Avoid applying the default template verbatim
- Validate rubric descriptions upstream in the UI
When it happens
Trigger: Calling GradeService.call(essay:, rubric:, ...) with a rubric whose criteria exactly match the stock default template (generic criteria like 'Description of criteria'); assignments created without customizing rubric criteria before enabling AI grading; rubric criteria never edited after duplicating the default template.
Common situations: Teachers applying the built-in default rubric to an assignment and turning on AI grading; importers cloning rubrics verbatim from templates; automated pipelines feeding placeholder rubrics.
Understand the failure class
Background: "Must be a positive integer", "Invalid value", "Unsupported": the invalid-argument-value error family, when a library rejects the value you pass — this error's family across 35 libraries.
Related errors
- Assignment Grade Error
- Submission must be at least 5 words long
- The AI response was not in the expected format. Please try…
- An unexpected error occurred while grading.
- Artifact required for assessing
AI-assisted analysis of instructure/canvas-lms@1c9f0bb801 (2026-09-15).
Data as JSON: /api/errors/bd922511fa2f017c.
Report an issue: GitHub.
Appendix: source
Thrown at app/services/grade_service.rb:36
# with this program. If not, see <http://www.gnu.org/licenses/>.
#
class GradeService
def initialize(assignment:, essay:, rubric:, root_account_uuid:, current_user:)
@assignment = assignment.to_s
@essay = essay.to_s
@rubric = rubric
@root_account_uuid = root_account_uuid
@current_user = current_user
@rubric_prompt_format = self.class.normalize_rubric_for_prompt(@rubric)
end
def call
@essay = sanitize_essay(@essay)
validate_essay_length(@essay)
if rubric_matches_default_template?
raise "Rubric criteria not descriptive enough"
end
cedar_rubric = build_cedar_rubric(@rubric)
begin
grading_results = CedarClient.grade_essay(
description: @assignment,
essay: @essay,
rubric: cedar_rubric,
feature_slug: "grading-assistance",
root_account_uuid: @root_account_uuid,
current_user: @current_user
)
map_grade_essay_results_to_canvas(grading_results, @rubric)
# These subclasses have static, user-safe messages and can be shown directly.
# If new CedarClientError subclasses are added with user-safe messages, add them here.
rescue InstructureMiscPlugin::Extensions::CedarClient::ValidationError,View on GitHub (pinned to 1c9f0bb801)