{"record":{"id":"8724153537612867","repo":"instructure/canvas-lms","slug":"invalid-status-status-for-admin","errorCode":null,"errorMessage":"Invalid status #{status} for admin","messagePattern":"Invalid status #(.+?) for admin","errorType":"exception","errorClass":"ImportError","httpStatus":null,"severity":"error","filePath":"lib/sis/admin_importer.rb","lineNumber":68,"sourceCode":"      def initialize(batch, root_account, logger)\n        @batch = batch\n        @root_account = root_account\n        @account = root_account\n        @logger = logger\n        @success_count = 0\n        @roll_back_data = []\n        @account_users_to_update_associations = Set.new\n        @account_users_to_set_batch_id = Set.new\n        @account_roles_by_account_id = {}\n      end\n\n      def process_admin(user_id: nil, account_id: nil, role_id: nil, role: nil, status: nil, root_account: nil)\n        raise ImportError, \"No user_id given for admin\" if user_id.blank?\n        raise ImportError, \"No status given for admin\" if status.blank?\n        raise ImportError, \"No role_id or role given for admin\" if role.blank? && role_id.blank?\n\n        state = status.downcase.strip\n        raise ImportError, \"Invalid status #{status} for admin\" unless %w[active deleted].include? state\n        return if @batch.skip_deletes? && state == \"deleted\"\n\n        get_account(account_id)\n        raise ImportError, \"Invalid account_id given for admin\" unless @account\n\n        get_role(role_id, role)\n        raise ImportError, \"Invalid role '#{role}' for admin\" if role.present? && !@role\n        raise ImportError, \"Invalid role_id '#{role_id}' for admin\" if role_id.present? && !@role\n\n        the_root_account = root_account_from_id(root_account) if root_account\n        raise ImportError, \"Invalid or unknown user_id '#{user_id}' for admin\" if root_account && !the_root_account\n\n        the_root_account ||= @root_account\n\n        user = get_user(user_id, the_root_account)\n        raise ImportError, \"Invalid or unknown user_id '#{user_id}' for admin\" unless user\n\n        if state == \"deleted\" && user.id == @batch&.user_id && @account == @root_account","sourceCodeStart":50,"sourceCodeEnd":86,"githubUrl":"https://github.com/instructure/canvas-lms/blob/1c9f0bb8013ed69c4f2efe11fd483025469b7e6c/lib/sis/admin_importer.rb#L50-L86","documentation":"Raised by SIS::AdminImporter#process_admin when the `status` value, after downcase/strip, is not one of the accepted states `active` or `deleted`. The importer only supports these two admin lifecycle states.","triggerScenarios":"status: 'Active ' is fine after strip, but status: 'actve', 'deactivated', 'inactive', 'pending', or a localized value will fail.","commonSituations":"Export from another SIS tool using different status vocabulary ('enabled'/'disabled'); typos in hand-edited CSVs; case-sensitive assumptions removed since casing/whitespace are normalized but spelling is not.","solutions":["Change the status value to exactly `active` or `deleted` (case/whitespace insensitive).","Map your source system's status vocabulary to Canvas's active/deleted before import.","Validate the status column against the allowed set before running the SIS import."],"exampleFix":"// before\nprocess_admin(user_id: 'u1', account_id: 'a1', role: 'AccountAdmin', status: 'inactive')\n// after\nprocess_admin(user_id: 'u1', account_id: 'a1', role: 'AccountAdmin', status: 'deleted')","handlingStrategy":"validation","validationCode":"ALLOWED = %w[active deleted]\nnormalized = status.to_s.downcase.strip\nraise ArgumentError, \"invalid status #{normalized}\" unless ALLOWED.include?(normalized)","typeGuard":null,"tryCatchPattern":"begin\n  importer.process_admin(user_id:, account_id:, role:, status:)\nrescue SIS::ImportError => e\n  logger.warn(\"admin row skipped: #{e.message}\")\nend","preventionTips":["Normalize/mapped status vocabulary at CSV generation time, not import time.","Validate the status column against active|deleted before upload.","Avoid free-text status values from upstream systems; use a fixed enum mapping."],"tags":["sis-import","invalid-enum","csv-validation"],"backgroundTag":"invalid-enum-value","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"}