instructure/canvas-lms · error · ImportError

No status given for institutional tag category #

Error message

No status given for institutional tag category #{sis_id}

What it means

Raised by SisImports::InstitutionalTagCategoryImporter#add_institutional_tag_category when the status argument is blank. Status is required for institutional tag categories because it controls whether the record is created/updated (active) or soft-deleted; the importer refuses rows without it before any database lookup.

Solutions

  1. Fill in the status cell ('active' or 'deleted') for the row whose sis_id appears in the message.
  2. Verify the CSV header names and column order match the current SIS institutional tag category spec.
  3. If the exporter omits status, default it to 'active' for new/updated rows before import.
  4. Re-run the SIS import.

Example fix

// before
add_institutional_tag_category('cat-1', 'Department Tags', 'desc', '')
// after
add_institutional_tag_category('cat-1', 'Department Tags', 'desc', 'active')
Defensive patterns

Strategy: validation

Validate before calling

raise ArgumentError, 'status is required' if status.blank?
add_institutional_tag_category(sis_id, name, description, status)

Try / catch

begin
  importer.add_institutional_tag_category(sis_id, name, description, status)
rescue SisImports::ImportError => e
  Rails.logger.warn("Skipping category #{sis_id}: #{e.message}")
end

Prevention

When it happens

Trigger: Calling add_institutional_tag_category(sis_id, name, description, nil) or with '' for status; a CSV row in the institutional_tag_categories file with an empty status cell; a broken column mapping that drops the status value.

Common situations: Export pipelines that omit status for unchanged rows; CSVs trimmed or transformed by another tool that strips trailing empty columns; template drift where status was renamed so the import reads an absent header.

Understand the failure class

Background: "must not be empty", "cannot be empty" — required-field validation errors across open-source libraries — this error's family across 41 libraries.

Related errors


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

Appendix: source

Thrown at lib/sis/institutional_tag_category_importer.rb:44

      SisBatchRollBackData.bulk_insert_roll_back_data(importer.roll_back_data)
      importer.success_count
    end

    class Work
      attr_accessor :success_count, :roll_back_data

      def initialize(batch, root_account, logger)
        @batch = batch
        @root_account = root_account
        @logger = logger
        @success_count = 0
        @roll_back_data = []
      end

      def add_institutional_tag_category(sis_id, name, description, status)
        raise ImportError, "No category_id given for an institutional tag category" if sis_id.blank?
        raise ImportError, "No name given for institutional tag category #{sis_id}" if name.blank?
        raise ImportError, "No status given for institutional tag category #{sis_id}" if status.blank?
        raise ImportError, "Improper status \"#{status}\" for institutional tag category #{sis_id}" unless /\A(active|deleted)/i.match?(status)
        return if @batch.skip_deletes? && /deleted/i.match?(status)

        category = InstitutionalTagCategory.find_by(root_account_id: @root_account.id, sis_source_id: sis_id)
        category ||= InstitutionalTagCategory.new(account: @root_account,
                                                  root_account: @root_account,
                                                  sis_source_id: sis_id)

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

        if category.save
          data = SisBatchRollBackData.build_data(sis_batch: @batch, context: category)
          @roll_back_data << data if data
          @success_count += 1
          maybe_write_roll_back_data

View on GitHub (pinned to 1c9f0bb801)