instructure/canvas-lms · error

Fingerprint not found. #

Error message

Fingerprint not found. #{bundle_path} #{variant}

What it means

cache_for looks up a css fingerprint for a (bundle_path, variant) pair in the combined_checksums manifest keyed by '<bundle>.scss<separator>variant'. If the key is absent — the bundle isn't in the built manifest for that variant — it raises 'Fingerprint not found'. Callers like all_fingerprints_for will propagate this.

Solutions

  1. Run yarn run build:css so the new/renamed bundle is included in the checksums manifest
  2. Correct the bundle_path string in the calling code to match the actual scss file path (key is built as "#{bundle_path}.scss")
  3. Confirm the plugin/account css bundle is part of the build globs
  4. Check the variant name matches an actual variant in CONFIG['variants']

Example fix

// before
BrandableCSS.cache_for("bundles/speedgradeer", "new_styles_normal") # typo
// after
BrandableCSS.cache_for("bundles/speedgrader", "new_styles_normal")
Defensive patterns

Strategy: fallback

Validate before calling

key = "#{bundle_path}.scss"
raise 'unknown bundle' unless BrandableCSS.combined_checksums.key?([key, variant].join(sep))

Try / catch

begin
  BrandableCSS.cache_for(bundle_path, variant)
rescue RuntimeError => e
  raise unless e.message.start_with?('Fingerprint not found')
  Rails.logger.warn("unknown css bundle #{bundle_path}")
  nil
end

Prevention

When it happens

Trigger: brandable_css.cache_for('bundles/speedgrader', 'new_styles_normal') where the scss file isn't listed in the bundles_with_deps manifest for that variant (typo'd bundle path, plugin bundle not built, new bundle added without rebuilding).

Common situations: Adding a new .scss bundle and serving without rebuilding css; renaming an scss file while old code still references the old path; plugin css not compiled in the deploy.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


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

Appendix: source

Thrown at lib/brandable_css.rb:317

    # template is rendered at runtime
    def handlebars_index_json
      if defined?(ActionController) && ActionController::Base.perform_caching && defined?(@handlebars_index_json)
        return @handlebars_index_json
      end

      file = APP_ROOT.join(CONFIG.dig("indices", "handlebars", "path"))
      unless file.exist?
        raise "#{file.expand_path} does not exist. You need to run `yarn run build:css` before you can serve css."
      end

      @handlebars_index_json = file.read.rstrip
    end

    # bundle path should be something like "bundles/speedgrader" or "plugins/analytics/something"
    def cache_for(bundle_path, variant)
      key = ["#{bundle_path}.scss", variant].join(CONFIG["manifest_key_seperator"])
      fingerprint = combined_checksums[key]
      raise "Fingerprint not found. #{bundle_path} #{variant}" unless fingerprint

      fingerprint
    end

    def all_fingerprints_for(bundle_path)
      variants.index_with do |variant|
        cache_for(bundle_path, variant)
      end
    end
  end
end

View on GitHub (pinned to 1c9f0bb801)