instructure/canvas-lms · error · ImportError

An institutional tag did not pass validation

Error message

An institutional tag did not pass validation (tag: #{tag_id}, error: #{tag.errors.full_messages.join(",")})

What it means

Save-failure path in SIS::InstitutionalTagImporter::Work#add_institutional_tag: InstitutionalTag#save returned false (model validations failed), so ImportError is raised embedding the tag's full_messages. Reports model-level validation failures back to the SIS batch.

Solutions

  1. Read the embedded error list (e.g. name too long, invalid characters) and fix the CSV values
  2. Check account-level constraints on institutional tags and re-import
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at lib/sis/institutional_tag_importer.rb:75 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of instructure/canvas-lms@1c9f0bb801 (2026-09-15). Data as JSON: /api/errors/19da723edb8558bc. Report an issue: GitHub.

Appendix: source

Thrown at lib/sis/institutional_tag_importer.rb:75

        tag = InstitutionalTag.find_by(root_account_id: @root_account.id, sis_source_id: tag_id)
        tag ||= InstitutionalTag.new(category:,
                                     root_account: @root_account,
                                     sis_source_id: tag_id)

        tag.name = name
        tag.description = description
        tag.sis_batch_id = @batch.id
        tag.workflow_state = /deleted/i.match?(status) ? "deleted" : "active"

        if tag.save
          data = SisBatchRollBackData.build_data(sis_batch: @batch, context: tag)
          @roll_back_data << data if data
          @success_count += 1
          maybe_write_roll_back_data
        else
          msg = "An institutional tag did not pass validation " \
                "(tag: #{tag_id}, error: #{tag.errors.full_messages.join(",")})"
          raise ImportError, msg
        end
      end

      private

      def maybe_write_roll_back_data
        return if @roll_back_data.count <= 1000

        SisBatchRollBackData.bulk_insert_roll_back_data(@roll_back_data)
        @roll_back_data = []
      end
    end
  end
end

View on GitHub (pinned to 1c9f0bb801)