Rules
- SCP01: Disallowed domain
- SCP02: URL in allowed_domains
- SCP03: Improper response URL join
- SCP04: Improper response selector
- SCP05: lambda callback
- SCP06: Improper first match extraction
- SCP07: Redefined setting
- SCP08: No project USER_AGENT
- SCP09: robots.txt ignored by default
- SCP10: Incomplete project throttling
- SCP11: Improper setting definition
- SCP12: Imported setting
- SCP13: Incomplete requirements freeze
- SCP14: Unsupported requirement
- SCP15: Insecure requirement
- SCP16: Unmaintained requirement
- SCP17: Redundant setting value
- SCP18: No root stack
- SCP19: Non-root stack
- SCP20: Stack not frozen
- SCP21: No root requirements
- SCP22: Non-root requirements
- SCP23: Invalid scrapinghub.yml
- SCP24: Missing stack requirements
- SCP25: Unexisting requirements.file
- SCP26: requirements.file mismatch
- SCP27: Unknown setting
- SCP28: Deprecated setting
- SCP29: Setting needs upgrade
- SCP30: Removed setting
- SCP31: Missing setting requirement
- SCP32: Wrong setting method
- SCP33: Base setting use
- SCP34: Missing changing setting
- SCP35: No-op setting update
- SCP36: Invalid setting value
- SCP37: Unpicklable setting value
- SCP38: Low project throttling
- SCP39: No contact info
- SCP40: Unneeded setting get
- SCP41: Unneeded import path
- SCP42: Unneeded path string
- SCP43: Unsupported Path object
- SCP45: Unsafe meta copy
- SCP46: Raw Zyte API params
- SCP47: Unimportable component
- SCP48: Deprecated spider attribute
- SCP49: Deprecated import
- SCP50: Removed import
- SCP51: Deprecated argument
- SCP53: Hardcoded secret
- SCP54: Unneeded start method
- SCP58: Documentation comment
- SCP59: Lowercase setting
- SCP63: End-of-life Python
- SCP64: Stack Python mismatch
- SCP65: Python not frozen
- SCP67: start_url instead of start_urls
- SCP74: Deprecated API
- SCP75: Removed API
- SCP76: Incompatible requirement
- SCP77: Discouraged API