provide a builder for form labels to customize wrapping around I18n content
add I18n support for `:placeholder` HTML option is passed to form fields
just use the placeholder tag value if it is passed as a String
Cache the value of `changed_attributes` when calling `changes_applied`

`changes_applied` calles `changes`, which will call `changed_attributes`
multiple times in a loop. This method actually performs work now, so we
should cache the results while looping over it when we know it cannot
change.
Don't trim excess whitespace in pg #columns_for_distinct

Fixes #16623 introduced by https://github.com/rails/rails/commit/3d5a2019bcccc6fb01bee4811ca669f4383edb51
Fix guide anchor generation logic.

This could use in any translation because it's not limited to `[^a-z0-9]`.

Verify after this change, all guides still have same anchors.

[Robin Dupret & Juanito Fatas]
Merge pull request #16649 from Agis-/pg-columns-for-distinct

Fix postgresql adapter #columns_for_distinct trimming whitespace it shouldn't
CHANGELOG & improvements to #16649

* Require either FIRST or LAST qualifier for "NULLS ..."
* Require whitespace before "NULLS ..."
Merge pull request #16667 from JuanitoFatas/patch/anchor-generation

Fix guide anchor generation logic.
show stats for app/jobs
Raise ActiveJob::SerializationError when cannot serialize job arguments
Describe web-console in the release notes [ci skip]

I put a more up-to-date description of Web Console in the release notes.
I'm not really happy with the language, so if you guys can help me with
that I'll be grateful :)
Merge pull request #16671 from cristianbica/aj-raise-serialization-error

Raise ActiveJob::SerializationError when cannot serialize job arguments
Merge pull request #16674 from gsamokovarov/describe-web-console

Describe web-console in the release notes
[ci skip] Added documentation for has_many extension parameter
Grammer and spelling pass on web console release note. [CI SKIP]
Follow-up to #16560

For the sake of backward-compatibility, we need to make #instance_of?
return true for Fixnum. On the other hand, the method should still
give true for ActiveSupport::Duration itself which was not the case
before.
Skip #eql? tests on Rubinius for AS::Duration

Since Rubinius is relying on #instance_of? for its definition of #eql?
(http://git.io/MtmbbA) but ActiveSupport::Duration should behave like
is_a? it returns true with `Fixnum`.

Thus, for the moment, the last assertion is failing so we have to skip
this test.
Merge pull request #16676 from tgxworld/web_console_release_note_fixes

Grammer and spelling pass on web console release note. [CI SKIP]
Merge pull request #16675 from tomkadwill/has_many_documenting_extension_param

[ci skip] Added documentation for has_many extension parameter