Inconsistent results from Reporting API when defining segments using pageTitle =^ (starts with)

We are encountering unexplainable inconsistency in the Matomo API responses when segmenting data using pageTitle prefixes.

Please see the query examples below and their Matomo responses, and the subsequent questions.

Notes:

1 - We do not utilize the Matomo Javascript at all, but push all event data directly to the Matomo Tracking API using custom application code, whereby we explicitly specify the title using the action_name= URL parameter.

2 - None of the segments used in the queries below are pre-defined via the Matomo web UI and it is understood/presumed that it is not necessary to do so, that if the segment is not cached, it will be created in order to produce the appropriate query response.

3 - In the examples below, the query URLs have been sanitized and the JSON response from Matomo has been pruned to only show the most relevant fields, which provide the particular values needed by our application. All queries reference the same site ID.

Matomo version: 4.2.1
MySQL version: 5.5.68-MariaDB
PHP version: 7.3.19
utf8mb4 used throughout

Query examples and responses:

1 - Segment: pageTitle == “PRODUCTION / IDA / FILES / FREEZE / FILE”:

curl -s -k "https://localhost/index.php?token_auth=*&format=json&date=2021-04-01&period=month&idSite=*&module=API&method=Actions.getPageTitles&segment=pageTitle%3D%3DPRODUCTION%20%2F%20IDA%20%2F%20FILES%20%2F%20FREEZE%20%2F%20FILE" 

[
{"label":" PRODUCTION \/ IDA \/ FILES \/ FREEZE \/ FILE","nb_visits":24,"nb_hits":53,"segment":"pageTitle==PRODUCTION%2B%252F%2BIDA%2B%252F%2BFILES%2B%252F%2BFREEZE%2B%252F%2BFILE"}
]

2 - Segment: pageTitle =^ “PRODUCTION / IDA / FILES / FREEZE / FILE”:

curl -s -k "https://localhost/index.php?token_auth=*&format=json&date=2021-04-01&period=month&idSite=*&module=API&method=Actions.getPageTitles&segment=pageTitle%3D%5EPRODUCTION%20%2F%20IDA%20%2F%20FILES%20%2F%20FREEZE%20%2F%20FILE" 

[
{"label":" PRODUCTION \/ IDA \/ FILES \/ FREEZE \/ FILE","nb_visits":26,"nb_hits":55,"segment":"pageTitle==PRODUCTION%2B%252F%2BIDA%2B%252F%2BFILES%2B%252F%2BFREEZE%2B%252F%2BFILE"}
]

3 - Segment: pageTitle =^ “PRODUCTION / IDA / FILES / FREEZE /”:

curl -s -k "https://localhost/index.php?token_auth=*&format=json&date=2021-04-01&period=month&idSite=*&module=API&method=Actions.getPageTitles&segment=pageTitle%3D%5EPRODUCTION%20%2F%20IDA%20%2F%20FILES%20%2F%20FREEZE%20%2F" 

[
{"label":" PRODUCTION \/ IDA \/ FILES \/ FREEZE \/ FILE","nb_visits":26,"nb_hits":55,"segment":"pageTitle==PRODUCTION%2B%252F%2BIDA%2B%252F%2BFILES%2B%252F%2BFREEZE%2B%252F%2BFILE"},
{"label":" PRODUCTION \/ IDA \/ FILES \/ FREEZE \/ FOLDER","nb_visits":22,"nb_hits":30,"segment":"pageTitle==PRODUCTION%2B%252F%2BIDA%2B%252F%2BFILES%2B%252F%2BFREEZE%2B%252F%2BFOLDER"}
]

4 - Segment: pageTitle =^ "PRODUCTION / IDA / FILES / FREEZE ":

curl -s -k "https://localhost/index.php?token_auth=*&format=json&date=2021-04-01&period=month&idSite=*&module=API&method=Actions.getPageTitles&segment=pageTitle%3D%5EPRODUCTION%20%2F%20IDA%20%2F%20FILES%20%2F%20FREEZE%20" 

[
{"label":" PRODUCTION \/ IDA \/ FILES \/ FREEZE \/ FILE","nb_visits":22,"nb_hits":40,"segment":"pageTitle==PRODUCTION%2B%252F%2BIDA%2B%252F%2BFILES%2B%252F%2BFREEZE%2B%252F%2BFILE"},
{"label":" PRODUCTION \/ IDA \/ FILES \/ FREEZE \/ FOLDER","nb_visits":20,"nb_hits":28,"segment":"pageTitle==PRODUCTION%2B%252F%2BIDA%2B%252F%2BFILES%2B%252F%2BFREEZE%2B%252F%2BFOLDER"}
]

5 - Segment: pageTitle =^ “PRODUCTION / IDA / FILES / FREEZE”:

curl -s -k "https://localhost/index.php?token_auth=*&format=json&date=2021-04-01&period=month&idSite=*&module=API&method=Actions.getPageTitles&segment=pageTitle%3D%5EPRODUCTION%20%2F%20IDA%20%2F%20FILES%20%2F%20FREEZE" 

[
{"label":" PRODUCTION \/ IDA \/ FILES \/ FREEZE \/ FILE","nb_visits":22,"nb_hits":40,"segment":"pageTitle==PRODUCTION%2B%252F%2BIDA%2B%252F%2BFILES%2B%252F%2BFREEZE%2B%252F%2BFILE"},
{"label":" PRODUCTION \/ IDA \/ FILES \/ FREEZE \/ FOLDER","nb_visits":20,"nb_hits":28,"segment":"pageTitle==PRODUCTION%2B%252F%2BIDA%2B%252F%2BFILES%2B%252F%2BFREEZE%2B%252F%2BFOLDER"}
]

6 - Segment: pageTitle =^ “PRODUCTION / IDA / FILES / FREEZ”:

curl -s -k "https://localhost/index.php?token_auth=*&format=json&date=2021-04-01&period=month&idSite=*&module=API&method=Actions.getPageTitles&segment=pageTitle%3D%5EPRODUCTION%20%2F%20IDA%20%2F%20FILES%20%2F%20FREEZ" 

[
{"label":" PRODUCTION \/ IDA \/ FILES \/ FREEZE \/ FILE","nb_visits":27,"nb_hits":56,"segment":"pageTitle==PRODUCTION%2B%252F%2BIDA%2B%252F%2BFILES%2B%252F%2BFREEZE%2B%252F%2BFILE"},
{"label":" PRODUCTION \/ IDA \/ FILES \/ FREEZE \/ FOLDER","nb_visits":22,"nb_hits":30,"segment":"pageTitle==PRODUCTION%2B%252F%2BIDA%2B%252F%2BFILES%2B%252F%2BFREEZE%2B%252F%2BFOLDER"}
]

Questions:

1 - Why does the first == (equals) query not produce the same results as the second =^ (starts with) query, where they are identical except for the pageTitle comparison operator? Surely it is always true that a string starts with itself.

2 - Why do the last 4 =^ (starts with) queries not report the same results, when they should match the same set of event page titles, since the event page titles all start with all of the variant prefix strings?

3 - Why are the pageTitle values in the JSON output double URL encoded? And why is there URL encoding at all, since they are valid JSON string value characters? I would expect the JSON output to be either:

"segment":"pageTitle==PRODUCTION%20%2F%20IDA%20%2F%20FILES%20%2F%20FREEZE%20%2F%20FILE"

or

"segment":"pageTitle==PRODUCTION / IDA / FILES / FREEZE / FILE"