# Contributor handoff — rails/rails

> Canonical page: https://codevetter.com/unpack/rails/agent-handoff

# Contributor handoff — rails/rails

Scanned commit be63fd9b4449505b90038acb9d51c88c02694e7e (2026-09-21). Generated by codevetter codevetter 1.12.0 on 2026-09-22.

Edit one component at a time and treat Railties configuration and the generator templates as a second component whenever a default changes. The safe test loop is that component's bin/test, plus an adapter rake task if the change touches SQL or jobs. Read the load_defaults comment before adding a flag. Do not add Active Support core extensions or new Active Job adapters. Assume GitHub Actions will not prove the change is green.
- Read first: AGENTS.md, README.md, the component README, rails.gemspec, railties/lib/rails/all.rb, and the load_defaults method in railties/lib/rails/application/configuration.rb. For a request bug, continue into default_middleware_stack.rb, route_set.rb, and the controller metal. For a persistence bug, continue into persistence.rb and connection_handling.rb. — [AGENTS.md](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/AGENTS.md) [README.md](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/README.md) [rails.gemspec](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/rails.gemspec) [railties/lib/rails/all.rb](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/railties/lib/rails/all.rb) [railties/lib/rails/application/configuration.rb#L96-L114](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/railties/lib/rails/application/configuration.rb#L96-L114)
- Components are meant to stay independently usable. A change that requires another framework must be guarded the way bcrypt and argon2 are (require: false) or the way rails/all.rb rescues a missing railtie. Releaser::FRAMEWORKS order is the dependency order used by packaging. — [README.md#L44-L55](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/README.md#L44-L55) [Gemfile#L29-L33](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/Gemfile#L29-L33) [railties/lib/rails/all.rb#L15-L21](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/railties/lib/rails/all.rb#L15-L21) [tools/releaser/lib/releaser.rb#L8-L22](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/tools/releaser/lib/releaser.rb#L8-L22)
- Run tests from the component directory: bin/test path/to_test.rb, bin/test path:line, or bin/test -i /method_name/. From the repo root the equivalents are rake <framework>:test, rake test, and rake smoke. Active Record SQL changes need bundle exec rake test:sqlite3 at minimum and the other adapters when the SQL differs. Active Job adapter changes need the matching test:<adapter> task. — [AGENTS.md](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/AGENTS.md) [Rakefile#L13-L80](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/Rakefile#L13-L80) [tools/test.rb#L1-L18](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/tools/test.rb#L1-L18)
- Toggle framework configuration in tests with Object#with after requiring active_support/core_ext/object/with. AGENTS.md forbids the manual save/restore pattern around class attributes such as ActionView::Base.remove_hidden_field_autocomplete. — [AGENTS.md](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/AGENTS.md)
- Every Ruby file starts with # frozen_string_literal: true. Bugfixes and features need a CHANGELOG.md entry at the top of that component. Assertions should prefer assert_not and, in view tests, assert_dom_equal. Style is bundle exec rubocop against the repo .rubocop.yml. — [AGENTS.md](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/AGENTS.md) [Gemfile#L47-L56](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/Gemfile#L47-L56)
- A new config flag is not done until load_defaults sets it in the newest version arm (currently 8.2), the upgrade initializer template under railties generators repeats it commented out, and guides/source/configuring.md mentions it. The steps are written at the top of load_defaults. Editing an older when arm changes behavior for apps that have not upgraded their load_defaults target. — [railties/lib/rails/application/configuration.rb#L96-L114](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/railties/lib/rails/application/configuration.rb#L96-L114) [railties/lib/rails/application/configuration.rb#L369-L401](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/railties/lib/rails/application/configuration.rb#L369-L401) [railties/lib/rails/generators/rails/app/templates/config/application.rb.tt#L11-L16](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/railties/lib/rails/generators/rails/app/templates/config/application.rb.tt#L11-L16)
- CONTRIBUTING.md says Active Support core-extension changes are generally rejected and should be proposed to Ruby instead, and that cosmetic-only patches are rejected. Active Job's queue_adapters.rb says new adapter pull requests are not accepted. — [CONTRIBUTING.md#L42-L48](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/CONTRIBUTING.md#L42-L48) [activejob/lib/active_job/queue_adapters.rb#L13](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/activejob/lib/active_job/queue_adapters.rb#L13)
- Security reports must not be opened as GitHub issues. .github/security.md and CONTRIBUTING.md both redirect to https://rubyonrails.org/security. Do not add exploit details to a public changelog while following that policy. — [.github/security.md#L1-L12](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/.github/security.md#L1-L12) [CONTRIBUTING.md#L10-L11](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/CONTRIBUTING.md#L10-L11) [README.md#L93-L96](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/README.md#L93-L96)
- The test runner is parallel. Tests that leak global configuration, routes, or Active Record connections across examples will flake even when they pass alone. Prefer the with helper and the existing test helper in that component (abstract_unit.rb or test_helper.rb) over process-global mutation. (inferred) — [AGENTS.md](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/AGENTS.md) [railties/lib/rails/test_unit/runner.rb#L25-L28](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/railties/lib/rails/test_unit/runner.rb#L25-L28)
- Generated-app behavior is owned by railties/lib/rails/generators, especially templates under rails/app/templates, not by the root Gemfile. The root Gemfile is the framework's own development bundle. Changing one without the other leaves rails new and the CI docker smoke (BUNDLE_WITHOUT=db:job:cable:storage) disagreeing. — [Gemfile#L1-L33](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/Gemfile#L1-L33) [railties/lib/rails/generators/rails/app/templates/Gemfile.tt#L21-L76](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/railties/lib/rails/generators/rails/app/templates/Gemfile.tt#L21-L76) [.github/workflows/rails-new-docker.yml#L11-L27](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/.github/workflows/rails-new-docker.yml#L11-L27)
- JavaScript changes in Action Cable need the npm scripts in actioncable/package.json (build, lint, test) in addition to the Ruby tests under actioncable/test. The root package.json only declares workspaces; it has no test script. — [package.json](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/package.json) [actioncable/package.json#L1-L40](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/actioncable/package.json#L1-L40)
- Current development line is 8.2.0.alpha. Changelog entries, npm package versions, and gemspecs are expected to stay on that version until tools/releaser's update_versions task rewrites them. Do not hand-bump a single gemspec. — [RAILS_VERSION](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/RAILS_VERSION) [actioncable/package.json#L3](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/actioncable/package.json#L3) [tools/releaser/lib/releaser.rb#L45-L48](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/tools/releaser/lib/releaser.rb#L45-L48)

Every claim links to its cited files at the pinned commit. Citations identify source evidence; they do not establish runtime correctness. Independent CodeVetter scan — not reviewed by upstream maintainers.

## Public product links

- [CodeVetter](https://codevetter.com/)
- [Download](https://codevetter.com/download)
- [Documentation](https://codevetter.com/docs/)
- [Source](https://github.com/Codevetter/codevetter)
