BulkImport model causes database query during Rails application initialization
## Problem
The `BulkImport` model causes a database query to be issued during Rails application initialization (boot time). This is detected by the `InitializerConnections` guard and produces noisy warning output in application logs, making it harder to diagnose actual startup issues.
Support tickets:
* https://gitlab.zendesk.com/agent/tickets/701368
* https://gitlab.zendesk.com/agent/tickets/703625
* https://gitlab.zendesk.com/agent/tickets/703854
* https://gitlab.zendesk.com/agent/tickets/704521
## Root Cause
During application boot, the following chain triggers a SELECT against `pg_attribute` for the `bulk_imports` table:
1. `config/routes.rb` draws all routes inside `InitializerConnections.warn_if_database_connection`
2. Route loading causes `lib/api/bulk_imports.rb` to be evaluated
3. This autoloads `BulkImport` (app/models/bulk_import.rb)
4. The `state_machine :status` block at line 31 triggers ActiveRecord column introspection at class evaluation time
5. `SchemaCacheWithRenamedTable#columns` and `#columns_hash` execute a schema introspection query
The `InitializerConnections` guard logs the full query and backtrace as a warning to STDERR. While this does not block the query or prevent startup on its own, it produces significant log noise, and repeated warnings when opening the rails console.
## Stacktrace
```
InitializerConnections Query: SELECT a.attname, format_type(a.atttypid, a.atttypmod),
pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod,
c.collname, col_description(a.attrelid, a.attnum) AS comment,
attidentity AS identity,
attgenerated as attgenerated
FROM pg_attribute a
LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum
LEFT JOIN pg_type t ON a.atttypid = t.oid
LEFT JOIN pg_collation c ON a.attcollation = c.oid AND a.attcollation <> t.typcollation
WHERE a.attrelid = '"bulk_imports"'::regclass
AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum
InitializerConnections Backtrace: lib/gitlab/database/schema_cache_with_renamed_table.rb:26:in `columns'
InitializerConnections Backtrace: lib/gitlab/database/schema_cache_with_renamed_table.rb:30:in `columns_hash'
InitializerConnections Backtrace: app/models/bulk_import.rb:31:in `<class:BulkImport>'
InitializerConnections Backtrace: app/models/bulk_import.rb:6:in `<top (required)>'
InitializerConnections Backtrace: lib/api/bulk_imports.rb:140:in `block (2 levels) in <class:BulkImports>'
InitializerConnections Backtrace: lib/api/bulk_imports.rb:136:in `block in <class:BulkImports>'
InitializerConnections Backtrace: lib/api/bulk_imports.rb:42:in `<class:BulkImports>'
InitializerConnections Backtrace: lib/api/bulk_imports.rb:4:in `<module:API>'
InitializerConnections Backtrace: lib/api/bulk_imports.rb:3:in `<top (required)>'
InitializerConnections Backtrace: lib/api/api.rb:229:in `block (2 levels) in <class:API>'
InitializerConnections Backtrace: lib/api/api.rb:211:in `block in <class:API>'
InitializerConnections Backtrace: lib/api/api.rb:205:in `<class:API>'
InitializerConnections Backtrace: lib/api/api.rb:4:in `<module:API>'
InitializerConnections Backtrace: lib/api/api.rb:3:in `<top (required)>'
InitializerConnections Backtrace: config/routes/api.rb:8:in `draw_route'
InitializerConnections Backtrace: config/routes.rb:332:in `draw_all_routes'
InitializerConnections Backtrace: config/routes.rb:376:in `block (2 levels) in <top (required)>'
InitializerConnections Backtrace: config/routes.rb:7:in `block in <top (required)>'
InitializerConnections Backtrace: lib/initializer_connections.rb:19:in `block in warn_if_database_connection'
InitializerConnections Backtrace: lib/initializer_connections.rb:18:in `warn_if_database_connection'
InitializerConnections Backtrace: config/routes.rb:6:in `<top (required)>'
InitializerConnections Backtrace: config/environment.rb:7:in `<top (required)>'
```
## Expected Behavior
No database queries should be issued during application initialization. The `state_machine` definition in the `BulkImport` model should defer column introspection until the model is actually used at runtime.
## Possible Fix Directions (Duo Agent Platform)
1. Defer the `state_machine` status value resolution so it doesn't trigger schema lookups at class load time (e.g., use lazy evaluation for transition targets)
2. Ensure the API endpoint definition in `lib/api/bulk_imports.rb` does not eagerly reference the model class during route definition
3. Wrap column-dependent logic in `ActiveSupport.on_load(:active_record)` or similar deferred execution
## Relevant Files
- `app/models/bulk_import.rb` (line 31 - state_machine block)
- `lib/api/bulk_imports.rb` (API endpoint that triggers model autoload)
- `lib/initializer_connections.rb` (the guard that detects the issue)
- `lib/gitlab/database/schema_cache_with_renamed_table.rb` (where the query originates)
issue