expose verison words to do a more strict version check in rt-setup-database
don't not escape in BuildFormatString

it's not necessary and would cause double-escape bug(#17002)
validate user name on both "create" and "update"

see also #18722
update ModifyACL description in RT::Class

trs: for #21054 I believe your first intuition was correct; it's just changing the copy
Pull down recent translations from launchpad.

This also extracts a number of new translatable strings added between
4.0.8 and 4.0.9
check/shortcircuit _RecordNote's results in case it fails

because the following _SetTold depends on the success of _RecordNote.
see also #20489 for an example to trigger this(not a good one though)
Now that SubjectTag is a column, you should be able to sort by it
Restore a </form> tag mistakenly removed in 260239e
Tests showing incorrect BriefDescription for link transactions

The BriefDescription subs for AddLink and DeleteLink transactions
had code to handle a link value that was a string and not a URI,
but this test shows that the method doesn't return the expected
string.
Detect non-URI value for BriefDescription on transaction links

The AddLink and DeleteLink subs in BriefDescription relied on
$URI->Resolver to return false for a non-URI value, but it
returns the base object which evaluates to true. The FromURI
call explicitly returns undef if it can't determine the URI scheme
so use it in the evaluation.
Merge branch '4.0/display-link-strings-in-transaction-brief-description' into 4.0-trunk
Merge branch '4.0/check-record-note-results-in-correspond' into 4.0-trunk
typo of Told
Remove the indent from a non-code block in POD
Let list of headers used for one-time recipient suggestions be adjusted

Extensions or local customizations may want to add RT-Send-To or
Reply-To, or remove Bcc, From, etc.
Ensure that Custom Fields submitted are saved to the database.

There was a regression in 4.0.9 (a64a16d1c) which meant that even if you
had SeeQueue, CreateTicket, ModifyCustomField and SeeCustomField and the
custom field appeared for editing, it would be lost during the
submission.  If you had ShowTicket, it worked fine.
Check the id from the table and by loading the Object.

An optimization was added in a64a16d1c so that if you were trying to
find the "Custom Field Object" from a Ticket, it would shortcut and
return $ticket->Queue rather than loading $ticket->QueueObj->Id.

Unfortunately, $ticket->Queue is protected by ShowTicket while
$ticket->QueueObj->Id is protected by SeeQueue.  It's not uncommon in RT
for a user to be granted SeeQueue and CreateTicket but not be given
ShowTicket (a dropbox queue where you create tickets but then don't see
them anymore).

In this setup on 4.0.9, any custom field values entered on
Ticket/Create.html will be silently discarded because $ticket->Queue
returns undef. This results in the Custom Field not being found and
AddCustomFieldValue not saving it.

This was revealed in the RTIR test suite which tests just such a
scenario using Constituencies (you can submit a ticket that you then
can't see because it belongs to a separate Constituency).
Ignore bare disabled queues in the simple search.

Typing General into simple search results in a search for Queue =
'General', even if your General Queue is disabled.  You can still search
for queue:General and search in a disabled Queue.
Merge branch '4.0/simple-search-ignore-disabled-queues' into 4.0-trunk
Merge branch '4.0/customfieldlookupid-acl-regression' into 4.0-trunk