|
55501
|
1924
|
9
|
2026-05-18T15:01:52.615894+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779116512615_m1.jpg...
|
Firefox
|
Work item search - Jira — Work
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormFileEditViewNavigateDOCKER881CodeLaravelRe PhpStormFileEditViewNavigateDOCKER881CodeLaravelRefactorRunToolsGitWindowEU (ssh)|DEV (-zsh)О $82HelpXIDOCKER (-zsh)"taskManager"connections"}"taskManager"], "pid": "Failed to poll for work: Error: No Li1 {"type": "log", "@timestamp" : "2026-05-18T13:02:06Z","tags" : ["error""pid":7, "message": "[ConnectionError]: getaddrinfo ENOTFOUND elasticsearch elasticsearch:9200"}{"type" : "log","@timestamp""2026-05-18T13:02:07Z""tags": ["warning"sticsearch", "data"], "pid":7,to revive connection: [URL_WITH_CREDENTIALS] "2026-05-18T13:02:07Z","tags" : ["warning", "elasticsearch","data"], "pid" :7,"message":"No livingconnections"}kibanans"1 {"type": "log""@timestamp": "2026-05-18T13:02:07Z""tags" : ["error""taskManager""taskManager"],"pid":7,"message" : "Failed to pollfor work: Error: No Livingconnections"}kibana1 {"type" : "log""@timestamp": "2026-05-18T13 :02:08Z", "tags" : ["error"icsearch".,"elast,"data"],"pid" :7, "message":"[ConnectionError]: getaddrinfo ENOTFOUND elasticsearch elasticsearch:9200"}kibana, "@timestamp" : "2026-05-18T13:02:10Z", "tags" : ["warning""elasticsearch", "data"], "pid":7, "message": "Unable to revive connection: [URL_WITH_CREDENTIALS] : "2026-05-18T13:02:10Z", "tags" : ["warning","elasticsearch", "data"], "pid" :7, "message" : "No living connections"}1 {"type": "log", "@timestamp": "2026-05-18T13:02:10Z""tags" : ["error","plugi,"reporting", "esqueue", "queue-worker","error"], "pid" :7, "message" : "mpau4y7h00070bdf8646mdeo - job querying failed: Error: No Living connections\nat sendReqWithConnection (/usr/share/kibana/node_modules/elasticsearch/src/lib/transport.js:266:15)\nat next (/usr/share/kibana/node_modules/elasticsearch/src/lib/connection_pool.js:243:7)\ness._tickCallback (internal/process/next_tick.js:61:11)"}1 {"type" : "log", "@timestamp" : "2026-05-18T13:02:10Z", "tags" : ["warning", "elasticsearch", "data"], "pid":7, "message" : "Unable to revive connection: [URL_WITH_CREDENTIALS] : "2026-05-18T13:02:10Z", "tags" : ["warning", "elasticsearch", "data"], "pid" :7, "message" : "No living connections"}kibana1 {"type" : "log", "@timestamp" : "2026-05-18T13:02:10Z""tags": ["error"ns", "taskManager", "taskManager"], "pid" :7, "message": "Failed to poll for work: Error: No Living connections"}kibanaI {"type" : "log", "@timestamp" : "2026-05-18T13:02:10Z","tags" : ["error","elasticsearch", "data"], "pid" :7, "message": "[ConnectionError]: getaddrinfo ENOTFOUND elasticsearch elasticsearch:9200"}kibana1 {"type": "log", "@timestamp": "2026-05-18T13:02:11Z", "tags" : ["error","elasticsearch", "data"], "pid" :7,"message": "[ConnectionError]: getaddrinfo ENOTFOUND elasticsearch elasticsearch:9200"}unexpected EOFukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/infrastructure/dev/docker (develop) $100% <8• Mon 18 May 18:01:52APP (-zsh)• *3PROD (ssh)'do-release-upgrade' to upgrade to it.screenpipe*0 884PROD*** System restart required ***Last login: Thu May 14 07:41:36 2026 from 212.5.153.87lukas@jiminny-prod-bastion:~$X T3 EU (ssh)Enable ESM Apps to receive additional future security updates.See [URL_WITH_CREDENTIALS] STAGE (ssh)See [URL_WITH_CREDENTIALS] ~ $ I17 EXT (-zsh)Poetry could not find a pyproject.toml file in /Users/lukas or its parentsPoetry could not find a pyproject.tomlfile in /Users/lukas or its parentslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ I|FRONTENDEXTENSION...
|
NULL
|
-5654624092641736242
|
NULL
|
click
|
ocr
|
NULL
|
PhpStormFileEditViewNavigateDOCKER881CodeLaravelRe PhpStormFileEditViewNavigateDOCKER881CodeLaravelRefactorRunToolsGitWindowEU (ssh)|DEV (-zsh)О $82HelpXIDOCKER (-zsh)"taskManager"connections"}"taskManager"], "pid": "Failed to poll for work: Error: No Li1 {"type": "log", "@timestamp" : "2026-05-18T13:02:06Z","tags" : ["error""pid":7, "message": "[ConnectionError]: getaddrinfo ENOTFOUND elasticsearch elasticsearch:9200"}{"type" : "log","@timestamp""2026-05-18T13:02:07Z""tags": ["warning"sticsearch", "data"], "pid":7,to revive connection: [URL_WITH_CREDENTIALS] "2026-05-18T13:02:07Z","tags" : ["warning", "elasticsearch","data"], "pid" :7,"message":"No livingconnections"}kibanans"1 {"type": "log""@timestamp": "2026-05-18T13:02:07Z""tags" : ["error""taskManager""taskManager"],"pid":7,"message" : "Failed to pollfor work: Error: No Livingconnections"}kibana1 {"type" : "log""@timestamp": "2026-05-18T13 :02:08Z", "tags" : ["error"icsearch".,"elast,"data"],"pid" :7, "message":"[ConnectionError]: getaddrinfo ENOTFOUND elasticsearch elasticsearch:9200"}kibana, "@timestamp" : "2026-05-18T13:02:10Z", "tags" : ["warning""elasticsearch", "data"], "pid":7, "message": "Unable to revive connection: [URL_WITH_CREDENTIALS] : "2026-05-18T13:02:10Z", "tags" : ["warning","elasticsearch", "data"], "pid" :7, "message" : "No living connections"}1 {"type": "log", "@timestamp": "2026-05-18T13:02:10Z""tags" : ["error","plugi,"reporting", "esqueue", "queue-worker","error"], "pid" :7, "message" : "mpau4y7h00070bdf8646mdeo - job querying failed: Error: No Living connections\nat sendReqWithConnection (/usr/share/kibana/node_modules/elasticsearch/src/lib/transport.js:266:15)\nat next (/usr/share/kibana/node_modules/elasticsearch/src/lib/connection_pool.js:243:7)\ness._tickCallback (internal/process/next_tick.js:61:11)"}1 {"type" : "log", "@timestamp" : "2026-05-18T13:02:10Z", "tags" : ["warning", "elasticsearch", "data"], "pid":7, "message" : "Unable to revive connection: [URL_WITH_CREDENTIALS] : "2026-05-18T13:02:10Z", "tags" : ["warning", "elasticsearch", "data"], "pid" :7, "message" : "No living connections"}kibana1 {"type" : "log", "@timestamp" : "2026-05-18T13:02:10Z""tags": ["error"ns", "taskManager", "taskManager"], "pid" :7, "message": "Failed to poll for work: Error: No Living connections"}kibanaI {"type" : "log", "@timestamp" : "2026-05-18T13:02:10Z","tags" : ["error","elasticsearch", "data"], "pid" :7, "message": "[ConnectionError]: getaddrinfo ENOTFOUND elasticsearch elasticsearch:9200"}kibana1 {"type": "log", "@timestamp": "2026-05-18T13:02:11Z", "tags" : ["error","elasticsearch", "data"], "pid" :7,"message": "[ConnectionError]: getaddrinfo ENOTFOUND elasticsearch elasticsearch:9200"}unexpected EOFukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/infrastructure/dev/docker (develop) $100% <8• Mon 18 May 18:01:52APP (-zsh)• *3PROD (ssh)'do-release-upgrade' to upgrade to it.screenpipe*0 884PROD*** System restart required ***Last login: Thu May 14 07:41:36 2026 from 212.5.153.87lukas@jiminny-prod-bastion:~$X T3 EU (ssh)Enable ESM Apps to receive additional future security updates.See [URL_WITH_CREDENTIALS] STAGE (ssh)See [URL_WITH_CREDENTIALS] ~ $ I17 EXT (-zsh)Poetry could not find a pyproject.toml file in /Users/lukas or its parentsPoetry could not find a pyproject.tomlfile in /Users/lukas or its parentslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ I|FRONTENDEXTENSION...
|
55499
|
NULL
|
NULL
|
NULL
|
|
55502
|
1924
|
10
|
2026-05-18T15:01:54.498831+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779116514498_m1.jpg...
|
Firefox
|
Work item search - Jira — Work
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Work item search - Jira
Work item search - Jira
Cl Work item search - Jira
Work item search - Jira
Close tab
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Usage | Windsurf
Usage | Windsurf
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
[SRD-6848] Sidekick SMS issue - Jira
[SRD-6848] Sidekick SMS issue - Jira
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
Jiminny
Jiminny
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
New Tab
New Tab
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20879] Enable users to use their new activity types - Jira
[JY-20879] Enable users to use their new activity types - Jira
Project Phoenix – Figma
Project Phoenix – Figma
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Resolver
Resolver
Create
Create
Rovo Ask Rovo
Ask Rovo
3 Notifications
3 Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
More spaces
More spaces
Filters
Filters...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Work item search - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Work item search - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Usage | Windsurf","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Usage | Windsurf","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6848] Sidekick SMS issue - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[SRD-6848] Sidekick SMS issue - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny\\Exceptions\\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny\\Exceptions\\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20771] Call Scoring filter for Exec reports - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20771] Call Scoring filter for Exec reports - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20879] Enable users to use their new activity types - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20879] Enable users to use their new activity types - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Project Phoenix – Figma","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Project Phoenix – Figma","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20847] Users can filter Scores in Team Insights by Host - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20847] Users can filter Scores in Team Insights by Host - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20534] AI Call Scoring quick access in Playback header - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20534] AI Call Scoring quick access in Playback header - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to:","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Top Bar","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Top Bar","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sidebar","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sidebar","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Main Content","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Main Content","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse sidebar [","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse sidebar [","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Switch sites or apps","depth":10,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Switch sites or apps","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to your Jira homepage","depth":9,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Resolver","depth":11,"on_screen":true,"value":"Resolver","help_text":"","placeholder":"Search","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Resolver","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create","depth":10,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Rovo Ask Rovo","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Rovo","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"3 Notifications","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"3 Notifications","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Help","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Help","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Settings","depth":12,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Settings","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"lukas.kovalik@jiminny.com","depth":12,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas.kovalik@jiminny.com","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"For you","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"For you","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Recent","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Recent","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Starred","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Starred","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Apps","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Apps","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Apps","depth":13,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Apps","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Spaces","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Spaces","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create space","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create space","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for spaces","depth":13,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for spaces","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Recent","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny (New)","depth":17,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny (New)","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Jiminny (New)","depth":18,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXMenuButton","text":"Create board","depth":18,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create board","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Jiminny (New)","depth":18,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Jiminny (New)","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Platform Team","depth":19,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Team","depth":22,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Capture Team","depth":19,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Capture Team","depth":22,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Enterprise Stability Issues 🤕","depth":19,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Enterprise Stability Issues 🤕","depth":22,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Processing Team","depth":19,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Processing Team","depth":22,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SE Kanban","depth":19,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SE Kanban","depth":22,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Service-Desk","depth":17,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Service-Desk","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Service-Desk","depth":18,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Service-Desk","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More spaces","depth":17,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More spaces","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Filters","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Filters","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
49505315406398317
|
5770527328479794137
|
visual_change
|
accessibility
|
NULL
|
Work item search - Jira
Work item search - Jira
Cl Work item search - Jira
Work item search - Jira
Close tab
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Usage | Windsurf
Usage | Windsurf
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
[SRD-6848] Sidekick SMS issue - Jira
[SRD-6848] Sidekick SMS issue - Jira
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
Jiminny
Jiminny
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
New Tab
New Tab
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20879] Enable users to use their new activity types - Jira
[JY-20879] Enable users to use their new activity types - Jira
Project Phoenix – Figma
Project Phoenix – Figma
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Resolver
Resolver
Create
Create
Rovo Ask Rovo
Ask Rovo
3 Notifications
3 Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
More spaces
More spaces
Filters
Filters...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
55504
|
1925
|
7
|
2026-05-18T15:01:58.435123+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779116518435_m2.jpg...
|
Firefox
|
Work item search - Jira — Work
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Work item search - Jira
Work item search - Jira
Cl Work item search - Jira
Work item search - Jira
Close tab
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Usage | Windsurf
Usage | Windsurf
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
[SRD-6848] Sidekick SMS issue - Jira
[SRD-6848] Sidekick SMS issue - Jira
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
Jiminny
Jiminny
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
New Tab
New Tab
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20879] Enable users to use their new activity types - Jira
[JY-20879] Enable users to use their new activity types - Jira
Project Phoenix – Figma
Project Phoenix – Figma
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Resolver
Resolver
Create
Create
Rovo Ask Rovo
Ask Rovo
3 Notifications
3 Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Search work items
Search work items
Starred
Last commented
Last commented
More actions for Last commented
More actions for Last commented
My tickets
My tickets
More actions for My tickets
More actions for My tickets
(SRD)
(SRD)
More actions for (SRD)
More actions for (SRD)
Dialers & CRM Team > Backlog Tech Stories
Dialers & CRM Team > Backlog Tech Stories
More actions for Dialers & CRM Team > Backlog Tech Stories
More actions for Dialers & CRM Team > Backlog Tech Stories
Default filters
Default filters
My open work items
My open work items
More actions for My open work items
More actions for My open work items
Reported by me
Reported by me
More actions for Reported by me
More actions for Reported by me
All work items
All work items
More actions for All work items
More actions for All work items
Open work items
Open work items
More actions for Open work items
More actions for Open work items
Done work items
Done work items
More actions for Done work items
More actions for Done work items
Viewed recently
Viewed recently
More actions for Viewed recently
More actions for Viewed recently
Created recently
Created recently
More actions for Created recently
More actions for Created recently
Resolved recently
Resolved recently
More actions for Resolved recently
More actions for Resolved recently
Updated recently
Updated recently
More actions for Updated recently
More actions for Updated recently
View all filters...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Work item search - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Work item search - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.040392287,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.05905826,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.10721409,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Usage | Windsurf","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Usage | Windsurf","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.029920213,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.15003991,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.16121309,"width":0.1796875,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.18276137,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.19393456,"width":0.039228722,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6848] Sidekick SMS issue - Jira","depth":4,"bounds":{"left":0.0,"top":0.21548285,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[SRD-6848] Sidekick SMS issue - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.22665602,"width":0.06632314,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.2482043,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"bounds":{"left":0.013297873,"top":0.25937748,"width":0.041223403,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.28092578,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"bounds":{"left":0.013297873,"top":0.29209897,"width":0.041223403,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"bounds":{"left":0.0,"top":0.31364724,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"bounds":{"left":0.013297873,"top":0.32482043,"width":0.013131649,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny\\Exceptions\\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app","depth":4,"bounds":{"left":0.0,"top":0.3463687,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny\\Exceptions\\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app","depth":5,"bounds":{"left":0.013297873,"top":0.3575419,"width":0.2847407,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.3790902,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.39026338,"width":0.1796875,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira","depth":4,"bounds":{"left":0.0,"top":0.41181165,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.42298484,"width":0.2835771,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.4445331,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.013297873,"top":0.4557063,"width":0.014960106,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira","depth":4,"bounds":{"left":0.0,"top":0.4772546,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.4884278,"width":0.15259309,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20771] Call Scoring filter for Exec reports - Jira","depth":4,"bounds":{"left":0.0,"top":0.509976,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20771] Call Scoring filter for Exec reports - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.5211492,"width":0.08909574,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira","depth":4,"bounds":{"left":0.0,"top":0.54269755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.55387074,"width":0.13597074,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20879] Enable users to use their new activity types - Jira","depth":4,"bounds":{"left":0.0,"top":0.575419,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20879] Enable users to use their new activity types - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.5865922,"width":0.106715426,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Project Phoenix – Figma","depth":4,"bounds":{"left":0.0,"top":0.60814047,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Project Phoenix – Figma","depth":5,"bounds":{"left":0.013297873,"top":0.61931366,"width":0.041888297,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20847] Users can filter Scores in Team Insights by Host - Jira","depth":4,"bounds":{"left":0.0,"top":0.6408619,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20847] Users can filter Scores in Team Insights by Host - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.6520351,"width":0.1143617,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20534] AI Call Scoring quick access in Playback header - Jira","depth":4,"bounds":{"left":0.0,"top":0.6735834,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20534] AI Call Scoring quick access in Playback header - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.6847566,"width":0.1143617,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.70790106,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to:","depth":9,"bounds":{"left":0.090259306,"top":0.07861133,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Top Bar","depth":10,"bounds":{"left":0.090259306,"top":0.097765364,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Top Bar","depth":11,"bounds":{"left":0.090259306,"top":0.097765364,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sidebar","depth":10,"bounds":{"left":0.090259306,"top":0.11691939,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sidebar","depth":11,"bounds":{"left":0.090259306,"top":0.11691939,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Main Content","depth":10,"bounds":{"left":0.090259306,"top":0.13607343,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Main Content","depth":11,"bounds":{"left":0.090259306,"top":0.13607343,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse sidebar [","depth":9,"bounds":{"left":0.08361037,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse sidebar [","depth":11,"bounds":{"left":0.0887633,"top":0.06344773,"width":0.039727394,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Switch sites or apps","depth":10,"bounds":{"left":0.095578454,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Switch sites or apps","depth":12,"bounds":{"left":0.10073138,"top":0.06344773,"width":0.044215426,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to your Jira homepage","depth":9,"bounds":{"left":0.10887633,"top":0.057861134,"width":0.029421542,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Resolver","depth":11,"bounds":{"left":0.40475398,"top":0.06264964,"width":0.24268617,"height":0.015961692},"on_screen":true,"value":"Resolver","help_text":"","placeholder":"Search","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Resolver","depth":12,"bounds":{"left":0.40475398,"top":0.06384677,"width":0.018949468,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create","depth":10,"bounds":{"left":0.65575135,"top":0.057861134,"width":0.030086435,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":12,"bounds":{"left":0.66705453,"top":0.06384677,"width":0.014793883,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Rovo Ask Rovo","depth":12,"bounds":{"left":0.91223407,"top":0.057861134,"width":0.035904255,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Rovo","depth":14,"bounds":{"left":0.92353725,"top":0.06384677,"width":0.020611702,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"3 Notifications","depth":12,"bounds":{"left":0.9494681,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"3 Notifications","depth":14,"bounds":{"left":0.954621,"top":0.06344773,"width":0.031914894,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Help","depth":12,"bounds":{"left":0.96143615,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Help","depth":14,"bounds":{"left":0.9665891,"top":0.06344773,"width":0.010139627,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Settings","depth":12,"bounds":{"left":0.9734042,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Settings","depth":14,"bounds":{"left":0.97855717,"top":0.06344773,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"lukas.kovalik@jiminny.com","depth":12,"bounds":{"left":0.98537236,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas.kovalik@jiminny.com","depth":14,"bounds":{"left":0.99052525,"top":0.06344773,"width":0.009474754,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"For you","depth":12,"bounds":{"left":0.08361037,"top":0.09976058,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"For you","depth":15,"bounds":{"left":0.09424867,"top":0.10574621,"width":0.01662234,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Recent","depth":12,"bounds":{"left":0.08361037,"top":0.12529927,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Recent","depth":15,"bounds":{"left":0.09424867,"top":0.13128492,"width":0.015458777,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Starred","depth":12,"bounds":{"left":0.08361037,"top":0.15083799,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Starred","depth":15,"bounds":{"left":0.09424867,"top":0.15682362,"width":0.016456118,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Apps","depth":12,"bounds":{"left":0.08361037,"top":0.1763767,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Apps","depth":15,"bounds":{"left":0.09424867,"top":0.18236233,"width":0.011635638,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Apps","depth":13,"bounds":{"left":0.15309176,"top":0.17956904,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Apps","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Spaces","depth":12,"bounds":{"left":0.08361037,"top":0.2019154,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Spaces","depth":15,"bounds":{"left":0.09424867,"top":0.20790103,"width":0.016456118,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create space","depth":13,"bounds":{"left":0.13646941,"top":0.20510775,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create space","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for spaces","depth":13,"bounds":{"left":0.14577793,"top":0.20510775,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for spaces","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Recent","depth":16,"bounds":{"left":0.08959442,"top":0.23423783,"width":0.013464096,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny (New)","depth":17,"bounds":{"left":0.08759973,"top":0.2529928,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny (New)","depth":20,"bounds":{"left":0.09823803,"top":0.25897846,"width":0.032081116,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Jiminny (New)","depth":18,"bounds":{"left":0.08892952,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXMenuButton","text":"Create board","depth":18,"bounds":{"left":0.13646941,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create board","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Jiminny (New)","depth":18,"bounds":{"left":0.14577793,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Jiminny (New)","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Platform Team","depth":19,"bounds":{"left":0.09158909,"top":0.27853152,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Team","depth":22,"bounds":{"left":0.1022274,"top":0.28451717,"width":0.032247342,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.15309176,"top":0.28172386,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Capture Team","depth":19,"bounds":{"left":0.09158909,"top":0.30407023,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Capture Team","depth":22,"bounds":{"left":0.1022274,"top":0.31005585,"width":0.03125,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.15309176,"top":0.30726257,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Enterprise Stability Issues 🤕","depth":19,"bounds":{"left":0.09158909,"top":0.32960895,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Enterprise Stability Issues 🤕","depth":22,"bounds":{"left":0.1022274,"top":0.33559456,"width":0.050531916,"height":0.030726258},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.15309176,"top":0.33280128,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Processing Team","depth":19,"bounds":{"left":0.09158909,"top":0.35514766,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Processing Team","depth":22,"bounds":{"left":0.1022274,"top":0.36113328,"width":0.038231384,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.15309176,"top":0.35834,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SE Kanban","depth":19,"bounds":{"left":0.09158909,"top":0.38068634,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SE Kanban","depth":22,"bounds":{"left":0.1022274,"top":0.386672,"width":0.024102394,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.15309176,"top":0.38387868,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Service-Desk","depth":17,"bounds":{"left":0.08759973,"top":0.40622506,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Service-Desk","depth":20,"bounds":{"left":0.09823803,"top":0.4122107,"width":0.03025266,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Service-Desk","depth":18,"bounds":{"left":0.15442154,"top":0.4094174,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Service-Desk","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More spaces","depth":17,"bounds":{"left":0.08759973,"top":0.43176377,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More spaces","depth":20,"bounds":{"left":0.09823803,"top":0.43774942,"width":0.028756648,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Filters","depth":12,"bounds":{"left":0.08361037,"top":0.45730248,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Filters","depth":15,"bounds":{"left":0.09424867,"top":0.4632881,"width":0.013796543,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Filters","depth":13,"bounds":{"left":0.14577793,"top":0.46049482,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Filters","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Search work items","depth":14,"bounds":{"left":0.08759973,"top":0.4828412,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search work items","depth":17,"bounds":{"left":0.09823803,"top":0.4888268,"width":0.041223403,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Starred","depth":16,"bounds":{"left":0.08959442,"top":0.5151636,"width":0.014461436,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Last commented","depth":17,"bounds":{"left":0.08759973,"top":0.5339186,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Last commented","depth":20,"bounds":{"left":0.09823803,"top":0.53990424,"width":0.03706782,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Last commented","depth":18,"bounds":{"left":0.15309176,"top":0.5371109,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Last commented","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"My tickets","depth":17,"bounds":{"left":0.08759973,"top":0.5594573,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"My tickets","depth":20,"bounds":{"left":0.09823803,"top":0.5654429,"width":0.022938829,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for My tickets","depth":18,"bounds":{"left":0.15309176,"top":0.56264967,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for My tickets","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"(SRD)","depth":17,"bounds":{"left":0.08759973,"top":0.584996,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"(SRD)","depth":20,"bounds":{"left":0.09823803,"top":0.59098166,"width":0.012799202,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for (SRD)","depth":18,"bounds":{"left":0.15309176,"top":0.58818835,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for (SRD)","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dialers & CRM Team > Backlog Tech Stories","depth":17,"bounds":{"left":0.08759973,"top":0.6105347,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Dialers & CRM Team > Backlog Tech Stories","depth":20,"bounds":{"left":0.09823803,"top":0.61652035,"width":0.053690158,"height":0.029928172},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Dialers & CRM Team > Backlog Tech Stories","depth":18,"bounds":{"left":0.15309176,"top":0.61372703,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Dialers & CRM Team > Backlog Tech Stories","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Default filters","depth":14,"bounds":{"left":0.08759973,"top":0.6360734,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Default filters","depth":17,"bounds":{"left":0.09823803,"top":0.6420591,"width":0.030086435,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"My open work items","depth":16,"bounds":{"left":0.09158909,"top":0.66161215,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"My open work items","depth":19,"bounds":{"left":0.1022274,"top":0.6675978,"width":0.04504654,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for My open work items","depth":17,"bounds":{"left":0.15309176,"top":0.66480446,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for My open work items","depth":19,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Reported by me","depth":16,"bounds":{"left":0.09158909,"top":0.68715084,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reported by me","depth":19,"bounds":{"left":0.1022274,"top":0.69313645,"width":0.03523936,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Reported by me","depth":17,"bounds":{"left":0.15309176,"top":0.6903432,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Reported by me","depth":19,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"All work items","depth":16,"bounds":{"left":0.09158909,"top":0.7126895,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All work items","depth":19,"bounds":{"left":0.1022274,"top":0.7186752,"width":0.03125,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for All work items","depth":17,"bounds":{"left":0.15309176,"top":0.7158819,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for All work items","depth":19,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Open work items","depth":16,"bounds":{"left":0.09158909,"top":0.73822826,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Open work items","depth":19,"bounds":{"left":0.1022274,"top":0.7442139,"width":0.03756649,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Open work items","depth":17,"bounds":{"left":0.15309176,"top":0.74142057,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Open work items","depth":19,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Done work items","depth":16,"bounds":{"left":0.09158909,"top":0.76376694,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Done work items","depth":19,"bounds":{"left":0.1022274,"top":0.7697526,"width":0.037400264,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Done work items","depth":17,"bounds":{"left":0.15309176,"top":0.7669593,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Done work items","depth":19,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Viewed recently","depth":16,"bounds":{"left":0.09158909,"top":0.7893057,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Viewed recently","depth":19,"bounds":{"left":0.1022274,"top":0.7952913,"width":0.035904255,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Viewed recently","depth":17,"bounds":{"left":0.15309176,"top":0.792498,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Viewed recently","depth":19,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Created recently","depth":16,"bounds":{"left":0.09158909,"top":0.81484437,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Created recently","depth":19,"bounds":{"left":0.1022274,"top":0.82083,"width":0.03706782,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Created recently","depth":17,"bounds":{"left":0.15309176,"top":0.81803674,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Created recently","depth":19,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Resolved recently","depth":16,"bounds":{"left":0.09158909,"top":0.84038305,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Resolved recently","depth":19,"bounds":{"left":0.1022274,"top":0.84636873,"width":0.039727394,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Resolved recently","depth":17,"bounds":{"left":0.15309176,"top":0.8435754,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Resolved recently","depth":19,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Updated recently","depth":16,"bounds":{"left":0.09158909,"top":0.8659218,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Updated recently","depth":19,"bounds":{"left":0.1022274,"top":0.8719074,"width":0.038397606,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Updated recently","depth":17,"bounds":{"left":0.15309176,"top":0.8691141,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Updated recently","depth":19,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"View all filters","depth":17,"bounds":{"left":0.08759973,"top":0.8914605,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
3033934114038932665
|
-9001662061635250711
|
visual_change
|
accessibility
|
NULL
|
Work item search - Jira
Work item search - Jira
Cl Work item search - Jira
Work item search - Jira
Close tab
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Usage | Windsurf
Usage | Windsurf
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
[SRD-6848] Sidekick SMS issue - Jira
[SRD-6848] Sidekick SMS issue - Jira
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
Jiminny
Jiminny
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
New Tab
New Tab
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20879] Enable users to use their new activity types - Jira
[JY-20879] Enable users to use their new activity types - Jira
Project Phoenix – Figma
Project Phoenix – Figma
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Resolver
Resolver
Create
Create
Rovo Ask Rovo
Ask Rovo
3 Notifications
3 Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Search work items
Search work items
Starred
Last commented
Last commented
More actions for Last commented
More actions for Last commented
My tickets
My tickets
More actions for My tickets
More actions for My tickets
(SRD)
(SRD)
More actions for (SRD)
More actions for (SRD)
Dialers & CRM Team > Backlog Tech Stories
Dialers & CRM Team > Backlog Tech Stories
More actions for Dialers & CRM Team > Backlog Tech Stories
More actions for Dialers & CRM Team > Backlog Tech Stories
Default filters
Default filters
My open work items
My open work items
More actions for My open work items
More actions for My open work items
Reported by me
Reported by me
More actions for Reported by me
More actions for Reported by me
All work items
All work items
More actions for All work items
More actions for All work items
Open work items
Open work items
More actions for Open work items
More actions for Open work items
Done work items
Done work items
More actions for Done work items
More actions for Done work items
Viewed recently
Viewed recently
More actions for Viewed recently
More actions for Viewed recently
Created recently
Created recently
More actions for Created recently
More actions for Created recently
Resolved recently
Resolved recently
More actions for Resolved recently
More actions for Resolved recently
Updated recently
Updated recently
More actions for Updated recently
More actions for Updated recently
View all filters...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
55505
|
1924
|
12
|
2026-05-18T15:02:00.550604+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779116520550_m1.jpg...
|
Firefox
|
Work item search - Jira — Work
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Work item search - Jira
Work item search - Jira
Cl Work item search - Jira
Work item search - Jira
Close tab
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Usage | Windsurf
Usage | Windsurf
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
[SRD-6848] Sidekick SMS issue - Jira
[SRD-6848] Sidekick SMS issue - Jira
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
Jiminny
Jiminny
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
New Tab
New Tab
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20879] Enable users to use their new activity types - Jira
[JY-20879] Enable users to use their new activity types - Jira
Project Phoenix – Figma
Project Phoenix – Figma
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Resolver
Resolver
Create
Create
Rovo Ask Rovo
Ask Rovo
3 Notifications
3 Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Search work items
Search work items
Starred
Last commented
Last commented
More actions for Last commented
More actions for Last commented
My tickets
My tickets
More actions for My tickets
More actions for My tickets
(SRD)
(SRD)
More actions for (SRD)
More actions for (SRD)
Dialers & CRM Team > Backlog Tech Stories
Dialers & CRM Team > Backlog Tech Stories
More actions for Dialers & CRM Team > Backlog Tech Stories
More actions for Dialers & CRM Team > Backlog Tech Stories
Default filters
Default filters
My open work items
My open work items
More actions for My open work items
More actions for My open work items
Reported by me
Reported by me
More actions for Reported by me
More actions for Reported by me
All work items
All work items
More actions for All work items
More actions for All work items
Open work items
Open work items
More actions for Open work items
More actions for Open work items
Done work items
Done work items
More actions for Done work items
More actions for Done work items
Viewed recently
Viewed recently
More actions for Viewed recently
More actions for Viewed recently
Created recently
Created recently
More actions for Created recently
More actions for Created recently
Resolved recently
Resolved recently
More actions for Resolved recently
More actions for Resolved recently
Updated recently
Updated recently
More actions for Updated recently
More actions for Updated recently...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Work item search - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Work item search - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Usage | Windsurf","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Usage | Windsurf","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6848] Sidekick SMS issue - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[SRD-6848] Sidekick SMS issue - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny\\Exceptions\\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny\\Exceptions\\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20771] Call Scoring filter for Exec reports - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20771] Call Scoring filter for Exec reports - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20879] Enable users to use their new activity types - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20879] Enable users to use their new activity types - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Project Phoenix – Figma","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Project Phoenix – Figma","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20847] Users can filter Scores in Team Insights by Host - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20847] Users can filter Scores in Team Insights by Host - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20534] AI Call Scoring quick access in Playback header - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20534] AI Call Scoring quick access in Playback header - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to:","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Top Bar","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Top Bar","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sidebar","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sidebar","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Main Content","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Main Content","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse sidebar [","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse sidebar [","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Switch sites or apps","depth":10,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Switch sites or apps","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to your Jira homepage","depth":9,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Resolver","depth":11,"on_screen":true,"value":"Resolver","help_text":"","placeholder":"Search","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Resolver","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create","depth":10,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Rovo Ask Rovo","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Rovo","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"3 Notifications","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"3 Notifications","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Help","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Help","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Settings","depth":12,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Settings","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"lukas.kovalik@jiminny.com","depth":12,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas.kovalik@jiminny.com","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"For you","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"For you","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Recent","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Recent","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Starred","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Starred","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Apps","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Apps","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Apps","depth":13,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Apps","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Spaces","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Spaces","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create space","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create space","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for spaces","depth":13,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for spaces","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Recent","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny (New)","depth":17,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny (New)","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Jiminny (New)","depth":18,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXMenuButton","text":"Create board","depth":18,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create board","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Jiminny (New)","depth":18,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Jiminny (New)","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Platform Team","depth":19,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Team","depth":22,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Capture Team","depth":19,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Capture Team","depth":22,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Enterprise Stability Issues 🤕","depth":19,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Enterprise Stability Issues 🤕","depth":22,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Processing Team","depth":19,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Processing Team","depth":22,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SE Kanban","depth":19,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SE Kanban","depth":22,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Service-Desk","depth":17,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Service-Desk","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Service-Desk","depth":18,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Service-Desk","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More spaces","depth":17,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More spaces","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Filters","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Filters","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Filters","depth":13,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Filters","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Search work items","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search work items","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Starred","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Last commented","depth":17,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Last commented","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Last commented","depth":18,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Last commented","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"My tickets","depth":17,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"My tickets","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for My tickets","depth":18,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for My tickets","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"(SRD)","depth":17,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"(SRD)","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for (SRD)","depth":18,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for (SRD)","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dialers & CRM Team > Backlog Tech Stories","depth":17,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Dialers & CRM Team > Backlog Tech Stories","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Dialers & CRM Team > Backlog Tech Stories","depth":18,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Dialers & CRM Team > Backlog Tech Stories","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Default filters","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Default filters","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"My open work items","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"My open work items","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for My open work items","depth":17,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for My open work items","depth":19,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Reported by me","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reported by me","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Reported by me","depth":17,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Reported by me","depth":19,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"All work items","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All work items","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for All work items","depth":17,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for All work items","depth":19,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Open work items","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Open work items","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Open work items","depth":17,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Open work items","depth":19,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Done work items","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Done work items","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Done work items","depth":17,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Done work items","depth":19,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Viewed recently","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Viewed recently","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Viewed recently","depth":17,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Viewed recently","depth":19,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Created recently","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Created recently","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Created recently","depth":17,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Created recently","depth":19,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Resolved recently","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Resolved recently","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Resolved recently","depth":17,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Resolved recently","depth":19,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Updated recently","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Updated recently","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Updated recently","depth":17,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Updated recently","depth":19,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-617648409828801652
|
-9001662061635250711
|
visual_change
|
accessibility
|
NULL
|
Work item search - Jira
Work item search - Jira
Cl Work item search - Jira
Work item search - Jira
Close tab
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Usage | Windsurf
Usage | Windsurf
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
[SRD-6848] Sidekick SMS issue - Jira
[SRD-6848] Sidekick SMS issue - Jira
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
Jiminny
Jiminny
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
New Tab
New Tab
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20879] Enable users to use their new activity types - Jira
[JY-20879] Enable users to use their new activity types - Jira
Project Phoenix – Figma
Project Phoenix – Figma
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Resolver
Resolver
Create
Create
Rovo Ask Rovo
Ask Rovo
3 Notifications
3 Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Search work items
Search work items
Starred
Last commented
Last commented
More actions for Last commented
More actions for Last commented
My tickets
My tickets
More actions for My tickets
More actions for My tickets
(SRD)
(SRD)
More actions for (SRD)
More actions for (SRD)
Dialers & CRM Team > Backlog Tech Stories
Dialers & CRM Team > Backlog Tech Stories
More actions for Dialers & CRM Team > Backlog Tech Stories
More actions for Dialers & CRM Team > Backlog Tech Stories
Default filters
Default filters
My open work items
My open work items
More actions for My open work items
More actions for My open work items
Reported by me
Reported by me
More actions for Reported by me
More actions for Reported by me
All work items
All work items
More actions for All work items
More actions for All work items
Open work items
Open work items
More actions for Open work items
More actions for Open work items
Done work items
Done work items
More actions for Done work items
More actions for Done work items
Viewed recently
Viewed recently
More actions for Viewed recently
More actions for Viewed recently
Created recently
Created recently
More actions for Created recently
More actions for Created recently
Resolved recently
Resolved recently
More actions for Resolved recently
More actions for Resolved recently
Updated recently
Updated recently
More actions for Updated recently
More actions for Updated recently...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
55516
|
1924
|
18
|
2026-05-18T15:02:22.230168+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779116542230_m1.jpg...
|
Firefox
|
Work item search - Jira — Work
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Boosteroid‹$0EU (ssh)100% <78• Mon 18 May 18:02 Boosteroid‹$0EU (ssh)100% <78• Mon 18 May 18:02:22screenpipe*-₴4DOCKER881DEV (-zsh)O $82X t1DOCKER (-zsh)"taskManager""taskManager"], "pid":7, "message":"Failed to poll for work: Error: No Liconnections"}1 {"type":"log", "@timestamp" : "2026-05-18T13:02:06Z","tags" : ["error""pid":7, "message": "[ConnectionError]: getaddrinfoENOTFOUND elasticsearch elasticsearch:9200"}{"type" : "log", "@timestamp": "2026-05-18T13:02:07Z""tags": ["warning"sticsearch", "data"], "pid" :7, "message":"Unable to revive connection: [URL_WITH_CREDENTIALS] : "2026-05-18T13:02:07Z", "tags" : ["warning", "elasticsearch", "data"],"pid" :7,"message": "No livingconnections"}kibanans"I {"type" : "log""@timestamp": "2026-05-18T13:02:07Z""tags" : ["error""taskManager""taskManager"], "pid" :7, "message" : "Failed to pollfor work: Error: No Li1 {"type" : "log""@timestamp" : "2026-05-18T13:02:08Z", "tags" : ["error""pid" :7, "message" : "[ConnectionError]: getaddrinfo ENOTFOUND elasticsearch elasticsearch:9200"},"@timestamp": "2026-05-18T13:02:10Z", "tags" : ["warning"sticsearch", "data"],"pid":7, "message": "Unable to revive connection: [URL_WITH_CREDENTIALS] : "2026-05-18T13:02:10Z" , "tags" : ["warning"sticsearch", "data"], "pid" :7, "message" : "No living connections"}1 {"type": "log", "@timestamp": "2026-05-18T13:02:10Z""tags" : ["error","reporting", "esqueue", "queue-worker","error"], "pid" :7, "message" : "mpau4y7h00070bdf8646mdeo - job querying failed: Error: No Living connections\nat sendReqWithConnection (/usr/share/kibana/node_modules/elasticsearch/src/lib/transport.js:266:15)\nat next (/usr/share/kibana/node_modules/elasticsearch/src/lib/connection_pool.js:243:7)\ness._tickCallback (internal/process/next_tick.js:61:11)"}1 {"type" : "log", "@timestamp" : "2026-05-18T13:02:10Z", "tags" : ["warning", "elasticsearch", "data"], "pid":7, "message" : "Unable to revive connection: [URL_WITH_CREDENTIALS] : "2026-05-18T13:02:10Z", "tags" : ["warning", "elasticsearch", "data"], "pid" :7, "message" : "No living connections"}kibana1 {"type" : "log",, "@timestamp" : "2026-05-18T13:02:10Z""tags": ["error"ns", "taskManager", "taskManager"], "pid" :7, "message": "Failed to poll for work: Error: No Living connections"}kibanaI {"type" : "log", "@timestamp" : "2026-05-18T13:02:10Z","tags" : ["error","elasticsearch", "data"], "pid" :7, "message": "[ConnectionError]: getaddrinfo ENOTFOUND elasticsearch elasticsearch:9200"}kibana1 {"type": "log", "@timestamp": "2026-05-18T13:02:11Z", "tags" : ["error","elasticsearch", "data"], "pid" :7,"message": "[ConnectionError]: getaddrinfo ENOTFOUND elasticsearch elasticsearch:9200"}unexpected EOFukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/infrastructure/dev/docker (develop) $APP (-zsh)• *3t2PROD (ssh)'do-release-upgrade' to upgrade to it.PROD*** System restart required ***Last login: Thu May 14 07:41:36 2026 from 212.5.153.87lukas@jiminny-prod-bastion:~$X T3 EU (ssh)Enable ESM Apps to receive additional future security updates.See [URL_WITH_CREDENTIALS] [URL_WITH_CREDENTIALS] ~ $ IFRONTENDPoetry could not find a pyproject.toml file in /Users/lukas or its parentsPoetry could not find a pyproject.tomlfile in /Users/lukas or its parentslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ I|EXTENSION...
|
NULL
|
1996507702132688847
|
NULL
|
click
|
ocr
|
NULL
|
Boosteroid‹$0EU (ssh)100% <78• Mon 18 May 18:02 Boosteroid‹$0EU (ssh)100% <78• Mon 18 May 18:02:22screenpipe*-₴4DOCKER881DEV (-zsh)O $82X t1DOCKER (-zsh)"taskManager""taskManager"], "pid":7, "message":"Failed to poll for work: Error: No Liconnections"}1 {"type":"log", "@timestamp" : "2026-05-18T13:02:06Z","tags" : ["error""pid":7, "message": "[ConnectionError]: getaddrinfoENOTFOUND elasticsearch elasticsearch:9200"}{"type" : "log", "@timestamp": "2026-05-18T13:02:07Z""tags": ["warning"sticsearch", "data"], "pid" :7, "message":"Unable to revive connection: [URL_WITH_CREDENTIALS] : "2026-05-18T13:02:07Z", "tags" : ["warning", "elasticsearch", "data"],"pid" :7,"message": "No livingconnections"}kibanans"I {"type" : "log""@timestamp": "2026-05-18T13:02:07Z""tags" : ["error""taskManager""taskManager"], "pid" :7, "message" : "Failed to pollfor work: Error: No Li1 {"type" : "log""@timestamp" : "2026-05-18T13:02:08Z", "tags" : ["error""pid" :7, "message" : "[ConnectionError]: getaddrinfo ENOTFOUND elasticsearch elasticsearch:9200"},"@timestamp": "2026-05-18T13:02:10Z", "tags" : ["warning"sticsearch", "data"],"pid":7, "message": "Unable to revive connection: [URL_WITH_CREDENTIALS] : "2026-05-18T13:02:10Z" , "tags" : ["warning"sticsearch", "data"], "pid" :7, "message" : "No living connections"}1 {"type": "log", "@timestamp": "2026-05-18T13:02:10Z""tags" : ["error","reporting", "esqueue", "queue-worker","error"], "pid" :7, "message" : "mpau4y7h00070bdf8646mdeo - job querying failed: Error: No Living connections\nat sendReqWithConnection (/usr/share/kibana/node_modules/elasticsearch/src/lib/transport.js:266:15)\nat next (/usr/share/kibana/node_modules/elasticsearch/src/lib/connection_pool.js:243:7)\ness._tickCallback (internal/process/next_tick.js:61:11)"}1 {"type" : "log", "@timestamp" : "2026-05-18T13:02:10Z", "tags" : ["warning", "elasticsearch", "data"], "pid":7, "message" : "Unable to revive connection: [URL_WITH_CREDENTIALS] : "2026-05-18T13:02:10Z", "tags" : ["warning", "elasticsearch", "data"], "pid" :7, "message" : "No living connections"}kibana1 {"type" : "log",, "@timestamp" : "2026-05-18T13:02:10Z""tags": ["error"ns", "taskManager", "taskManager"], "pid" :7, "message": "Failed to poll for work: Error: No Living connections"}kibanaI {"type" : "log", "@timestamp" : "2026-05-18T13:02:10Z","tags" : ["error","elasticsearch", "data"], "pid" :7, "message": "[ConnectionError]: getaddrinfo ENOTFOUND elasticsearch elasticsearch:9200"}kibana1 {"type": "log", "@timestamp": "2026-05-18T13:02:11Z", "tags" : ["error","elasticsearch", "data"], "pid" :7,"message": "[ConnectionError]: getaddrinfo ENOTFOUND elasticsearch elasticsearch:9200"}unexpected EOFukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/infrastructure/dev/docker (develop) $APP (-zsh)• *3t2PROD (ssh)'do-release-upgrade' to upgrade to it.PROD*** System restart required ***Last login: Thu May 14 07:41:36 2026 from 212.5.153.87lukas@jiminny-prod-bastion:~$X T3 EU (ssh)Enable ESM Apps to receive additional future security updates.See [URL_WITH_CREDENTIALS] [URL_WITH_CREDENTIALS] ~ $ IFRONTENDPoetry could not find a pyproject.toml file in /Users/lukas or its parentsPoetry could not find a pyproject.tomlfile in /Users/lukas or its parentslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ I|EXTENSION...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
55517
|
1925
|
13
|
2026-05-18T15:02:22.271617+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779116542271_m2.jpg...
|
Firefox
|
Work item search - Jira — Work
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Work item search - Jira
Work item search - Jira
Cl Work item search - Jira
Work item search - Jira
Close tab...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Work item search - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Work item search - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.040392287,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.05905826,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
3119745355767091304
|
-1282663318119300892
|
click
|
hybrid
|
NULL
|
Work item search - Jira
Work item search - Jira
Cl Work item search - Jira
Work item search - Jira
Close tab
Boosteroid+ Work item search - JiraService-Desk - Queues - PlatfornUsage | WindsurfAllow owner's role to be selectedPipelines - jiminny/appN1 (SRD-6848] Sidekick SMS issue -CloudWatch I us-east-2a CloudWatch | us-east-28 Jiminny) Jiminny|Exceptions|SocialAccountAllow owner's role to be selectedY [SRD-6862] 'User does not have a* New Tab(JY-209121 Fallback mechanism fcS MIY-207711 Call Scorina filter for &(UY-20878] SCIM > Allow customel- WJY-208791 Enable users to use thProject Phoenix - Figma(UY-20847] Users can filter ScoresLIY-205341 Al Call Scorina quick al— New Tab00O JIMINNY@ For you(• Recent# Starred0+ Apps• SpacesJiminny (New)ull Planorm leamIID Capture TeamID Enterprise Stability I…..IN Processing TeamMl SE KanbanC Service-Desk= More spaces— Filters1 Q Search work items— ast commentedi= My tickets= (SRD)— Dialers & CRM Team > ...~ Default filterc I= My open work items= Reported by me= All work items= Open work items= Done work items= Viewed recently= Created recently= Resolved recentlv= Updated recently= View all filters( DashboardsC: Operations& Confluence1y.dulasslan.neuAll work** Ask AIWorkOJY-1* JY-1NJY-NJY-O JMN8 JMNQ ResolverJOL textfields ~ "Resolver*"BOJOSTEROID BetaVNNSMSENENEW CAMPAIGNS, HEROES, AND UNITSEXPERIENCE THE NEW EXPANSIONPLAMMY GAMES LIBRARY INSTALIPLEASE, WAIT...OLKNDER®AGEEMPIRESO ONARISOAll Platformsvoller CpastenVEION WORLD* ON SALERecent-* ON SAI+ CreateLOGYLOG VED VED VED VISSUESOX VED VResolutionUnresolvedUnresolvedUnresolvedUnresolvedUnresolvedUnresolvedUnresolvedUnresolvedCreated12 Feb 2025, 12:2727 Sept 2024, 09:3805 Apr 2024, 09:0430 Jan 2024, 13:4027 Nov 2023, 15:0715 Jul 2019, 21:5007 Mar 2019, 12:4807 Nov 2018, 09:06Updated12 Feb 2025, 12:4827 Sept 2024, 09:3802 Sept 2024, 16:4302 Sept 2024, 16:3917 Apr 2025, 07:5231 Mar 2022, 13:2405 Apr 2022, 14:4507 Apr 2022, 10:44QOOAT 10%4 8• Mn 18 May 18:02:22Due dateNoneNoneNoneNoneNoneNoneNoneNoneASK ROVO 1 O EE 0Apps ~ Share ~00"O a Clearfilterss Save filterm[PASSWORD_DOTS]...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
55518
|
1925
|
14
|
2026-05-18T15:02:23.671607+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779116543671_m2.jpg...
|
Firefox
|
Work item search - Jira — Work
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Work item search - Jira
Work item search - Jira
Cl Work item search - Jira
Work item search - Jira
Close tab
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Usage | Windsurf
Usage | Windsurf
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
[SRD-6848] Sidekick SMS issue - Jira
[SRD-6848] Sidekick SMS issue - Jira
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
Jiminny
Jiminny
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
New Tab
New Tab
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20879] Enable users to use their new activity types - Jira
[JY-20879] Enable users to use their new activity types - Jira
Project Phoenix – Figma
Project Phoenix – Figma
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Resolver
Resolver
Create
Create
Rovo Ask Rovo
Ask Rovo
3 Notifications
3 Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Search work items
Search work items
Starred
Last commented
Last commented
More actions for Last commented
More actions for Last commented
My tickets
My tickets
More actions for My tickets
More actions for My tickets
(SRD)
(SRD)
More actions for (SRD)
More actions for (SRD)
Dialers & CRM Team > Backlog Tech Stories
Dialers & CRM Team > Backlog Tech Stories
More actions for Dialers & CRM Team > Backlog Tech Stories
More actions for Dialers & CRM Team > Backlog Tech Stories
Default filters
Default filters
My open work items
My open work items
More actions for My open work items
More actions for My open work items
Reported by me
Reported by me...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Work item search - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Work item search - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.040392287,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.05905826,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.10721409,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Usage | Windsurf","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Usage | Windsurf","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.029920213,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.15003991,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.16121309,"width":0.1796875,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.18276137,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.19393456,"width":0.039228722,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6848] Sidekick SMS issue - Jira","depth":4,"bounds":{"left":0.0,"top":0.21548285,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[SRD-6848] Sidekick SMS issue - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.22665602,"width":0.06632314,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.2482043,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"bounds":{"left":0.013297873,"top":0.25937748,"width":0.041223403,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.28092578,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"bounds":{"left":0.013297873,"top":0.29209897,"width":0.041223403,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"bounds":{"left":0.0,"top":0.31364724,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"bounds":{"left":0.013297873,"top":0.32482043,"width":0.013131649,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny\\Exceptions\\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app","depth":4,"bounds":{"left":0.0,"top":0.3463687,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny\\Exceptions\\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app","depth":5,"bounds":{"left":0.013297873,"top":0.3575419,"width":0.2847407,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.3790902,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.39026338,"width":0.1796875,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira","depth":4,"bounds":{"left":0.0,"top":0.41181165,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.42298484,"width":0.2835771,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.4445331,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.013297873,"top":0.4557063,"width":0.014960106,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira","depth":4,"bounds":{"left":0.0,"top":0.4772546,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.4884278,"width":0.15259309,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20771] Call Scoring filter for Exec reports - Jira","depth":4,"bounds":{"left":0.0,"top":0.509976,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20771] Call Scoring filter for Exec reports - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.5211492,"width":0.08909574,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira","depth":4,"bounds":{"left":0.0,"top":0.54269755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.55387074,"width":0.13597074,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20879] Enable users to use their new activity types - Jira","depth":4,"bounds":{"left":0.0,"top":0.575419,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20879] Enable users to use their new activity types - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.5865922,"width":0.106715426,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Project Phoenix – Figma","depth":4,"bounds":{"left":0.0,"top":0.60814047,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Project Phoenix – Figma","depth":5,"bounds":{"left":0.013297873,"top":0.61931366,"width":0.041888297,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20847] Users can filter Scores in Team Insights by Host - Jira","depth":4,"bounds":{"left":0.0,"top":0.6408619,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20847] Users can filter Scores in Team Insights by Host - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.6520351,"width":0.1143617,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20534] AI Call Scoring quick access in Playback header - Jira","depth":4,"bounds":{"left":0.0,"top":0.6735834,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20534] AI Call Scoring quick access in Playback header - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.6847566,"width":0.1143617,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.70790106,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to:","depth":9,"bounds":{"left":0.090259306,"top":0.07861133,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Top Bar","depth":10,"bounds":{"left":0.090259306,"top":0.097765364,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Top Bar","depth":11,"bounds":{"left":0.090259306,"top":0.097765364,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sidebar","depth":10,"bounds":{"left":0.090259306,"top":0.11691939,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sidebar","depth":11,"bounds":{"left":0.090259306,"top":0.11691939,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Main Content","depth":10,"bounds":{"left":0.090259306,"top":0.13607343,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Main Content","depth":11,"bounds":{"left":0.090259306,"top":0.13607343,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse sidebar [","depth":9,"bounds":{"left":0.08361037,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse sidebar [","depth":11,"bounds":{"left":0.0887633,"top":0.06344773,"width":0.039727394,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Switch sites or apps","depth":10,"bounds":{"left":0.095578454,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Switch sites or apps","depth":12,"bounds":{"left":0.10073138,"top":0.06344773,"width":0.044215426,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to your Jira homepage","depth":9,"bounds":{"left":0.10887633,"top":0.057861134,"width":0.029421542,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Resolver","depth":11,"bounds":{"left":0.40475398,"top":0.06264964,"width":0.24268617,"height":0.015961692},"on_screen":true,"value":"Resolver","help_text":"","placeholder":"Search","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Resolver","depth":12,"bounds":{"left":0.40475398,"top":0.06384677,"width":0.018949468,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create","depth":10,"bounds":{"left":0.65575135,"top":0.057861134,"width":0.030086435,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":12,"bounds":{"left":0.66705453,"top":0.06384677,"width":0.014793883,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Rovo Ask Rovo","depth":12,"bounds":{"left":0.91223407,"top":0.057861134,"width":0.035904255,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Rovo","depth":14,"bounds":{"left":0.92353725,"top":0.06384677,"width":0.020611702,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"3 Notifications","depth":12,"bounds":{"left":0.9494681,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"3 Notifications","depth":14,"bounds":{"left":0.954621,"top":0.06344773,"width":0.031914894,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Help","depth":12,"bounds":{"left":0.96143615,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Help","depth":14,"bounds":{"left":0.9665891,"top":0.06344773,"width":0.010139627,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Settings","depth":12,"bounds":{"left":0.9734042,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Settings","depth":14,"bounds":{"left":0.97855717,"top":0.06344773,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"lukas.kovalik@jiminny.com","depth":12,"bounds":{"left":0.98537236,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas.kovalik@jiminny.com","depth":14,"bounds":{"left":0.99052525,"top":0.06344773,"width":0.009474754,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"For you","depth":12,"bounds":{"left":0.08361037,"top":0.09976058,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"For you","depth":15,"bounds":{"left":0.09424867,"top":0.10574621,"width":0.01662234,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Recent","depth":12,"bounds":{"left":0.08361037,"top":0.12529927,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Recent","depth":15,"bounds":{"left":0.09424867,"top":0.13128492,"width":0.015458777,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Starred","depth":12,"bounds":{"left":0.08361037,"top":0.15083799,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Starred","depth":15,"bounds":{"left":0.09424867,"top":0.15682362,"width":0.016456118,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Apps","depth":12,"bounds":{"left":0.08361037,"top":0.1763767,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Apps","depth":15,"bounds":{"left":0.09424867,"top":0.18236233,"width":0.011635638,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Apps","depth":13,"bounds":{"left":0.15309176,"top":0.17956904,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Apps","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Spaces","depth":12,"bounds":{"left":0.08361037,"top":0.2019154,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Spaces","depth":15,"bounds":{"left":0.09424867,"top":0.20790103,"width":0.016456118,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create space","depth":13,"bounds":{"left":0.13646941,"top":0.20510775,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create space","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for spaces","depth":13,"bounds":{"left":0.14577793,"top":0.20510775,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for spaces","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Recent","depth":16,"bounds":{"left":0.08959442,"top":0.23423783,"width":0.013464096,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny (New)","depth":17,"bounds":{"left":0.08759973,"top":0.2529928,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny (New)","depth":20,"bounds":{"left":0.09823803,"top":0.25897846,"width":0.032081116,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Jiminny (New)","depth":18,"bounds":{"left":0.08892952,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXMenuButton","text":"Create board","depth":18,"bounds":{"left":0.13646941,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create board","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Jiminny (New)","depth":18,"bounds":{"left":0.14577793,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Jiminny (New)","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Platform Team","depth":19,"bounds":{"left":0.09158909,"top":0.27853152,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Team","depth":22,"bounds":{"left":0.1022274,"top":0.28451717,"width":0.032247342,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.15309176,"top":0.28172386,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Capture Team","depth":19,"bounds":{"left":0.09158909,"top":0.30407023,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Capture Team","depth":22,"bounds":{"left":0.1022274,"top":0.31005585,"width":0.03125,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.15309176,"top":0.30726257,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Enterprise Stability Issues 🤕","depth":19,"bounds":{"left":0.09158909,"top":0.32960895,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Enterprise Stability Issues 🤕","depth":22,"bounds":{"left":0.1022274,"top":0.33559456,"width":0.050531916,"height":0.030726258},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.15309176,"top":0.33280128,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Processing Team","depth":19,"bounds":{"left":0.09158909,"top":0.35514766,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Processing Team","depth":22,"bounds":{"left":0.1022274,"top":0.36113328,"width":0.038231384,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.15309176,"top":0.35834,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SE Kanban","depth":19,"bounds":{"left":0.09158909,"top":0.38068634,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SE Kanban","depth":22,"bounds":{"left":0.1022274,"top":0.386672,"width":0.024102394,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.15309176,"top":0.38387868,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Service-Desk","depth":17,"bounds":{"left":0.08759973,"top":0.40622506,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Service-Desk","depth":20,"bounds":{"left":0.09823803,"top":0.4122107,"width":0.03025266,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Service-Desk","depth":18,"bounds":{"left":0.15442154,"top":0.4094174,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Service-Desk","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More spaces","depth":17,"bounds":{"left":0.08759973,"top":0.43176377,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More spaces","depth":20,"bounds":{"left":0.09823803,"top":0.43774942,"width":0.028756648,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Filters","depth":12,"bounds":{"left":0.08361037,"top":0.45730248,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Filters","depth":15,"bounds":{"left":0.09424867,"top":0.4632881,"width":0.013796543,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Filters","depth":13,"bounds":{"left":0.14577793,"top":0.46049482,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Filters","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Search work items","depth":14,"bounds":{"left":0.08759973,"top":0.4828412,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search work items","depth":17,"bounds":{"left":0.09823803,"top":0.4888268,"width":0.041223403,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Starred","depth":16,"bounds":{"left":0.08959442,"top":0.5151636,"width":0.014461436,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Last commented","depth":17,"bounds":{"left":0.08759973,"top":0.5339186,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Last commented","depth":20,"bounds":{"left":0.09823803,"top":0.53990424,"width":0.03706782,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Last commented","depth":18,"bounds":{"left":0.15309176,"top":0.5371109,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Last commented","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"My tickets","depth":17,"bounds":{"left":0.08759973,"top":0.5594573,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"My tickets","depth":20,"bounds":{"left":0.09823803,"top":0.5654429,"width":0.022938829,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for My tickets","depth":18,"bounds":{"left":0.15309176,"top":0.56264967,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for My tickets","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"(SRD)","depth":17,"bounds":{"left":0.08759973,"top":0.584996,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"(SRD)","depth":20,"bounds":{"left":0.09823803,"top":0.59098166,"width":0.012799202,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for (SRD)","depth":18,"bounds":{"left":0.15309176,"top":0.58818835,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for (SRD)","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dialers & CRM Team > Backlog Tech Stories","depth":17,"bounds":{"left":0.08759973,"top":0.6105347,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Dialers & CRM Team > Backlog Tech Stories","depth":20,"bounds":{"left":0.09823803,"top":0.61652035,"width":0.053690158,"height":0.029928172},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Dialers & CRM Team > Backlog Tech Stories","depth":18,"bounds":{"left":0.15309176,"top":0.61372703,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Dialers & CRM Team > Backlog Tech Stories","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Default filters","depth":14,"bounds":{"left":0.08759973,"top":0.6360734,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Default filters","depth":17,"bounds":{"left":0.09823803,"top":0.6420591,"width":0.030086435,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"My open work items","depth":16,"bounds":{"left":0.09158909,"top":0.66161215,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"My open work items","depth":19,"bounds":{"left":0.1022274,"top":0.6675978,"width":0.04504654,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for My open work items","depth":17,"bounds":{"left":0.15309176,"top":0.66480446,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for My open work items","depth":19,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Reported by me","depth":16,"bounds":{"left":0.09158909,"top":0.68715084,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reported by me","depth":19,"bounds":{"left":0.1022274,"top":0.69313645,"width":0.03523936,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
3697018203100573482
|
-8497404047486298647
|
visual_change
|
accessibility
|
NULL
|
Work item search - Jira
Work item search - Jira
Cl Work item search - Jira
Work item search - Jira
Close tab
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Usage | Windsurf
Usage | Windsurf
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
[SRD-6848] Sidekick SMS issue - Jira
[SRD-6848] Sidekick SMS issue - Jira
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
Jiminny
Jiminny
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
New Tab
New Tab
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20879] Enable users to use their new activity types - Jira
[JY-20879] Enable users to use their new activity types - Jira
Project Phoenix – Figma
Project Phoenix – Figma
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Resolver
Resolver
Create
Create
Rovo Ask Rovo
Ask Rovo
3 Notifications
3 Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Search work items
Search work items
Starred
Last commented
Last commented
More actions for Last commented
More actions for Last commented
My tickets
My tickets
More actions for My tickets
More actions for My tickets
(SRD)
(SRD)
More actions for (SRD)
More actions for (SRD)
Dialers & CRM Team > Backlog Tech Stories
Dialers & CRM Team > Backlog Tech Stories
More actions for Dialers & CRM Team > Backlog Tech Stories
More actions for Dialers & CRM Team > Backlog Tech Stories
Default filters
Default filters
My open work items
My open work items
More actions for My open work items
More actions for My open work items
Reported by me
Reported by me...
|
55517
|
NULL
|
NULL
|
NULL
|
|
55524
|
1925
|
17
|
2026-05-18T15:02:28.416619+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779116548416_m2.jpg...
|
Firefox
|
Work item search - Jira — Work
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
boosterole••0!+ Work item search - JiraService-Des boosterole••0!+ Work item search - JiraService-Desk - Queues - PlatfornUsage | WindsurfAllow owner's role to be selectedPipelines - jiminny/appN1 (SRD-6848] Sidekick SMS issue -CloudWatch I us-east-2a CloudWatch | us-east-28 Jiminny) Jiminny|Exceptions|SocialAccountAllow owner's role to be selectedU ISRD-68621 'User does not have alNew Tab(JY-209121 Fallback mechanism fcS MIY-207711 Call Scorina filter for &(UY-20878] SCIM > Allow custome- WJY-208791 Enable users to use thProject Phoenix - Figma(UY-20847] Users can filter ScoresLIY-205341 Al Call Scorina quick al— New Tab00O JIMINNY@ For you(• Recent# Starred8f Apps• Spaces+ ***Jiminny (New)ull Planorm leamIID Capture TeamID Enterprise Stability I…..IN Processing TeamMl SE KanbanC Service-Desk= More spaces— Filters1 Q Search work items— ast commentedi= My tickets= (SRD)— Dialers & CRM Team > ...~ Nefault filterc I= My open work items= Reported by me= All work items= Open work items= Done work items= Viewed recently= Created recently= Resolved recentlv= Updated recently= View all filters( DashboardsC: Operations& ConfluenceInny.dulasslan.neulAll work** Ask AIWorkOJY-1* JY-1JY-1NJY-AJMNO JMN8 JMNQ ResolverJOL textfields ~ "Resolver*"BOJOSTEROID BetaBoostDropTURN YOUR IDEAS INTO CONTENTMAKE A VIDEO ABOUT USLEARN MOREMY GAMES LIBRARY INSTALIPLEASE, WAIT...•LINDERAGEEMPIRESO ONARISOYou got in lineLOG VED VED VED VISSUESOX V+ CreateResolutionUnresolvedUnresolvedUnresolvedUnresolvedUnresolvedUnresolvedUnresolvedUnresolvedAll PlatformscollerCoastenTYCION WORLD* ON SALEPorent* ON SAICreated12 Feb 2025, 12:2727 Sept 2024, 09:3805 Apr 2024, 09:0430 Jan 2024, 13:4027 Nov 2023, 15:0715 Jul 2019, 21:5007 Mar 2019, 12:4807 Nov 2018, 09:06Updated12 Feb 2025, 12:4827 Sept 2024, 09:3802 Sept 2024, 16:4302 Sept 2024, 16:3917 Apr 2025, 07:5231 Mar 2022, 13:2405 Apr 2022, 14:4507 Apr 2022, 10:44Due dateNoneNoneNoneNoneNoneNoneNoneNone100% C/ 8 • Mon 18 May 18:02:28S ASK ROVO ® sô @Apps SharevE00"O a Clearfilterss Save filterm[PASSWORD_DOTS]...
|
NULL
|
8730831647910175186
|
NULL
|
click
|
ocr
|
NULL
|
boosterole••0!+ Work item search - JiraService-Des boosterole••0!+ Work item search - JiraService-Desk - Queues - PlatfornUsage | WindsurfAllow owner's role to be selectedPipelines - jiminny/appN1 (SRD-6848] Sidekick SMS issue -CloudWatch I us-east-2a CloudWatch | us-east-28 Jiminny) Jiminny|Exceptions|SocialAccountAllow owner's role to be selectedU ISRD-68621 'User does not have alNew Tab(JY-209121 Fallback mechanism fcS MIY-207711 Call Scorina filter for &(UY-20878] SCIM > Allow custome- WJY-208791 Enable users to use thProject Phoenix - Figma(UY-20847] Users can filter ScoresLIY-205341 Al Call Scorina quick al— New Tab00O JIMINNY@ For you(• Recent# Starred8f Apps• Spaces+ ***Jiminny (New)ull Planorm leamIID Capture TeamID Enterprise Stability I…..IN Processing TeamMl SE KanbanC Service-Desk= More spaces— Filters1 Q Search work items— ast commentedi= My tickets= (SRD)— Dialers & CRM Team > ...~ Nefault filterc I= My open work items= Reported by me= All work items= Open work items= Done work items= Viewed recently= Created recently= Resolved recentlv= Updated recently= View all filters( DashboardsC: Operations& ConfluenceInny.dulasslan.neulAll work** Ask AIWorkOJY-1* JY-1JY-1NJY-AJMNO JMN8 JMNQ ResolverJOL textfields ~ "Resolver*"BOJOSTEROID BetaBoostDropTURN YOUR IDEAS INTO CONTENTMAKE A VIDEO ABOUT USLEARN MOREMY GAMES LIBRARY INSTALIPLEASE, WAIT...•LINDERAGEEMPIRESO ONARISOYou got in lineLOG VED VED VED VISSUESOX V+ CreateResolutionUnresolvedUnresolvedUnresolvedUnresolvedUnresolvedUnresolvedUnresolvedUnresolvedAll PlatformscollerCoastenTYCION WORLD* ON SALEPorent* ON SAICreated12 Feb 2025, 12:2727 Sept 2024, 09:3805 Apr 2024, 09:0430 Jan 2024, 13:4027 Nov 2023, 15:0715 Jul 2019, 21:5007 Mar 2019, 12:4807 Nov 2018, 09:06Updated12 Feb 2025, 12:4827 Sept 2024, 09:3802 Sept 2024, 16:4302 Sept 2024, 16:3917 Apr 2025, 07:5231 Mar 2022, 13:2405 Apr 2022, 14:4507 Apr 2022, 10:44Due dateNoneNoneNoneNoneNoneNoneNoneNone100% C/ 8 • Mon 18 May 18:02:28S ASK ROVO ® sô @Apps SharevE00"O a Clearfilterss Save filterm[PASSWORD_DOTS]...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
55525
|
1925
|
18
|
2026-05-18T15:02:30.021148+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779116550021_m2.jpg...
|
Firefox
|
Work item search - Jira — Work
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Work item search - Jira
Work item search - Jira
Cl Work item search - Jira
Work item search - Jira
Close tab
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Usage | Windsurf
Usage | Windsurf
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
[SRD-6848] Sidekick SMS issue - Jira
[SRD-6848] Sidekick SMS issue - Jira
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
Jiminny
Jiminny
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
New Tab
New Tab
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20879] Enable users to use their new activity types - Jira
[JY-20879] Enable users to use their new activity types - Jira
Project Phoenix – Figma
Project Phoenix – Figma
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Resolver
Resolver
Create
Create
Rovo Ask Rovo
Ask Rovo
3 Notifications
3 Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Search work items
Search work items
Starred
Last commented
Last commented
More actions for Last commented
More actions for Last commented
My tickets
My tickets
More actions for My tickets
More actions for My tickets
(SRD)
(SRD)
More actions for (SRD)
More actions for (SRD)
Dialers & CRM Team > Backlog Tech Stories
Dialers & CRM Team > Backlog Tech Stories
More actions for Dialers & CRM Team > Backlog Tech Stories
More actions for Dialers & CRM Team > Backlog Tech Stories
Default filters
Default filters
My open work items
My open work items
More actions for My open work items
More actions for My open work items
Reported by me
Reported by me
More actions for Reported by me
More actions for Reported by me
All work items...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Work item search - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Work item search - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.040392287,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.05905826,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.10721409,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Usage | Windsurf","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Usage | Windsurf","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.029920213,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.15003991,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.16121309,"width":0.1796875,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.18276137,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.19393456,"width":0.039228722,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6848] Sidekick SMS issue - Jira","depth":4,"bounds":{"left":0.0,"top":0.21548285,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[SRD-6848] Sidekick SMS issue - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.22665602,"width":0.06632314,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.2482043,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"bounds":{"left":0.013297873,"top":0.25937748,"width":0.041223403,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.28092578,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"bounds":{"left":0.013297873,"top":0.29209897,"width":0.041223403,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"bounds":{"left":0.0,"top":0.31364724,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"bounds":{"left":0.013297873,"top":0.32482043,"width":0.013131649,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny\\Exceptions\\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app","depth":4,"bounds":{"left":0.0,"top":0.3463687,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny\\Exceptions\\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app","depth":5,"bounds":{"left":0.013297873,"top":0.3575419,"width":0.2847407,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.3790902,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.39026338,"width":0.1796875,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira","depth":4,"bounds":{"left":0.0,"top":0.41181165,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.42298484,"width":0.2835771,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.4445331,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.013297873,"top":0.4557063,"width":0.014960106,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira","depth":4,"bounds":{"left":0.0,"top":0.4772546,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.4884278,"width":0.15259309,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20771] Call Scoring filter for Exec reports - Jira","depth":4,"bounds":{"left":0.0,"top":0.509976,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20771] Call Scoring filter for Exec reports - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.5211492,"width":0.08909574,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira","depth":4,"bounds":{"left":0.0,"top":0.54269755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.55387074,"width":0.13597074,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20879] Enable users to use their new activity types - Jira","depth":4,"bounds":{"left":0.0,"top":0.575419,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20879] Enable users to use their new activity types - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.5865922,"width":0.106715426,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Project Phoenix – Figma","depth":4,"bounds":{"left":0.0,"top":0.60814047,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Project Phoenix – Figma","depth":5,"bounds":{"left":0.013297873,"top":0.61931366,"width":0.041888297,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20847] Users can filter Scores in Team Insights by Host - Jira","depth":4,"bounds":{"left":0.0,"top":0.6408619,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20847] Users can filter Scores in Team Insights by Host - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.6520351,"width":0.1143617,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20534] AI Call Scoring quick access in Playback header - Jira","depth":4,"bounds":{"left":0.0,"top":0.6735834,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20534] AI Call Scoring quick access in Playback header - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.6847566,"width":0.1143617,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.70790106,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to:","depth":9,"bounds":{"left":0.090259306,"top":0.07861133,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Top Bar","depth":10,"bounds":{"left":0.090259306,"top":0.097765364,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Top Bar","depth":11,"bounds":{"left":0.090259306,"top":0.097765364,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sidebar","depth":10,"bounds":{"left":0.090259306,"top":0.11691939,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sidebar","depth":11,"bounds":{"left":0.090259306,"top":0.11691939,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Main Content","depth":10,"bounds":{"left":0.090259306,"top":0.13607343,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Main Content","depth":11,"bounds":{"left":0.090259306,"top":0.13607343,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse sidebar [","depth":9,"bounds":{"left":0.08361037,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse sidebar [","depth":11,"bounds":{"left":0.0887633,"top":0.06344773,"width":0.039727394,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Switch sites or apps","depth":10,"bounds":{"left":0.095578454,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Switch sites or apps","depth":12,"bounds":{"left":0.10073138,"top":0.06344773,"width":0.044215426,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to your Jira homepage","depth":9,"bounds":{"left":0.10887633,"top":0.057861134,"width":0.029421542,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Resolver","depth":11,"bounds":{"left":0.40475398,"top":0.06264964,"width":0.24268617,"height":0.015961692},"on_screen":true,"value":"Resolver","help_text":"","placeholder":"Search","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Resolver","depth":12,"bounds":{"left":0.40475398,"top":0.06384677,"width":0.018949468,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create","depth":10,"bounds":{"left":0.65575135,"top":0.057861134,"width":0.030086435,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":12,"bounds":{"left":0.66705453,"top":0.06384677,"width":0.014793883,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Rovo Ask Rovo","depth":12,"bounds":{"left":0.91223407,"top":0.057861134,"width":0.035904255,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Rovo","depth":14,"bounds":{"left":0.92353725,"top":0.06384677,"width":0.020611702,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"3 Notifications","depth":12,"bounds":{"left":0.9494681,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"3 Notifications","depth":14,"bounds":{"left":0.954621,"top":0.06344773,"width":0.031914894,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Help","depth":12,"bounds":{"left":0.96143615,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Help","depth":14,"bounds":{"left":0.9665891,"top":0.06344773,"width":0.010139627,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Settings","depth":12,"bounds":{"left":0.9734042,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Settings","depth":14,"bounds":{"left":0.97855717,"top":0.06344773,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"lukas.kovalik@jiminny.com","depth":12,"bounds":{"left":0.98537236,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas.kovalik@jiminny.com","depth":14,"bounds":{"left":0.99052525,"top":0.06344773,"width":0.009474754,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"For you","depth":12,"bounds":{"left":0.08361037,"top":0.09976058,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"For you","depth":15,"bounds":{"left":0.09424867,"top":0.10574621,"width":0.01662234,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Recent","depth":12,"bounds":{"left":0.08361037,"top":0.12529927,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Recent","depth":15,"bounds":{"left":0.09424867,"top":0.13128492,"width":0.015458777,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Starred","depth":12,"bounds":{"left":0.08361037,"top":0.15083799,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Starred","depth":15,"bounds":{"left":0.09424867,"top":0.15682362,"width":0.016456118,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Apps","depth":12,"bounds":{"left":0.08361037,"top":0.1763767,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Apps","depth":15,"bounds":{"left":0.09424867,"top":0.18236233,"width":0.011635638,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Apps","depth":13,"bounds":{"left":0.15309176,"top":0.17956904,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Apps","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Spaces","depth":12,"bounds":{"left":0.08361037,"top":0.2019154,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Spaces","depth":15,"bounds":{"left":0.09424867,"top":0.20790103,"width":0.016456118,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create space","depth":13,"bounds":{"left":0.13646941,"top":0.20510775,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create space","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for spaces","depth":13,"bounds":{"left":0.14577793,"top":0.20510775,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for spaces","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Recent","depth":16,"bounds":{"left":0.08959442,"top":0.23423783,"width":0.013464096,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny (New)","depth":17,"bounds":{"left":0.08759973,"top":0.2529928,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny (New)","depth":20,"bounds":{"left":0.09823803,"top":0.25897846,"width":0.032081116,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Jiminny (New)","depth":18,"bounds":{"left":0.08892952,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXMenuButton","text":"Create board","depth":18,"bounds":{"left":0.13646941,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create board","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Jiminny (New)","depth":18,"bounds":{"left":0.14577793,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Jiminny (New)","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Platform Team","depth":19,"bounds":{"left":0.09158909,"top":0.27853152,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Team","depth":22,"bounds":{"left":0.1022274,"top":0.28451717,"width":0.032247342,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.15309176,"top":0.28172386,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Capture Team","depth":19,"bounds":{"left":0.09158909,"top":0.30407023,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Capture Team","depth":22,"bounds":{"left":0.1022274,"top":0.31005585,"width":0.03125,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.15309176,"top":0.30726257,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Enterprise Stability Issues 🤕","depth":19,"bounds":{"left":0.09158909,"top":0.32960895,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Enterprise Stability Issues 🤕","depth":22,"bounds":{"left":0.1022274,"top":0.33559456,"width":0.050531916,"height":0.030726258},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.15309176,"top":0.33280128,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Processing Team","depth":19,"bounds":{"left":0.09158909,"top":0.35514766,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Processing Team","depth":22,"bounds":{"left":0.1022274,"top":0.36113328,"width":0.038231384,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.15309176,"top":0.35834,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SE Kanban","depth":19,"bounds":{"left":0.09158909,"top":0.38068634,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SE Kanban","depth":22,"bounds":{"left":0.1022274,"top":0.386672,"width":0.024102394,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.15309176,"top":0.38387868,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Service-Desk","depth":17,"bounds":{"left":0.08759973,"top":0.40622506,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Service-Desk","depth":20,"bounds":{"left":0.09823803,"top":0.4122107,"width":0.03025266,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Service-Desk","depth":18,"bounds":{"left":0.15442154,"top":0.4094174,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Service-Desk","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More spaces","depth":17,"bounds":{"left":0.08759973,"top":0.43176377,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More spaces","depth":20,"bounds":{"left":0.09823803,"top":0.43774942,"width":0.028756648,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Filters","depth":12,"bounds":{"left":0.08361037,"top":0.45730248,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Filters","depth":15,"bounds":{"left":0.09424867,"top":0.4632881,"width":0.013796543,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Filters","depth":13,"bounds":{"left":0.14577793,"top":0.46049482,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Filters","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Search work items","depth":14,"bounds":{"left":0.08759973,"top":0.4828412,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search work items","depth":17,"bounds":{"left":0.09823803,"top":0.4888268,"width":0.041223403,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Starred","depth":16,"bounds":{"left":0.08959442,"top":0.5151636,"width":0.014461436,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Last commented","depth":17,"bounds":{"left":0.08759973,"top":0.5339186,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Last commented","depth":20,"bounds":{"left":0.09823803,"top":0.53990424,"width":0.03706782,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Last commented","depth":18,"bounds":{"left":0.15309176,"top":0.5371109,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Last commented","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"My tickets","depth":17,"bounds":{"left":0.08759973,"top":0.5594573,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"My tickets","depth":20,"bounds":{"left":0.09823803,"top":0.5654429,"width":0.022938829,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for My tickets","depth":18,"bounds":{"left":0.15309176,"top":0.56264967,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for My tickets","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"(SRD)","depth":17,"bounds":{"left":0.08759973,"top":0.584996,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"(SRD)","depth":20,"bounds":{"left":0.09823803,"top":0.59098166,"width":0.012799202,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for (SRD)","depth":18,"bounds":{"left":0.15309176,"top":0.58818835,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for (SRD)","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dialers & CRM Team > Backlog Tech Stories","depth":17,"bounds":{"left":0.08759973,"top":0.6105347,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Dialers & CRM Team > Backlog Tech Stories","depth":20,"bounds":{"left":0.09823803,"top":0.61652035,"width":0.053690158,"height":0.029928172},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Dialers & CRM Team > Backlog Tech Stories","depth":18,"bounds":{"left":0.15309176,"top":0.61372703,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Dialers & CRM Team > Backlog Tech Stories","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Default filters","depth":14,"bounds":{"left":0.08759973,"top":0.6360734,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Default filters","depth":17,"bounds":{"left":0.09823803,"top":0.6420591,"width":0.030086435,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"My open work items","depth":16,"bounds":{"left":0.09158909,"top":0.66161215,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"My open work items","depth":19,"bounds":{"left":0.1022274,"top":0.6675978,"width":0.04504654,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for My open work items","depth":17,"bounds":{"left":0.15309176,"top":0.66480446,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for My open work items","depth":19,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Reported by me","depth":16,"bounds":{"left":0.09158909,"top":0.68715084,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reported by me","depth":19,"bounds":{"left":0.1022274,"top":0.69313645,"width":0.03523936,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Reported by me","depth":17,"bounds":{"left":0.15309176,"top":0.6903432,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Reported by me","depth":19,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"All work items","depth":16,"bounds":{"left":0.09158909,"top":0.7126895,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
828156955373985305
|
-8496260555393411607
|
visual_change
|
accessibility
|
NULL
|
Work item search - Jira
Work item search - Jira
Cl Work item search - Jira
Work item search - Jira
Close tab
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Usage | Windsurf
Usage | Windsurf
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
[SRD-6848] Sidekick SMS issue - Jira
[SRD-6848] Sidekick SMS issue - Jira
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
Jiminny
Jiminny
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
New Tab
New Tab
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20879] Enable users to use their new activity types - Jira
[JY-20879] Enable users to use their new activity types - Jira
Project Phoenix – Figma
Project Phoenix – Figma
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Resolver
Resolver
Create
Create
Rovo Ask Rovo
Ask Rovo
3 Notifications
3 Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Search work items
Search work items
Starred
Last commented
Last commented
More actions for Last commented
More actions for Last commented
My tickets
My tickets
More actions for My tickets
More actions for My tickets
(SRD)
(SRD)
More actions for (SRD)
More actions for (SRD)
Dialers & CRM Team > Backlog Tech Stories
Dialers & CRM Team > Backlog Tech Stories
More actions for Dialers & CRM Team > Backlog Tech Stories
More actions for Dialers & CRM Team > Backlog Tech Stories
Default filters
Default filters
My open work items
My open work items
More actions for My open work items
More actions for My open work items
Reported by me
Reported by me
More actions for Reported by me
More actions for Reported by me
All work items...
|
55524
|
NULL
|
NULL
|
NULL
|
|
55526
|
1924
|
22
|
2026-05-18T15:02:31.257483+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779116551257_m1.jpg...
|
Firefox
|
Work item search - Jira — Work
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Work item search - Jira
Work item search - Jira
Cl Work item search - Jira
Work item search - Jira
Close tab
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Usage | Windsurf
Usage | Windsurf
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
[SRD-6848] Sidekick SMS issue - Jira
[SRD-6848] Sidekick SMS issue - Jira
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
Jiminny
Jiminny
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
New Tab
New Tab
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20879] Enable users to use their new activity types - Jira
[JY-20879] Enable users to use their new activity types - Jira
Project Phoenix – Figma
Project Phoenix – Figma
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Resolver
Resolver
Create
Create
Rovo Ask Rovo
Ask Rovo
3 Notifications
3 Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Search work items...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Work item search - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Work item search - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Usage | Windsurf","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Usage | Windsurf","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6848] Sidekick SMS issue - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[SRD-6848] Sidekick SMS issue - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny\\Exceptions\\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny\\Exceptions\\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20771] Call Scoring filter for Exec reports - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20771] Call Scoring filter for Exec reports - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20879] Enable users to use their new activity types - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20879] Enable users to use their new activity types - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Project Phoenix – Figma","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Project Phoenix – Figma","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20847] Users can filter Scores in Team Insights by Host - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20847] Users can filter Scores in Team Insights by Host - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20534] AI Call Scoring quick access in Playback header - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20534] AI Call Scoring quick access in Playback header - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to:","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Top Bar","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Top Bar","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sidebar","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sidebar","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Main Content","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Main Content","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse sidebar [","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse sidebar [","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Switch sites or apps","depth":10,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Switch sites or apps","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to your Jira homepage","depth":9,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Resolver","depth":11,"on_screen":true,"value":"Resolver","help_text":"","placeholder":"Search","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Resolver","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create","depth":10,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Rovo Ask Rovo","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Rovo","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"3 Notifications","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"3 Notifications","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Help","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Help","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Settings","depth":12,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Settings","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"lukas.kovalik@jiminny.com","depth":12,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas.kovalik@jiminny.com","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"For you","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"For you","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Recent","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Recent","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Starred","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Starred","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Apps","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Apps","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Apps","depth":13,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Apps","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Spaces","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Spaces","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create space","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create space","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for spaces","depth":13,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for spaces","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Recent","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny (New)","depth":17,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny (New)","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Jiminny (New)","depth":18,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXMenuButton","text":"Create board","depth":18,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create board","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Jiminny (New)","depth":18,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Jiminny (New)","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Platform Team","depth":19,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Team","depth":22,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Capture Team","depth":19,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Capture Team","depth":22,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Enterprise Stability Issues 🤕","depth":19,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Enterprise Stability Issues 🤕","depth":22,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Processing Team","depth":19,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Processing Team","depth":22,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SE Kanban","depth":19,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SE Kanban","depth":22,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Service-Desk","depth":17,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Service-Desk","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Service-Desk","depth":18,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Service-Desk","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More spaces","depth":17,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More spaces","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Filters","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Filters","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Filters","depth":13,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Filters","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Search work items","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
3472268408443476578
|
5771090278433214937
|
visual_change
|
accessibility
|
NULL
|
Work item search - Jira
Work item search - Jira
Cl Work item search - Jira
Work item search - Jira
Close tab
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Usage | Windsurf
Usage | Windsurf
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
[SRD-6848] Sidekick SMS issue - Jira
[SRD-6848] Sidekick SMS issue - Jira
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
Jiminny
Jiminny
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
New Tab
New Tab
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20879] Enable users to use their new activity types - Jira
[JY-20879] Enable users to use their new activity types - Jira
Project Phoenix – Figma
Project Phoenix – Figma
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Resolver
Resolver
Create
Create
Rovo Ask Rovo
Ask Rovo
3 Notifications
3 Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Search work items...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
55527
|
1925
|
19
|
2026-05-18T15:02:36.108579+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779116556108_m2.jpg...
|
Firefox
|
Work item search - Jira — Work
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Work item search - Jira
Work item search - Jira
Cl Work item search - Jira
Work item search - Jira
Close tab...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Work item search - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Work item search - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.040392287,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.05905826,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
3119745355767091304
|
-1282663318119300892
|
visual_change
|
hybrid
|
NULL
|
Work item search - Jira
Work item search - Jira
Cl Work item search - Jira
Work item search - Jira
Close tab
FirefoxViewMistonbookmarksJOOISWinaowmelpService-Desk - Queues - Platformw Usage | WindsurfAllow owner's role to be selectedPipelines - jiminny/appN1 (SRD-6848] Sidekick SMS issue -CloudWatch I us-east-2CloudWatch | us-east-27 Jiminnv) JiminnylExceptions|SocialAccountAllow owner's role to be selectedY [SRD-6862] 'User does not havee New TabT 1JY-20912] Fallback mechanism fo[JY-20771] Call Scoring filter for E(UY-20878) SCIM > Allow custome€7 (Jy-208791 Enable users to use thProject Phoenix - Figma(JY-20847] Users can filter Scores#' [JY-20534] Al Call Scoring quick a— New TalProfilesO JIMINNY@ For you|All work(• Recent# Starred* Ask AIBasictextflelds ~ "Resolver*"0+ Apps0, Spaces+ ...• JY-16891 Refactor transcription providers flowJiminny (New)+ **•* JY-14913 Check if a transcription mode is allowed before using it as overridelll Planorm leamIID Capture TeamŒD Enterprise Stability I...W Processing Team# JY-12384 Uploader > create a new platform for uploaded calls# JY-11338 Remove supportChannelDiarization method and use track channels• JY-10577 Allow dialer specific rules for particinants creationII SE Kanban# JMNY-6785 Users must finish onboarding to be able to use the dialer(4 Service-Desk= More spaces# JMNY-3404 Define and configure data payloads— Filters'b JMNY-3112 Implement soft-deletion of transcription_model_locale entries1Q Search work items= ast commented= My tickets= (SRD)= Dialers & CRM Team > ...Default filters|= My open work items— Reported bv mel= All work iteme= Open work items— Done work items= Viewed recently= Created recently= Resolved recentlv= Updated recently= View all filtersDashboardsC Operations& ConfluenceQ ResolverAssignee& Unassigned& Unassigned.I Ilian Kyuchukov¿ Kaloyan Nikolov (Dea....1 Tonislav Atanasov (D...Eie Nikola Petkanski (Dea.& UnassignedJames GrahamReporterMinail MihaylovO Ilian KyuchukovGalya DimitrovaMihail Mihaylov1 Tonislav Atanasov (Deactivated)James Graham• James GrahamZ Nikola Petkanski (Deactivated)Priority= Medium= Medium= Medium= Medium= Medium= Medium= Medium80f8D+ CreateStatusBACKLOGBACKLOGVCLOSEDvCLOSEDCLOSEDVNEW ISSUESICEBOXVCLOSEDResolutionCreatedUnresolved12 Feb 2025, 12:27Unresolved27 Sept 2024, 09:38Unresolved05 Apr 2024, 09:04Unresolved30 Jan 2024, 13:40Unresolved27 Nov 2023, 15:07Unresolved15 Jul 2019, 21:50Unresolved07 Mar 2019, 12:48Unresolved07 Nov 2018, 09:06Updated12 Feb 2025, 12:4827 Sept 2024, 09:3802 Sept 2024, 16:4302 Sept 2024, 16:3917 Apr 2025, 07:5231 Mar 2022, 13:2405 Apr 2022, 14:4507 Apr 2022, 10:44100% Mon 18 May 18:02:35Ask RovoApps Sharev«O Q Clearfilters Save filterDue dateNoneNoneNoneNoneNoneNoneNoneNone...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
55528
|
1924
|
23
|
2026-05-18T15:02:37.268491+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779116557268_m1.jpg...
|
Firefox
|
Work item search - Jira — Work
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Work item search - Jira
Work item search - Jira
Cl Work item search - Jira
Work item search - Jira
Close tab
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Usage | Windsurf
Usage | Windsurf
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
[SRD-6848] Sidekick SMS issue - Jira
[SRD-6848] Sidekick SMS issue - Jira
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
Jiminny
Jiminny
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
New Tab
New Tab
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20879] Enable users to use their new activity types - Jira
[JY-20879] Enable users to use their new activity types - Jira
Project Phoenix – Figma
Project Phoenix – Figma
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Resolver
Resolver
Create
Create
Rovo Ask Rovo
Ask Rovo
3 Notifications
3 Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Work item search - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Work item search - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Usage | Windsurf","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Usage | Windsurf","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6848] Sidekick SMS issue - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[SRD-6848] Sidekick SMS issue - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny\\Exceptions\\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny\\Exceptions\\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20771] Call Scoring filter for Exec reports - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20771] Call Scoring filter for Exec reports - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20879] Enable users to use their new activity types - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20879] Enable users to use their new activity types - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Project Phoenix – Figma","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Project Phoenix – Figma","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20847] Users can filter Scores in Team Insights by Host - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20847] Users can filter Scores in Team Insights by Host - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20534] AI Call Scoring quick access in Playback header - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20534] AI Call Scoring quick access in Playback header - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to:","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Top Bar","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Top Bar","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sidebar","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sidebar","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Main Content","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Main Content","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse sidebar [","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse sidebar [","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Switch sites or apps","depth":10,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Switch sites or apps","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to your Jira homepage","depth":9,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Resolver","depth":11,"on_screen":true,"value":"Resolver","help_text":"","placeholder":"Search","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Resolver","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create","depth":10,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Rovo Ask Rovo","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Rovo","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"3 Notifications","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"3 Notifications","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Help","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Help","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Settings","depth":12,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Settings","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"lukas.kovalik@jiminny.com","depth":12,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas.kovalik@jiminny.com","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"For you","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"For you","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Recent","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Recent","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Starred","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Starred","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Apps","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Apps","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Apps","depth":13,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Apps","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Spaces","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Spaces","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create space","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create space","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for spaces","depth":13,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for spaces","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Recent","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny (New)","depth":17,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
-2755418295706103175
|
-3456776046022961255
|
visual_change
|
accessibility
|
NULL
|
Work item search - Jira
Work item search - Jira
Cl Work item search - Jira
Work item search - Jira
Close tab
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Usage | Windsurf
Usage | Windsurf
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
[SRD-6848] Sidekick SMS issue - Jira
[SRD-6848] Sidekick SMS issue - Jira
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
Jiminny
Jiminny
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
New Tab
New Tab
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20879] Enable users to use their new activity types - Jira
[JY-20879] Enable users to use their new activity types - Jira
Project Phoenix – Figma
Project Phoenix – Figma
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Resolver
Resolver
Create
Create
Rovo Ask Rovo
Ask Rovo
3 Notifications
3 Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)...
|
55526
|
NULL
|
NULL
|
NULL
|
|
55529
|
1924
|
24
|
2026-05-18T15:02:38.531261+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779116558531_m1.jpg...
|
Firefox
|
Service-Desk - Queues - Platform team - Service sp Service-Desk - Queues - Platform team - Service space - Jira — Work...
|
1
|
jiminny.atlassian.net/jira/servicedesk/projects/SR jiminny.atlassian.net/jira/servicedesk/projects/SRD/queues/custom/37...
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Work item search - Jira
Work item search - Jira
Se Work item search - Jira
Work item search - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Close tab
Usage | Windsurf
Usage | Windsurf
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
[SRD-6848] Sidekick SMS issue - Jira
[SRD-6848] Sidekick SMS issue - Jira
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
Jiminny
Jiminny
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
New Tab
New Tab
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20879] Enable users to use their new activity types - Jira
[JY-20879] Enable users to use their new activity types - Jira
Project Phoenix – Figma
Project Phoenix – Figma
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Work item search - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Work item search - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Usage | Windsurf","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Usage | Windsurf","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6848] Sidekick SMS issue - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[SRD-6848] Sidekick SMS issue - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny\\Exceptions\\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny\\Exceptions\\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20771] Call Scoring filter for Exec reports - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20771] Call Scoring filter for Exec reports - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20879] Enable users to use their new activity types - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20879] Enable users to use their new activity types - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Project Phoenix – Figma","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Project Phoenix – Figma","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20847] Users can filter Scores in Team Insights by Host - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20847] Users can filter Scores in Team Insights by Host - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20534] AI Call Scoring quick access in Playback header - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20534] AI Call Scoring quick access in Playback header - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
-2353377592398689916
|
-3456775977303485480
|
click
|
accessibility
|
NULL
|
Work item search - Jira
Work item search - Jira
Se Work item search - Jira
Work item search - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Close tab
Usage | Windsurf
Usage | Windsurf
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
[SRD-6848] Sidekick SMS issue - Jira
[SRD-6848] Sidekick SMS issue - Jira
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
Jiminny
Jiminny
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
New Tab
New Tab
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20879] Enable users to use their new activity types - Jira
[JY-20879] Enable users to use their new activity types - Jira
Project Phoenix – Figma
Project Phoenix – Figma
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
55530
|
1925
|
20
|
2026-05-18T15:02:38.505513+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779116558505_m2.jpg...
|
Firefox
|
Service-Desk - Queues - Platform team - Service sp Service-Desk - Queues - Platform team - Service space - Jira — Work...
|
1
|
jiminny.atlassian.net/jira/servicedesk/projects/SR jiminny.atlassian.net/jira/servicedesk/projects/SRD/queues/custom/37...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Work item search - Jira
Work item search - Jira
Se Work item search - Jira
Work item search - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Close tab
Usage | Windsurf
Usage | Windsurf
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
[SRD-6848] Sidekick SMS issue - Jira
[SRD-6848] Sidekick SMS issue - Jira
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
Jiminny
Jiminny
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
New Tab
New Tab
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Work item search - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Work item search - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.040392287,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.10721409,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.09177973,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Usage | Windsurf","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Usage | Windsurf","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.029920213,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.15003991,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.16121309,"width":0.1796875,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.18276137,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.19393456,"width":0.039228722,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6848] Sidekick SMS issue - Jira","depth":4,"bounds":{"left":0.0,"top":0.21548285,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[SRD-6848] Sidekick SMS issue - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.22665602,"width":0.06632314,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.2482043,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"bounds":{"left":0.013297873,"top":0.25937748,"width":0.041223403,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.28092578,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"bounds":{"left":0.013297873,"top":0.29209897,"width":0.041223403,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"bounds":{"left":0.0,"top":0.31364724,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"bounds":{"left":0.013297873,"top":0.32482043,"width":0.013131649,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny\\Exceptions\\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app","depth":4,"bounds":{"left":0.0,"top":0.3463687,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny\\Exceptions\\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app","depth":5,"bounds":{"left":0.013297873,"top":0.3575419,"width":0.2847407,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.3790902,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.39026338,"width":0.1796875,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira","depth":4,"bounds":{"left":0.0,"top":0.41181165,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.42298484,"width":0.2835771,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.4445331,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.013297873,"top":0.4557063,"width":0.014960106,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira","depth":4,"bounds":{"left":0.0,"top":0.4772546,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
7797688109910685089
|
-3384718451985754688
|
click
|
accessibility
|
NULL
|
Work item search - Jira
Work item search - Jira
Se Work item search - Jira
Work item search - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Close tab
Usage | Windsurf
Usage | Windsurf
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
[SRD-6848] Sidekick SMS issue - Jira
[SRD-6848] Sidekick SMS issue - Jira
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
Jiminny
Jiminny
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
New Tab
New Tab
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira...
|
55527
|
NULL
|
NULL
|
NULL
|
|
55531
|
1925
|
21
|
2026-05-18T15:02:39.070749+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779116559070_m2.jpg...
|
Firefox
|
Service-Desk - Queues - Platform team - Service sp Service-Desk - Queues - Platform team - Service space - Jira — Work...
|
1
|
jiminny.atlassian.net/jira/servicedesk/projects/SR jiminny.atlassian.net/jira/servicedesk/projects/SRD/queues/custom/37...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Work item search - Jira
Work item search - Jira
Se Work item search - Jira
Work item search - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Close tab
Usage | Windsurf
Usage | Windsurf
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
[SRD-6848] Sidekick SMS issue - Jira
[SRD-6848] Sidekick SMS issue - Jira
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
Jiminny
Jiminny
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
New Tab
New Tab
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20879] Enable users to use their new activity types - Jira
[JY-20879] Enable users to use their new activity types - Jira
Project Phoenix – Figma
Project Phoenix – Figma
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
Main Content
Main Content
Queue
Queue
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
Notifications
Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
Summary
Summary
More actions for summary
More actions for summary
Queues
Queues
Create
Create
More for queues
More for queues
Team Priority
Team Priority
All open tickets
All open tickets
Star All open tickets
14
Unassigned tickets
Unassigned tickets
Star Unassigned tickets
3
Support team Queue
Support team Queue
Star Support team Queue
5
Raised by me
Raised by me
Star Raised by me
0
Assigned to me
Assigned to me
Star Assigned to me
1
Service requests
Service requests
Star Service requests
5
Platform team
Platform team
Star Platform team
3
Processing team
Processing team
Star Processing team
7
Site reliability team
Site reliability team
Star Site reliability team...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Work item search - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Work item search - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.040392287,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.10721409,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.09177973,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Usage | Windsurf","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Usage | Windsurf","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.029920213,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.15003991,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.16121309,"width":0.1796875,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.18276137,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.19393456,"width":0.039228722,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6848] Sidekick SMS issue - Jira","depth":4,"bounds":{"left":0.0,"top":0.21548285,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[SRD-6848] Sidekick SMS issue - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.22665602,"width":0.06632314,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.2482043,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"bounds":{"left":0.013297873,"top":0.25937748,"width":0.041223403,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.28092578,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"bounds":{"left":0.013297873,"top":0.29209897,"width":0.041223403,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"bounds":{"left":0.0,"top":0.31364724,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"bounds":{"left":0.013297873,"top":0.32482043,"width":0.013131649,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny\\Exceptions\\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app","depth":4,"bounds":{"left":0.0,"top":0.3463687,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny\\Exceptions\\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app","depth":5,"bounds":{"left":0.013297873,"top":0.3575419,"width":0.2847407,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.3790902,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.39026338,"width":0.1796875,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira","depth":4,"bounds":{"left":0.0,"top":0.41181165,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.42298484,"width":0.2835771,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.4445331,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.013297873,"top":0.4557063,"width":0.014960106,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira","depth":4,"bounds":{"left":0.0,"top":0.4772546,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.4884278,"width":0.15259309,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20771] Call Scoring filter for Exec reports - Jira","depth":4,"bounds":{"left":0.0,"top":0.509976,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20771] Call Scoring filter for Exec reports - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.5211492,"width":0.08909574,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira","depth":4,"bounds":{"left":0.0,"top":0.54269755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.55387074,"width":0.13597074,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20879] Enable users to use their new activity types - Jira","depth":4,"bounds":{"left":0.0,"top":0.575419,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20879] Enable users to use their new activity types - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.5865922,"width":0.106715426,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Project Phoenix – Figma","depth":4,"bounds":{"left":0.0,"top":0.60814047,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Project Phoenix – Figma","depth":5,"bounds":{"left":0.013297873,"top":0.61931366,"width":0.041888297,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20847] Users can filter Scores in Team Insights by Host - Jira","depth":4,"bounds":{"left":0.0,"top":0.6408619,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20847] Users can filter Scores in Team Insights by Host - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.6520351,"width":0.1143617,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20534] AI Call Scoring quick access in Playback header - Jira","depth":4,"bounds":{"left":0.0,"top":0.6735834,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20534] AI Call Scoring quick access in Playback header - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.6847566,"width":0.1143617,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.70790106,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to:","depth":9,"bounds":{"left":0.090259306,"top":0.07861133,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Top Bar","depth":10,"bounds":{"left":0.090259306,"top":0.097765364,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Top Bar","depth":11,"bounds":{"left":0.090259306,"top":0.097765364,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sidebar","depth":10,"bounds":{"left":0.090259306,"top":0.11691939,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sidebar","depth":11,"bounds":{"left":0.090259306,"top":0.11691939,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Main Content","depth":10,"bounds":{"left":0.090259306,"top":0.13607343,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Main Content","depth":11,"bounds":{"left":0.090259306,"top":0.13607343,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Queue","depth":10,"bounds":{"left":0.090259306,"top":0.15522745,"width":0.014461436,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Queue","depth":11,"bounds":{"left":0.090259306,"top":0.15522745,"width":0.014461436,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse sidebar [","depth":9,"bounds":{"left":0.08361037,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse sidebar [","depth":11,"bounds":{"left":0.0887633,"top":0.06344773,"width":0.039727394,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Switch sites or apps","depth":10,"bounds":{"left":0.095578454,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Switch sites or apps","depth":12,"bounds":{"left":0.10073138,"top":0.06344773,"width":0.044215426,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to your Jira homepage","depth":9,"bounds":{"left":0.10887633,"top":0.057861134,"width":0.029421542,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Search, press enter to navigate to advanced search with your text query","depth":11,"bounds":{"left":0.40475398,"top":0.06264964,"width":0.24268617,"height":0.015961692},"on_screen":true,"help_text":"","placeholder":"Search","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Create","depth":10,"bounds":{"left":0.65575135,"top":0.057861134,"width":0.030086435,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":12,"bounds":{"left":0.66705453,"top":0.06384677,"width":0.014793883,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Rovo Ask Rovo","depth":12,"bounds":{"left":0.91223407,"top":0.057861134,"width":0.035904255,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Rovo","depth":14,"bounds":{"left":0.92353725,"top":0.06384677,"width":0.020611702,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Notifications","depth":12,"bounds":{"left":0.9494681,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Notifications","depth":14,"bounds":{"left":0.954621,"top":0.06344773,"width":0.027759308,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Help","depth":12,"bounds":{"left":0.96143615,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Help","depth":14,"bounds":{"left":0.9665891,"top":0.06344773,"width":0.010139627,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Settings","depth":12,"bounds":{"left":0.9734042,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Settings","depth":14,"bounds":{"left":0.97855717,"top":0.06344773,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"lukas.kovalik@jiminny.com","depth":12,"bounds":{"left":0.98537236,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas.kovalik@jiminny.com","depth":14,"bounds":{"left":0.99052525,"top":0.06344773,"width":0.009474754,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"For you","depth":12,"bounds":{"left":0.08361037,"top":0.09976058,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"For you","depth":15,"bounds":{"left":0.09424867,"top":0.10574621,"width":0.01662234,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Recent","depth":12,"bounds":{"left":0.08361037,"top":0.12529927,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Recent","depth":15,"bounds":{"left":0.09424867,"top":0.13128492,"width":0.015458777,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Starred","depth":12,"bounds":{"left":0.08361037,"top":0.15083799,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Starred","depth":15,"bounds":{"left":0.09424867,"top":0.15682362,"width":0.016456118,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Apps","depth":12,"bounds":{"left":0.08361037,"top":0.1763767,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Apps","depth":15,"bounds":{"left":0.09424867,"top":0.18236233,"width":0.011635638,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Apps","depth":13,"bounds":{"left":0.15309176,"top":0.17956904,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Apps","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Spaces","depth":12,"bounds":{"left":0.08361037,"top":0.2019154,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Spaces","depth":15,"bounds":{"left":0.09424867,"top":0.20790103,"width":0.016456118,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create space","depth":13,"bounds":{"left":0.13646941,"top":0.20510775,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create space","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for spaces","depth":13,"bounds":{"left":0.14577793,"top":0.20510775,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for spaces","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Recent","depth":16,"bounds":{"left":0.08959442,"top":0.23423783,"width":0.013464096,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Service-Desk","depth":17,"bounds":{"left":0.08759973,"top":0.2529928,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Service-Desk","depth":20,"bounds":{"left":0.09823803,"top":0.25897846,"width":0.03025266,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Service-Desk","depth":18,"bounds":{"left":0.14577793,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Service-Desk","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Summary","depth":21,"bounds":{"left":0.09158909,"top":0.27853152,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summary","depth":24,"bounds":{"left":0.1022274,"top":0.28451717,"width":0.021276595,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for summary","depth":22,"bounds":{"left":0.15309176,"top":0.28172386,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for summary","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Queues","depth":21,"bounds":{"left":0.09158909,"top":0.30407023,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Queues","depth":24,"bounds":{"left":0.1022274,"top":0.31005585,"width":0.017121011,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Create","depth":22,"bounds":{"left":0.13646941,"top":0.30726257,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More for queues","depth":22,"bounds":{"left":0.14577793,"top":0.30726257,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More for queues","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Team Priority","depth":23,"bounds":{"left":0.095578454,"top":0.32960895,"width":0.059507977,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Team Priority","depth":26,"bounds":{"left":0.10621676,"top":0.33559456,"width":0.029587766,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"All open tickets","depth":25,"bounds":{"left":0.099567816,"top":0.35514766,"width":0.055518616,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All open tickets","depth":28,"bounds":{"left":0.11020612,"top":0.36113328,"width":0.034075797,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star All open tickets","depth":26,"bounds":{"left":0.14577793,"top":0.35834,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"14","depth":28,"bounds":{"left":0.14760639,"top":0.36272946,"width":0.0043218085,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Unassigned tickets","depth":25,"bounds":{"left":0.099567816,"top":0.38068634,"width":0.055518616,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Unassigned tickets","depth":28,"bounds":{"left":0.11020612,"top":0.386672,"width":0.03307846,"height":0.029928172},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star Unassigned tickets","depth":26,"bounds":{"left":0.14577793,"top":0.38387868,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"3","depth":28,"bounds":{"left":0.14860372,"top":0.38826814,"width":0.0023271276,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Support team Queue","depth":25,"bounds":{"left":0.099567816,"top":0.40622506,"width":0.055518616,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Support team Queue","depth":28,"bounds":{"left":0.11020612,"top":0.4122107,"width":0.03025266,"height":0.029928172},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star Support team Queue","depth":26,"bounds":{"left":0.14577793,"top":0.4094174,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"5","depth":28,"bounds":{"left":0.14860372,"top":0.41380686,"width":0.0023271276,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Raised by me","depth":25,"bounds":{"left":0.099567816,"top":0.43176377,"width":0.055518616,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Raised by me","depth":28,"bounds":{"left":0.11020612,"top":0.43774942,"width":0.029753989,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star Raised by me","depth":26,"bounds":{"left":0.14577793,"top":0.4349561,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0","depth":28,"bounds":{"left":0.1484375,"top":0.43934557,"width":0.0026595744,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Assigned to me","depth":25,"bounds":{"left":0.099567816,"top":0.45730248,"width":0.055518616,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Assigned to me","depth":28,"bounds":{"left":0.11020612,"top":0.4632881,"width":0.03174867,"height":0.029928172},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star Assigned to me","depth":26,"bounds":{"left":0.14577793,"top":0.46049482,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":28,"bounds":{"left":0.14893617,"top":0.46488428,"width":0.0016622341,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Service requests","depth":25,"bounds":{"left":0.099567816,"top":0.4828412,"width":0.055518616,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Service requests","depth":28,"bounds":{"left":0.11020612,"top":0.4888268,"width":0.033410903,"height":0.029928172},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star Service requests","depth":26,"bounds":{"left":0.14577793,"top":0.48603353,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"5","depth":28,"bounds":{"left":0.14860372,"top":0.490423,"width":0.0023271276,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Platform team","depth":25,"bounds":{"left":0.099567816,"top":0.5083799,"width":0.055518616,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform team","depth":28,"bounds":{"left":0.11020612,"top":0.5143655,"width":0.031083776,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star Platform team","depth":26,"bounds":{"left":0.14577793,"top":0.51157224,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"3","depth":28,"bounds":{"left":0.14860372,"top":0.5159617,"width":0.0023271276,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Processing team","depth":25,"bounds":{"left":0.099567816,"top":0.5339186,"width":0.055518616,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Processing team","depth":28,"bounds":{"left":0.11020612,"top":0.53990424,"width":0.03307846,"height":0.029928172},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star Processing team","depth":26,"bounds":{"left":0.14577793,"top":0.5371109,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"7","depth":28,"bounds":{"left":0.14860372,"top":0.5415004,"width":0.0023271276,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Site reliability team","depth":25,"bounds":{"left":0.099567816,"top":0.5594573,"width":0.055518616,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Site reliability team","depth":28,"bounds":{"left":0.11020612,"top":0.5654429,"width":0.03274601,"height":0.029928172},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Star Site reliability team","depth":26,"bounds":{"left":0.14577793,"top":0.56264967,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
3812555841577951620
|
-3313204944936573008
|
visual_change
|
accessibility
|
NULL
|
Work item search - Jira
Work item search - Jira
Se Work item search - Jira
Work item search - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Close tab
Usage | Windsurf
Usage | Windsurf
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
[SRD-6848] Sidekick SMS issue - Jira
[SRD-6848] Sidekick SMS issue - Jira
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
Jiminny
Jiminny
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
New Tab
New Tab
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20879] Enable users to use their new activity types - Jira
[JY-20879] Enable users to use their new activity types - Jira
Project Phoenix – Figma
Project Phoenix – Figma
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
Main Content
Main Content
Queue
Queue
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
Notifications
Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
Summary
Summary
More actions for summary
More actions for summary
Queues
Queues
Create
Create
More for queues
More for queues
Team Priority
Team Priority
All open tickets
All open tickets
Star All open tickets
14
Unassigned tickets
Unassigned tickets
Star Unassigned tickets
3
Support team Queue
Support team Queue
Star Support team Queue
5
Raised by me
Raised by me
Star Raised by me
0
Assigned to me
Assigned to me
Star Assigned to me
1
Service requests
Service requests
Star Service requests
5
Platform team
Platform team
Star Platform team
3
Processing team
Processing team
Star Processing team
7
Site reliability team
Site reliability team
Star Site reliability team...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
55532
|
1924
|
25
|
2026-05-18T15:02:42.263283+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779116562263_m1.jpg...
|
Firefox
|
Work item search - Jira — Work
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Work item search - Jira
Work item search - Jira
Cl Work item search - Jira
Work item search - Jira
Close tab
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Usage | Windsurf
Usage | Windsurf
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
[SRD-6848] Sidekick SMS issue - Jira
[SRD-6848] Sidekick SMS issue - Jira
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
Jiminny
Jiminny
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
New Tab
New Tab
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20879] Enable users to use their new activity types - Jira
[JY-20879] Enable users to use their new activity types - Jira
Project Phoenix – Figma
Project Phoenix – Figma
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Resolver
Resolver
Create
Create
Rovo Ask Rovo
Ask Rovo
3 Notifications...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Work item search - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Work item search - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Usage | Windsurf","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Usage | Windsurf","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6848] Sidekick SMS issue - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[SRD-6848] Sidekick SMS issue - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny\\Exceptions\\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny\\Exceptions\\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20771] Call Scoring filter for Exec reports - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20771] Call Scoring filter for Exec reports - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20879] Enable users to use their new activity types - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20879] Enable users to use their new activity types - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Project Phoenix – Figma","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Project Phoenix – Figma","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20847] Users can filter Scores in Team Insights by Host - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20847] Users can filter Scores in Team Insights by Host - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20534] AI Call Scoring quick access in Playback header - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20534] AI Call Scoring quick access in Playback header - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to:","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Top Bar","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Top Bar","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sidebar","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sidebar","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Main Content","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Main Content","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse sidebar [","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse sidebar [","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Switch sites or apps","depth":10,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Switch sites or apps","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to your Jira homepage","depth":9,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Resolver","depth":11,"on_screen":true,"value":"Resolver","help_text":"","placeholder":"Search","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Resolver","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create","depth":10,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Rovo Ask Rovo","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Rovo","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"3 Notifications","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
788613422188789737
|
-4610260500851670120
|
click
|
accessibility
|
NULL
|
Work item search - Jira
Work item search - Jira
Cl Work item search - Jira
Work item search - Jira
Close tab
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Usage | Windsurf
Usage | Windsurf
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
[SRD-6848] Sidekick SMS issue - Jira
[SRD-6848] Sidekick SMS issue - Jira
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
Jiminny
Jiminny
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
New Tab
New Tab
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20879] Enable users to use their new activity types - Jira
[JY-20879] Enable users to use their new activity types - Jira
Project Phoenix – Figma
Project Phoenix – Figma
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Resolver
Resolver
Create
Create
Rovo Ask Rovo
Ask Rovo
3 Notifications...
|
55529
|
NULL
|
NULL
|
NULL
|
|
55533
|
1925
|
22
|
2026-05-18T15:02:42.223709+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779116562223_m2.jpg...
|
Firefox
|
Work item search - Jira — Work
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Work item search - Jira
Work item search - Jira
Cl Work item search - Jira
Work item search - Jira
Close tab
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Usage | Windsurf
Usage | Windsurf
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
[SRD-6848] Sidekick SMS issue - Jira
[SRD-6848] Sidekick SMS issue - Jira
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
Jiminny
Jiminny
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
New Tab
New Tab
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20879] Enable users to use their new activity types - Jira
[JY-20879] Enable users to use their new activity types - Jira
Project Phoenix – Figma
Project Phoenix – Figma
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
New Tab
Customize sidebar
Open Google Gemini (⌃X)...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Work item search - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Work item search - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.040392287,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.05905826,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.10721409,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Usage | Windsurf","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Usage | Windsurf","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.029920213,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.15003991,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.16121309,"width":0.1796875,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.18276137,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.19393456,"width":0.039228722,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6848] Sidekick SMS issue - Jira","depth":4,"bounds":{"left":0.0,"top":0.21548285,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[SRD-6848] Sidekick SMS issue - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.22665602,"width":0.06632314,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.2482043,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"bounds":{"left":0.013297873,"top":0.25937748,"width":0.041223403,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.28092578,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"bounds":{"left":0.013297873,"top":0.29209897,"width":0.041223403,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"bounds":{"left":0.0,"top":0.31364724,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"bounds":{"left":0.013297873,"top":0.32482043,"width":0.013131649,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny\\Exceptions\\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app","depth":4,"bounds":{"left":0.0,"top":0.3463687,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny\\Exceptions\\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app","depth":5,"bounds":{"left":0.013297873,"top":0.3575419,"width":0.2847407,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.3790902,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.39026338,"width":0.1796875,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira","depth":4,"bounds":{"left":0.0,"top":0.41181165,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.42298484,"width":0.2835771,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.4445331,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.013297873,"top":0.4557063,"width":0.014960106,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira","depth":4,"bounds":{"left":0.0,"top":0.4772546,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.4884278,"width":0.15259309,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20771] Call Scoring filter for Exec reports - Jira","depth":4,"bounds":{"left":0.0,"top":0.509976,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20771] Call Scoring filter for Exec reports - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.5211492,"width":0.08909574,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira","depth":4,"bounds":{"left":0.0,"top":0.54269755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.55387074,"width":0.13597074,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20879] Enable users to use their new activity types - Jira","depth":4,"bounds":{"left":0.0,"top":0.575419,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20879] Enable users to use their new activity types - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.5865922,"width":0.106715426,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Project Phoenix – Figma","depth":4,"bounds":{"left":0.0,"top":0.60814047,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Project Phoenix – Figma","depth":5,"bounds":{"left":0.013297873,"top":0.61931366,"width":0.041888297,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20847] Users can filter Scores in Team Insights by Host - Jira","depth":4,"bounds":{"left":0.0,"top":0.6408619,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20847] Users can filter Scores in Team Insights by Host - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.6520351,"width":0.1143617,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20534] AI Call Scoring quick access in Playback header - Jira","depth":4,"bounds":{"left":0.0,"top":0.6735834,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20534] AI Call Scoring quick access in Playback header - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.6847566,"width":0.1143617,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.70790106,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
2390649980773185360
|
-3456776046568221735
|
click
|
accessibility
|
NULL
|
Work item search - Jira
Work item search - Jira
Cl Work item search - Jira
Work item search - Jira
Close tab
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Usage | Windsurf
Usage | Windsurf
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
[SRD-6848] Sidekick SMS issue - Jira
[SRD-6848] Sidekick SMS issue - Jira
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
Jiminny
Jiminny
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
New Tab
New Tab
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20879] Enable users to use their new activity types - Jira
[JY-20879] Enable users to use their new activity types - Jira
Project Phoenix – Figma
Project Phoenix – Figma
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
New Tab
Customize sidebar
Open Google Gemini (⌃X)...
|
55531
|
NULL
|
NULL
|
NULL
|
|
55534
|
1925
|
23
|
2026-05-18T15:02:45.134865+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779116565134_m2.jpg...
|
Firefox
|
Work item search - Jira — Work
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Work item search - Jira
Work item search - Jira
Cl Work item search - Jira
Work item search - Jira
Close tab
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Usage | Windsurf
Usage | Windsurf
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
[SRD-6848] Sidekick SMS issue - Jira
[SRD-6848] Sidekick SMS issue - Jira
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
Jiminny
Jiminny
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
New Tab
New Tab
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20879] Enable users to use their new activity types - Jira
[JY-20879] Enable users to use their new activity types - Jira
Project Phoenix – Figma
Project Phoenix – Figma
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Resolver
Resolver
Create
Create
Rovo Ask Rovo
Ask Rovo
3 Notifications
3 Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Work item search - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Work item search - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.040392287,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.05905826,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.10721409,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Usage | Windsurf","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Usage | Windsurf","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.029920213,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.15003991,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.16121309,"width":0.1796875,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.18276137,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.19393456,"width":0.039228722,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6848] Sidekick SMS issue - Jira","depth":4,"bounds":{"left":0.0,"top":0.21548285,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[SRD-6848] Sidekick SMS issue - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.22665602,"width":0.06632314,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.2482043,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"bounds":{"left":0.013297873,"top":0.25937748,"width":0.041223403,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.28092578,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"bounds":{"left":0.013297873,"top":0.29209897,"width":0.041223403,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"bounds":{"left":0.0,"top":0.31364724,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"bounds":{"left":0.013297873,"top":0.32482043,"width":0.013131649,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny\\Exceptions\\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app","depth":4,"bounds":{"left":0.0,"top":0.3463687,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny\\Exceptions\\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app","depth":5,"bounds":{"left":0.013297873,"top":0.3575419,"width":0.2847407,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.3790902,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.39026338,"width":0.1796875,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira","depth":4,"bounds":{"left":0.0,"top":0.41181165,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.42298484,"width":0.2835771,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.4445331,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.013297873,"top":0.4557063,"width":0.014960106,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira","depth":4,"bounds":{"left":0.0,"top":0.4772546,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.4884278,"width":0.15259309,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20771] Call Scoring filter for Exec reports - Jira","depth":4,"bounds":{"left":0.0,"top":0.509976,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20771] Call Scoring filter for Exec reports - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.5211492,"width":0.08909574,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira","depth":4,"bounds":{"left":0.0,"top":0.54269755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.55387074,"width":0.13597074,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20879] Enable users to use their new activity types - Jira","depth":4,"bounds":{"left":0.0,"top":0.575419,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20879] Enable users to use their new activity types - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.5865922,"width":0.106715426,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Project Phoenix – Figma","depth":4,"bounds":{"left":0.0,"top":0.60814047,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Project Phoenix – Figma","depth":5,"bounds":{"left":0.013297873,"top":0.61931366,"width":0.041888297,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20847] Users can filter Scores in Team Insights by Host - Jira","depth":4,"bounds":{"left":0.0,"top":0.6408619,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20847] Users can filter Scores in Team Insights by Host - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.6520351,"width":0.1143617,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20534] AI Call Scoring quick access in Playback header - Jira","depth":4,"bounds":{"left":0.0,"top":0.6735834,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20534] AI Call Scoring quick access in Playback header - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.6847566,"width":0.1143617,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.70790106,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to:","depth":9,"bounds":{"left":0.090259306,"top":0.07861133,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Top Bar","depth":10,"bounds":{"left":0.090259306,"top":0.097765364,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Top Bar","depth":11,"bounds":{"left":0.090259306,"top":0.097765364,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sidebar","depth":10,"bounds":{"left":0.090259306,"top":0.11691939,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sidebar","depth":11,"bounds":{"left":0.090259306,"top":0.11691939,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Main Content","depth":10,"bounds":{"left":0.090259306,"top":0.13607343,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Main Content","depth":11,"bounds":{"left":0.090259306,"top":0.13607343,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse sidebar [","depth":9,"bounds":{"left":0.08361037,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse sidebar [","depth":11,"bounds":{"left":0.0887633,"top":0.06344773,"width":0.039727394,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Switch sites or apps","depth":10,"bounds":{"left":0.095578454,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Switch sites or apps","depth":12,"bounds":{"left":0.10073138,"top":0.06344773,"width":0.044215426,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to your Jira homepage","depth":9,"bounds":{"left":0.10887633,"top":0.057861134,"width":0.029421542,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Resolver","depth":11,"bounds":{"left":0.40475398,"top":0.06264964,"width":0.24268617,"height":0.015961692},"on_screen":true,"value":"Resolver","help_text":"","placeholder":"Search","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Resolver","depth":12,"bounds":{"left":0.40475398,"top":0.06384677,"width":0.018949468,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create","depth":10,"bounds":{"left":0.65575135,"top":0.057861134,"width":0.030086435,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":12,"bounds":{"left":0.66705453,"top":0.06384677,"width":0.014793883,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Rovo Ask Rovo","depth":12,"bounds":{"left":0.91223407,"top":0.057861134,"width":0.035904255,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Rovo","depth":14,"bounds":{"left":0.92353725,"top":0.06384677,"width":0.020611702,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"3 Notifications","depth":12,"bounds":{"left":0.9494681,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"3 Notifications","depth":14,"bounds":{"left":0.954621,"top":0.06344773,"width":0.031914894,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Help","depth":12,"bounds":{"left":0.96143615,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Help","depth":14,"bounds":{"left":0.9665891,"top":0.06344773,"width":0.010139627,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Settings","depth":12,"bounds":{"left":0.9734042,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Settings","depth":14,"bounds":{"left":0.97855717,"top":0.06344773,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"lukas.kovalik@jiminny.com","depth":12,"bounds":{"left":0.98537236,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas.kovalik@jiminny.com","depth":14,"bounds":{"left":0.99052525,"top":0.06344773,"width":0.009474754,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"For you","depth":12,"bounds":{"left":0.08361037,"top":0.09976058,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"For you","depth":15,"bounds":{"left":0.09424867,"top":0.10574621,"width":0.01662234,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Recent","depth":12,"bounds":{"left":0.08361037,"top":0.12529927,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Recent","depth":15,"bounds":{"left":0.09424867,"top":0.13128492,"width":0.015458777,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Starred","depth":12,"bounds":{"left":0.08361037,"top":0.15083799,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Starred","depth":15,"bounds":{"left":0.09424867,"top":0.15682362,"width":0.016456118,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Apps","depth":12,"bounds":{"left":0.08361037,"top":0.1763767,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Apps","depth":15,"bounds":{"left":0.09424867,"top":0.18236233,"width":0.011635638,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Apps","depth":13,"bounds":{"left":0.15309176,"top":0.17956904,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Apps","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Spaces","depth":12,"bounds":{"left":0.08361037,"top":0.2019154,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Spaces","depth":15,"bounds":{"left":0.09424867,"top":0.20790103,"width":0.016456118,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create space","depth":13,"bounds":{"left":0.13646941,"top":0.20510775,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create space","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for spaces","depth":13,"bounds":{"left":0.14577793,"top":0.20510775,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for spaces","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Recent","depth":16,"bounds":{"left":0.08959442,"top":0.23423783,"width":0.013464096,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny (New)","depth":17,"bounds":{"left":0.08759973,"top":0.2529928,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny (New)","depth":20,"bounds":{"left":0.09823803,"top":0.25897846,"width":0.032081116,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Jiminny (New)","depth":18,"bounds":{"left":0.08892952,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXMenuButton","text":"Create board","depth":18,"bounds":{"left":0.13646941,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create board","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Jiminny (New)","depth":18,"bounds":{"left":0.14577793,"top":0.25618514,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Jiminny (New)","depth":20,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Platform Team","depth":19,"bounds":{"left":0.09158909,"top":0.27853152,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Team","depth":22,"bounds":{"left":0.1022274,"top":0.28451717,"width":0.032247342,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.15309176,"top":0.28172386,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Capture Team","depth":19,"bounds":{"left":0.09158909,"top":0.30407023,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Capture Team","depth":22,"bounds":{"left":0.1022274,"top":0.31005585,"width":0.03125,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.15309176,"top":0.30726257,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-5238780941927282594
|
-3456776011663223911
|
visual_change
|
accessibility
|
NULL
|
Work item search - Jira
Work item search - Jira
Cl Work item search - Jira
Work item search - Jira
Close tab
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Usage | Windsurf
Usage | Windsurf
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
[SRD-6848] Sidekick SMS issue - Jira
[SRD-6848] Sidekick SMS issue - Jira
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
Jiminny
Jiminny
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
New Tab
New Tab
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20879] Enable users to use their new activity types - Jira
[JY-20879] Enable users to use their new activity types - Jira
Project Phoenix – Figma
Project Phoenix – Figma
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Resolver
Resolver
Create
Create
Rovo Ask Rovo
Ask Rovo
3 Notifications
3 Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
55535
|
1924
|
26
|
2026-05-18T15:02:52.219374+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779116572219_m1.jpg...
|
Firefox
|
Work item search - Jira — Work
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Work item search - Jira
Work item search - Jira
Cl Work item search - Jira
Work item search - Jira
Close tab
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Usage | Windsurf
Usage | Windsurf
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
[SRD-6848] Sidekick SMS issue - Jira
[SRD-6848] Sidekick SMS issue - Jira
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
Jiminny
Jiminny
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
New Tab
New Tab
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20879] Enable users to use their new activity types - Jira
[JY-20879] Enable users to use their new activity types - Jira
Project Phoenix – Figma
Project Phoenix – Figma
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Resolver
Resolver
Create
Create
Rovo Ask Rovo
Ask Rovo
3 Notifications
3 Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Work item search - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Work item search - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Usage | Windsurf","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Usage | Windsurf","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6848] Sidekick SMS issue - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[SRD-6848] Sidekick SMS issue - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny\\Exceptions\\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny\\Exceptions\\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20771] Call Scoring filter for Exec reports - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20771] Call Scoring filter for Exec reports - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20879] Enable users to use their new activity types - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20879] Enable users to use their new activity types - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Project Phoenix – Figma","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Project Phoenix – Figma","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20847] Users can filter Scores in Team Insights by Host - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20847] Users can filter Scores in Team Insights by Host - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20534] AI Call Scoring quick access in Playback header - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20534] AI Call Scoring quick access in Playback header - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to:","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Top Bar","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Top Bar","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sidebar","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sidebar","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Main Content","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Main Content","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse sidebar [","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse sidebar [","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Switch sites or apps","depth":10,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Switch sites or apps","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to your Jira homepage","depth":9,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Resolver","depth":11,"on_screen":true,"value":"Resolver","help_text":"","placeholder":"Search","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Resolver","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create","depth":10,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Rovo Ask Rovo","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Rovo","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"3 Notifications","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"3 Notifications","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Help","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Help","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Settings","depth":12,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Settings","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"lukas.kovalik@jiminny.com","depth":12,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas.kovalik@jiminny.com","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"For you","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"For you","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Recent","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Recent","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Starred","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Starred","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Apps","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Apps","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Apps","depth":13,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Apps","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Spaces","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Spaces","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-4091336540122877546
|
-3457338996244819048
|
click
|
accessibility
|
NULL
|
Work item search - Jira
Work item search - Jira
Cl Work item search - Jira
Work item search - Jira
Close tab
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Usage | Windsurf
Usage | Windsurf
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
[SRD-6848] Sidekick SMS issue - Jira
[SRD-6848] Sidekick SMS issue - Jira
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
Jiminny
Jiminny
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
New Tab
New Tab
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20879] Enable users to use their new activity types - Jira
[JY-20879] Enable users to use their new activity types - Jira
Project Phoenix – Figma
Project Phoenix – Figma
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Resolver
Resolver
Create
Create
Rovo Ask Rovo
Ask Rovo
3 Notifications
3 Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
55536
|
1925
|
24
|
2026-05-18T15:02:52.217013+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779116572217_m2.jpg...
|
Firefox
|
Work item search - Jira — Work
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Work item search - Jira
Work item search - Jira
Cl Work item search - Jira
Work item search - Jira
Close tab
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Usage | Windsurf
Usage | Windsurf
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
[SRD-6848] Sidekick SMS issue - Jira
[SRD-6848] Sidekick SMS issue - Jira
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
Jiminny
Jiminny
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
New Tab
New Tab
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20879] Enable users to use their new activity types - Jira
[JY-20879] Enable users to use their new activity types - Jira
Project Phoenix – Figma
Project Phoenix – Figma
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Resolver
Resolver
Create
Create
Rovo Ask Rovo
Ask Rovo
3 Notifications
3 Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Work item search - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Work item search - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.040392287,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.05905826,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.10721409,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Usage | Windsurf","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Usage | Windsurf","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.029920213,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.15003991,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.16121309,"width":0.1796875,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.18276137,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.19393456,"width":0.039228722,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6848] Sidekick SMS issue - Jira","depth":4,"bounds":{"left":0.0,"top":0.21548285,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[SRD-6848] Sidekick SMS issue - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.22665602,"width":0.06632314,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.2482043,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"bounds":{"left":0.013297873,"top":0.25937748,"width":0.041223403,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.28092578,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CloudWatch | us-east-2","depth":5,"bounds":{"left":0.013297873,"top":0.29209897,"width":0.041223403,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"bounds":{"left":0.0,"top":0.31364724,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"bounds":{"left":0.013297873,"top":0.32482043,"width":0.013131649,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny\\Exceptions\\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app","depth":4,"bounds":{"left":0.0,"top":0.3463687,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny\\Exceptions\\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app","depth":5,"bounds":{"left":0.013297873,"top":0.3575419,"width":0.2847407,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.3790902,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.39026338,"width":0.1796875,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira","depth":4,"bounds":{"left":0.0,"top":0.41181165,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.42298484,"width":0.2835771,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.4445331,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.013297873,"top":0.4557063,"width":0.014960106,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira","depth":4,"bounds":{"left":0.0,"top":0.4772546,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.4884278,"width":0.15259309,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20771] Call Scoring filter for Exec reports - Jira","depth":4,"bounds":{"left":0.0,"top":0.509976,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20771] Call Scoring filter for Exec reports - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.5211492,"width":0.08909574,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira","depth":4,"bounds":{"left":0.0,"top":0.54269755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.55387074,"width":0.13597074,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20879] Enable users to use their new activity types - Jira","depth":4,"bounds":{"left":0.0,"top":0.575419,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20879] Enable users to use their new activity types - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.5865922,"width":0.106715426,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Project Phoenix – Figma","depth":4,"bounds":{"left":0.0,"top":0.60814047,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Project Phoenix – Figma","depth":5,"bounds":{"left":0.013297873,"top":0.61931366,"width":0.041888297,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20847] Users can filter Scores in Team Insights by Host - Jira","depth":4,"bounds":{"left":0.0,"top":0.6408619,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20847] Users can filter Scores in Team Insights by Host - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.6520351,"width":0.1143617,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20534] AI Call Scoring quick access in Playback header - Jira","depth":4,"bounds":{"left":0.0,"top":0.6735834,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20534] AI Call Scoring quick access in Playback header - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.6847566,"width":0.1143617,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.70790106,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to:","depth":9,"bounds":{"left":0.090259306,"top":0.07861133,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Top Bar","depth":10,"bounds":{"left":0.090259306,"top":0.097765364,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Top Bar","depth":11,"bounds":{"left":0.090259306,"top":0.097765364,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sidebar","depth":10,"bounds":{"left":0.090259306,"top":0.11691939,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sidebar","depth":11,"bounds":{"left":0.090259306,"top":0.11691939,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Main Content","depth":10,"bounds":{"left":0.090259306,"top":0.13607343,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Main Content","depth":11,"bounds":{"left":0.090259306,"top":0.13607343,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse sidebar [","depth":9,"bounds":{"left":0.08361037,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse sidebar [","depth":11,"bounds":{"left":0.0887633,"top":0.06344773,"width":0.039727394,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Switch sites or apps","depth":10,"bounds":{"left":0.095578454,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Switch sites or apps","depth":12,"bounds":{"left":0.10073138,"top":0.06344773,"width":0.044215426,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to your Jira homepage","depth":9,"bounds":{"left":0.10887633,"top":0.057861134,"width":0.029421542,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Resolver","depth":11,"bounds":{"left":0.40475398,"top":0.06264964,"width":0.24268617,"height":0.015961692},"on_screen":true,"value":"Resolver","help_text":"","placeholder":"Search","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Resolver","depth":12,"bounds":{"left":0.40475398,"top":0.06384677,"width":0.018949468,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create","depth":10,"bounds":{"left":0.65575135,"top":0.057861134,"width":0.030086435,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":12,"bounds":{"left":0.66705453,"top":0.06384677,"width":0.014793883,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Rovo Ask Rovo","depth":12,"bounds":{"left":0.91223407,"top":0.057861134,"width":0.035904255,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Rovo","depth":14,"bounds":{"left":0.92353725,"top":0.06384677,"width":0.020611702,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"3 Notifications","depth":12,"bounds":{"left":0.9494681,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"3 Notifications","depth":14,"bounds":{"left":0.954621,"top":0.06344773,"width":0.031914894,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Help","depth":12,"bounds":{"left":0.96143615,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Help","depth":14,"bounds":{"left":0.9665891,"top":0.06344773,"width":0.010139627,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Settings","depth":12,"bounds":{"left":0.9734042,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Settings","depth":14,"bounds":{"left":0.97855717,"top":0.06344773,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"lukas.kovalik@jiminny.com","depth":12,"bounds":{"left":0.98537236,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas.kovalik@jiminny.com","depth":14,"bounds":{"left":0.99052525,"top":0.06344773,"width":0.009474754,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"For you","depth":12,"bounds":{"left":0.08361037,"top":0.09976058,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"For you","depth":15,"bounds":{"left":0.09424867,"top":0.10574621,"width":0.01662234,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Recent","depth":12,"bounds":{"left":0.08361037,"top":0.12529927,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Recent","depth":15,"bounds":{"left":0.09424867,"top":0.13128492,"width":0.015458777,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Starred","depth":12,"bounds":{"left":0.08361037,"top":0.15083799,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Starred","depth":15,"bounds":{"left":0.09424867,"top":0.15682362,"width":0.016456118,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Apps","depth":12,"bounds":{"left":0.08361037,"top":0.1763767,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Apps","depth":15,"bounds":{"left":0.09424867,"top":0.18236233,"width":0.011635638,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Apps","depth":13,"bounds":{"left":0.15309176,"top":0.17956904,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-2064992841260400395
|
-3457338996244819048
|
click
|
accessibility
|
NULL
|
Work item search - Jira
Work item search - Jira
Cl Work item search - Jira
Work item search - Jira
Close tab
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Usage | Windsurf
Usage | Windsurf
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
[SRD-6848] Sidekick SMS issue - Jira
[SRD-6848] Sidekick SMS issue - Jira
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
CloudWatch | us-east-2
Jiminny
Jiminny
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Jiminny\Exceptions\SocialAccountTokenInvalidException: Your Salesforce account has become disconnected. Please login to Jiminny to reconnect. — jiminny — app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
[SRD-6862] ‘User does not have any of the necessary access rights’ when trying to see another team’s performance scored with the AI ACS in team insights. - Jira
New Tab
New Tab
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20912] Fallback mechanism for users with active SF tokens for CRM Matching - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20771] Call Scoring filter for Exec reports - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20878] SCIM > Allow customers to manage user roles through SCIM - Jira
[JY-20879] Enable users to use their new activity types - Jira
[JY-20879] Enable users to use their new activity types - Jira
Project Phoenix – Figma
Project Phoenix – Figma
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20847] Users can filter Scores in Team Insights by Host - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
[JY-20534] AI Call Scoring quick access in Playback header - Jira
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Resolver
Resolver
Create
Create
Rovo Ask Rovo
Ask Rovo
3 Notifications
3 Notifications
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps...
|
55534
|
NULL
|
NULL
|
NULL
|
|
55554
|
1924
|
36
|
2026-05-18T15:03:14.112657+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779116594112_m1.jpg...
|
Firefox
|
DXP4800PLUS-B5F8 — Personal
|
1
|
nas.lakylak.xyz/desktop/#/
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Close tab
Gettin DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Close tab
Getting Started · AFFiNE
Getting Started · AFFiNE
Screenpipe — Archive
Screenpipe — Archive
Download screenpipe — get started in minutes
Download screenpipe — get started in minutes
Self-Hosted Software and Apps
Self-Hosted Software and Apps
Finance Hub
Finance Hub
New Tab
New Tab
As I get older, now 79, I am viewing, seeing or realizing more and more disturbing things that are finally hitting home more profoundly and affecti... - [EMAIL] - Gmail
As I get older, now 79, I am viewing, seeing or realizing more and more disturbing things that are finally hitting home more profoundly and affecti... - [EMAIL] - Gmail
Nvidia's GTX Titan is still the most important GPU ever made - [EMAIL] - Gmail
Nvidia's GTX Titan is still the most important GPU ever made - [EMAIL] - Gmail
Завеждане на щета онлайн | Euroins
Завеждане на щета онлайн | Euroins
Photos - Google Photos
Photos - Google Photos
Kontakt | Veľvyslanectvo Slovenskej republiky v Sofii
Kontakt | Veľvyslanectvo Slovenskej republiky v Sofii
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
1.2
KB/s
264
B/s
Files
Control Panel
Storage
App Center
Logs
Support
Task Manager
Music
Cloud Drives
Theater
Photos
Online Office
TextEdit
Virtual Machine
Downloads
DLNA
File Version Explorer
Security
Jellyfin-HT
SAN Manager
Vault
Snapshot
Comics
Sync & Backup
UGREEN AI
Recycle Bin
Search
All
System Management
Utility
Entertainment
Download
Security
Backup
Installed
12
Security
Security Utility
Open
Developer
UGREEN
Publisher
UGREEN
Downloads
230,281
Size
243.2 MB
Installation Location
Volume 2
Current Version
1.15.0.0010
Description
Security Manager uses Clamav virus scan engine to kill the viruses of system files or user files in the device. You can schedule regularly file scans on the device, and enable "real-time protection" to monitor new or edited files on the device in real time.
Latest Version
1.15.0.0010
Updated On 2026-04-30
Fixed some known issues to improve user experience.
Other Information
Report
Security
Overview
Scheduled Scan
Scan Records
...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Getting Started · AFFiNE","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Getting Started · AFFiNE","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Download screenpipe — get started in minutes","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Download screenpipe — get started in minutes","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Self-Hosted Software and Apps","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Self-Hosted Software and Apps","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Finance Hub","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Finance Hub","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"As I get older, now 79, I am viewing, seeing or realizing more and more disturbing things that are finally hitting home more profoundly and affecti... - kovaliklukas@gmail.com - Gmail","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"As I get older, now 79, I am viewing, seeing or realizing more and more disturbing things that are finally hitting home more profoundly and affecti... - kovaliklukas@gmail.com - Gmail","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Nvidia's GTX Titan is still the most important GPU ever made - kovaliklukas@gmail.com - Gmail","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Nvidia's GTX Titan is still the most important GPU ever made - kovaliklukas@gmail.com - Gmail","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Завеждане на щета онлайн | Euroins","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Завеждане на щета онлайн | Euroins","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Photos - Google Photos","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Photos - Google Photos","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Kontakt | Veľvyslanectvo Slovenskej republiky v Sofii","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Kontakt | Veľvyslanectvo Slovenskej republiky v Sofii","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.48576388,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.5086806,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.53194445,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.5552083,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.5784722,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1.2","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KB/s","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"264","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"B/s","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Files","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Control Panel","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Storage","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"App Center","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Logs","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Support","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Task Manager","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Music","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Cloud Drives","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Theater","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Photos","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online Office","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"TextEdit","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Virtual Machine","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Downloads","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DLNA","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"File Version Explorer","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Security","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jellyfin-HT","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SAN Manager","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Vault","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Snapshot","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Comics","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Sync & Backup","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UGREEN AI","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Recycle Bin","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search","depth":20,"on_screen":true,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"All","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"System Management","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Utility","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Entertainment","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Download","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Security","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Backup","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Installed","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Security","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Security Utility","depth":22,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open","depth":21,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":25,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Developer","depth":22,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UGREEN","depth":22,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Publisher","depth":22,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UGREEN","depth":22,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Downloads","depth":22,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"230,281","depth":22,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Size","depth":22,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"243.2 MB","depth":22,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Installation Location","depth":22,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Volume 2","depth":22,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Current Version","depth":22,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1.15.0.0010","depth":22,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Description","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Security Manager uses Clamav virus scan engine to kill the viruses of system files or user files in the device. You can schedule regularly file scans on the device, and enable \"real-time protection\" to monitor new or edited files on the device in real time.","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Latest Version","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1.15.0.0010","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Updated On 2026-04-30","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fixed some known issues to improve user experience.","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Other Information","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Report","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Security","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Overview","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Scheduled Scan","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Scan Records","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
1512440597278469775
|
-6473031447942575579
|
visual_change
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Close tab
Gettin DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Close tab
Getting Started · AFFiNE
Getting Started · AFFiNE
Screenpipe — Archive
Screenpipe — Archive
Download screenpipe — get started in minutes
Download screenpipe — get started in minutes
Self-Hosted Software and Apps
Self-Hosted Software and Apps
Finance Hub
Finance Hub
New Tab
New Tab
As I get older, now 79, I am viewing, seeing or realizing more and more disturbing things that are finally hitting home more profoundly and affecti... - [EMAIL] - Gmail
As I get older, now 79, I am viewing, seeing or realizing more and more disturbing things that are finally hitting home more profoundly and affecti... - [EMAIL] - Gmail
Nvidia's GTX Titan is still the most important GPU ever made - [EMAIL] - Gmail
Nvidia's GTX Titan is still the most important GPU ever made - [EMAIL] - Gmail
Завеждане на щета онлайн | Euroins
Завеждане на щета онлайн | Euroins
Photos - Google Photos
Photos - Google Photos
Kontakt | Veľvyslanectvo Slovenskej republiky v Sofii
Kontakt | Veľvyslanectvo Slovenskej republiky v Sofii
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
1.2
KB/s
264
B/s
Files
Control Panel
Storage
App Center
Logs
Support
Task Manager
Music
Cloud Drives
Theater
Photos
Online Office
TextEdit
Virtual Machine
Downloads
DLNA
File Version Explorer
Security
Jellyfin-HT
SAN Manager
Vault
Snapshot
Comics
Sync & Backup
UGREEN AI
Recycle Bin
Search
All
System Management
Utility
Entertainment
Download
Security
Backup
Installed
12
Security
Security Utility
Open
Developer
UGREEN
Publisher
UGREEN
Downloads
230,281
Size
243.2 MB
Installation Location
Volume 2
Current Version
1.15.0.0010
Description
Security Manager uses Clamav virus scan engine to kill the viruses of system files or user files in the device. You can schedule regularly file scans on the device, and enable "real-time protection" to monitor new or edited files on the device in real time.
Latest Version
1.15.0.0010
Updated On 2026-04-30
Fixed some known issues to improve user experience.
Other Information
Report
Security
Overview
Scheduled Scan
Scan Records
...
|
55553
|
NULL
|
NULL
|
NULL
|
|
55555
|
1925
|
33
|
2026-05-18T15:03:14.558778+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-18/1779 /Users/lukas/.screenpipe/data/data/2026-05-18/1779116594558_m2.jpg...
|
Firefox
|
DXP4800PLUS-B5F8 — Personal
|
1
|
nas.lakylak.xyz/desktop/#/
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Close tab
Gettin DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Close tab
Getting Started · AFFiNE
Getting Started · AFFiNE
Screenpipe — Archive
Screenpipe — Archive
Download screenpipe — get started in minutes
Download screenpipe — get started in minutes
Self-Hosted Software and Apps
Self-Hosted Software and Apps
Finance Hub
Finance Hub
New Tab
New Tab
As I get older, now 79, I am viewing, seeing or realizing more and more disturbing things that are finally hitting home more profoundly and affecti... - [EMAIL] - Gmail
As I get older, now 79, I am viewing, seeing or realizing more and more disturbing things that are finally hitting home more profoundly and affecti... - [EMAIL] - Gmail
Nvidia's GTX Titan is still the most important GPU ever made - [EMAIL] - Gmail
Nvidia's GTX Titan is still the most important GPU ever made - [EMAIL] - Gmail
Завеждане на щета онлайн | Euroins
Завеждане на щета онлайн | Euroins
Photos - Google Photos
Photos - Google Photos
Kontakt | Veľvyslanectvo Slovenskej republiky v Sofii
Kontakt | Veľvyslanectvo Slovenskej republiky v Sofii
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
1.2
KB/s
264
B/s
Files
Control Panel
Storage
App Center
Logs
Support
Task Manager
Music
Cloud Drives
Theater
Photos
Online Office
TextEdit
Virtual Machine
Downloads
DLNA
File Version Explorer
Security
Jellyfin-HT
SAN Manager
Vault
Snapshot
Comics
Sync & Backup
UGREEN AI
Recycle Bin
Search
All
System Management
Utility
Entertainment
Download
Security
Backup
Installed
12
Security
Security Utility
Open
Developer
UGREEN
Publisher
UGREEN
Downloads
230,281
Size
243.2 MB
Installation Location
Volume 2
Current Version
1.15.0.0010
Description
Security Manager uses Clamav virus scan engine to kill the viruses of system files or user files in the device. You can schedule regularly file scans on the device, and enable "real-time protection" to monitor new or edited files on the device in real time.
Latest Version
1.15.0.0010
Updated On 2026-04-30
Fixed some known issues to improve user experience.
Other Information
Report
Security
Overview
Scheduled Scan
Scan Records
Log
Settings
Real-time Protection
337
Days
Protecting System
Full Scan
Custom Scan
Quarantine
Time since last scan
0
Day...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.5,"top":0.0518755,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"bounds":{"left":0.51329786,"top":0.06304868,"width":0.036901597,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.55651593,"top":0.05905826,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Getting Started · AFFiNE","depth":4,"bounds":{"left":0.5,"top":0.08459697,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Getting Started · AFFiNE","depth":5,"bounds":{"left":0.51329786,"top":0.09577015,"width":0.04255319,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"bounds":{"left":0.5,"top":0.11731844,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"bounds":{"left":0.51329786,"top":0.12849163,"width":0.037898935,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Download screenpipe — get started in minutes","depth":4,"bounds":{"left":0.5,"top":0.15003991,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Download screenpipe — get started in minutes","depth":5,"bounds":{"left":0.51329786,"top":0.16121309,"width":0.0809508,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Self-Hosted Software and Apps","depth":4,"bounds":{"left":0.5,"top":0.18276137,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Self-Hosted Software and Apps","depth":5,"bounds":{"left":0.51329786,"top":0.19393456,"width":0.054853722,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Finance Hub","depth":4,"bounds":{"left":0.5,"top":0.21548285,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Finance Hub","depth":5,"bounds":{"left":0.51329786,"top":0.22665602,"width":0.021609042,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.5,"top":0.2482043,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.51329786,"top":0.25937748,"width":0.014960106,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"As I get older, now 79, I am viewing, seeing or realizing more and more disturbing things that are finally hitting home more profoundly and affecti... - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.5,"top":0.28092578,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"As I get older, now 79, I am viewing, seeing or realizing more and more disturbing things that are finally hitting home more profoundly and affecti... - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.51329786,"top":0.29209897,"width":0.31382978,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Nvidia's GTX Titan is still the most important GPU ever made - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.5,"top":0.31364724,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Nvidia's GTX Titan is still the most important GPU ever made - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.51329786,"top":0.32482043,"width":0.16522606,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Завеждане на щета онлайн | Euroins","depth":4,"bounds":{"left":0.5,"top":0.3463687,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Завеждане на щета онлайн | Euroins","depth":5,"bounds":{"left":0.51329786,"top":0.3575419,"width":0.0653258,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Photos - Google Photos","depth":4,"bounds":{"left":0.5,"top":0.3790902,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Photos - Google Photos","depth":5,"bounds":{"left":0.51329786,"top":0.39026338,"width":0.04138963,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Kontakt | Veľvyslanectvo Slovenskej republiky v Sofii","depth":4,"bounds":{"left":0.5,"top":0.41181165,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Kontakt | Veľvyslanectvo Slovenskej republiky v Sofii","depth":5,"bounds":{"left":0.51329786,"top":0.42298484,"width":0.091090426,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.5028258,"top":0.4461293,"width":0.06333112,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.5028258,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.51379657,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.5249335,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.53607047,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.5472075,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":18,"bounds":{"left":0.97706115,"top":0.06304868,"width":0.0066489363,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1.2","depth":16,"bounds":{"left":0.92669547,"top":0.06264964,"width":0.0051529254,"height":0.008379889},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KB/s","depth":16,"bounds":{"left":0.9318484,"top":0.06304868,"width":0.005984043,"height":0.0075818035},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"264","depth":16,"bounds":{"left":0.92669547,"top":0.07222666,"width":0.005984043,"height":0.008379889},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"B/s","depth":16,"bounds":{"left":0.93267953,"top":0.0726257,"width":0.0039893617,"height":0.0075818035},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Files","depth":13,"bounds":{"left":0.59175533,"top":0.1707901,"width":0.009973404,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Control Panel","depth":13,"bounds":{"left":0.58261305,"top":0.2697526,"width":0.02825798,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Storage","depth":13,"bounds":{"left":0.58859706,"top":0.36871508,"width":0.016289894,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"App Center","depth":13,"bounds":{"left":0.58494014,"top":0.46767756,"width":0.023603724,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Logs","depth":13,"bounds":{"left":0.59175533,"top":0.5666401,"width":0.009973404,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Support","depth":13,"bounds":{"left":0.58859706,"top":0.66560256,"width":0.016289894,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Task Manager","depth":13,"bounds":{"left":0.58211434,"top":0.76456505,"width":0.02925532,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Music","depth":13,"bounds":{"left":0.5905917,"top":0.86352754,"width":0.012300532,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Cloud Drives","depth":13,"bounds":{"left":0.6313165,"top":0.1707901,"width":0.026595745,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Theater","depth":13,"bounds":{"left":0.63663566,"top":0.2697526,"width":0.015957447,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Photos","depth":13,"bounds":{"left":0.63730055,"top":0.36871508,"width":0.01462766,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online Office","depth":13,"bounds":{"left":0.63115025,"top":0.46767756,"width":0.026928192,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"TextEdit","depth":13,"bounds":{"left":0.6363032,"top":0.5666401,"width":0.01662234,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Virtual Machine","depth":13,"bounds":{"left":0.6286569,"top":0.66560256,"width":0.031914894,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Downloads","depth":13,"bounds":{"left":0.633145,"top":0.76456505,"width":0.022938829,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DLNA","depth":13,"bounds":{"left":0.6384641,"top":0.86352754,"width":0.012300532,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"File Version Explorer","depth":13,"bounds":{"left":0.6710439,"top":0.1707901,"width":0.04288564,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Security","depth":13,"bounds":{"left":0.6840093,"top":0.2697526,"width":0.016954787,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jellyfin-HT","depth":13,"bounds":{"left":0.68151593,"top":0.36871508,"width":0.021941489,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SAN Manager","depth":13,"bounds":{"left":0.67785907,"top":0.46767756,"width":0.02925532,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Vault","depth":13,"bounds":{"left":0.68733376,"top":0.5666401,"width":0.010305851,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Snapshot","depth":13,"bounds":{"left":0.68267953,"top":0.66560256,"width":0.019614361,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Comics","depth":13,"bounds":{"left":0.6846742,"top":0.76456505,"width":0.015625,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Sync & Backup","depth":13,"bounds":{"left":0.67669547,"top":0.86352754,"width":0.03158245,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UGREEN AI","depth":13,"bounds":{"left":0.72755986,"top":0.1707901,"width":0.025598405,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Recycle Bin","depth":13,"bounds":{"left":0.7280585,"top":0.2697526,"width":0.024601065,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":20,"bounds":{"left":0.70794547,"top":0.1963288,"width":0.0066489363,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":21,"bounds":{"left":0.6427859,"top":0.24022347,"width":0.004654255,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search","depth":20,"bounds":{"left":0.65009975,"top":0.2330407,"width":0.043218084,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":20,"bounds":{"left":0.6414561,"top":0.27613726,"width":0.0066489363,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"All","depth":20,"bounds":{"left":0.65076464,"top":0.27773345,"width":0.005984043,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"System Management","depth":19,"bounds":{"left":0.65076464,"top":0.30965683,"width":0.027094414,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Utility","depth":19,"bounds":{"left":0.65076464,"top":0.3575419,"width":0.011303191,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Entertainment","depth":19,"bounds":{"left":0.65076464,"top":0.38946527,"width":0.028922873,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Download","depth":19,"bounds":{"left":0.65076464,"top":0.42138866,"width":0.020777926,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Security","depth":19,"bounds":{"left":0.65076464,"top":0.45331204,"width":0.016788565,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Backup","depth":19,"bounds":{"left":0.65076464,"top":0.48523542,"width":0.015458777,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":20,"bounds":{"left":0.6414561,"top":0.51556265,"width":0.0066489363,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Installed","depth":20,"bounds":{"left":0.65076464,"top":0.5171588,"width":0.017287234,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12","depth":20,"bounds":{"left":0.6868351,"top":0.5171588,"width":0.0051529254,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":21,"bounds":{"left":0.642121,"top":0.7964884,"width":0.0066489363,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":21,"bounds":{"left":0.68733376,"top":0.7964884,"width":0.0066489363,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Security","depth":24,"bounds":{"left":0.7478391,"top":0.2482043,"width":0.020944148,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Security Utility","depth":22,"bounds":{"left":0.7478391,"top":0.2669593,"width":0.028091755,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open","depth":21,"bounds":{"left":0.876496,"top":0.25139666,"width":0.024933511,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":25,"bounds":{"left":0.91007316,"top":0.25778133,"width":0.005319149,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":21,"bounds":{"left":0.7006317,"top":0.34317636,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Developer","depth":22,"bounds":{"left":0.71875,"top":0.33918595,"width":0.018284574,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UGREEN","depth":22,"bounds":{"left":0.7179189,"top":0.3575419,"width":0.019946808,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Publisher","depth":22,"bounds":{"left":0.7569814,"top":0.33918595,"width":0.01662234,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UGREEN","depth":22,"bounds":{"left":0.7553192,"top":0.3575419,"width":0.019946808,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Downloads","depth":22,"bounds":{"left":0.7927194,"top":0.33918595,"width":0.019614361,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"230,281","depth":22,"bounds":{"left":0.7940492,"top":0.3575419,"width":0.016954787,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Size","depth":22,"bounds":{"left":0.8359375,"top":0.33918595,"width":0.0076462766,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"243.2 MB","depth":22,"bounds":{"left":0.82978725,"top":0.3575419,"width":0.019946808,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Installation Location","depth":22,"bounds":{"left":0.86120343,"top":0.33918595,"width":0.03523936,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Volume 2","depth":22,"bounds":{"left":0.86735374,"top":0.3575419,"width":0.019281914,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Current Version","depth":22,"bounds":{"left":0.90043217,"top":0.33918595,"width":0.027593086,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1.15.0.0010","depth":22,"bounds":{"left":0.9019282,"top":0.3575419,"width":0.024601065,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":21,"bounds":{"left":0.923371,"top":0.34317636,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":21,"bounds":{"left":0.6989694,"top":0.45730248,"width":0.009973404,"height":0.02434158},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":21,"bounds":{"left":0.9243683,"top":0.45730248,"width":0.009973404,"height":0.02434158},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Description","depth":19,"bounds":{"left":0.70927525,"top":0.5686353,"width":0.02925532,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Security Manager uses Clamav virus scan engine to kill the viruses of system files or user files in the device. You can schedule regularly file scans on the device, and enable \"real-time protection\" to monitor new or edited files on the device in real time.","depth":20,"bounds":{"left":0.70927525,"top":0.59736633,"width":0.21176861,"height":0.04309657},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Latest Version","depth":20,"bounds":{"left":0.70927525,"top":0.6755786,"width":0.036402926,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":20,"bounds":{"left":0.70927525,"top":0.7019154,"width":0.004654255,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1.15.0.0010","depth":20,"bounds":{"left":0.7159242,"top":0.70231444,"width":0.021110373,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":20,"bounds":{"left":0.7436835,"top":0.7019154,"width":0.004654255,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Updated On 2026-04-30","depth":20,"bounds":{"left":0.7503325,"top":0.70231444,"width":0.04288564,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fixed some known issues to improve user experience.","depth":20,"bounds":{"left":0.70927525,"top":0.7246608,"width":0.09591091,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Other Information","depth":19,"bounds":{"left":0.70927525,"top":0.773344,"width":0.04488032,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Report","depth":21,"bounds":{"left":0.70927525,"top":0.802075,"width":0.011968086,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":13,"bounds":{"left":0.9340093,"top":0.22665602,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.9353391,"top":0.22984837,"width":0.005319149,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Security","depth":18,"bounds":{"left":0.79388297,"top":0.23064645,"width":0.015625,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":21,"bounds":{"left":0.65608376,"top":0.26177174,"width":0.005319149,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Overview","depth":21,"bounds":{"left":0.6640625,"top":0.26177174,"width":0.019448139,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":21,"bounds":{"left":0.65608376,"top":0.2952913,"width":0.005319149,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Scheduled Scan","depth":21,"bounds":{"left":0.6640625,"top":0.2952913,"width":0.033909574,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":21,"bounds":{"left":0.65608376,"top":0.32881084,"width":0.005319149,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Scan Records","depth":21,"bounds":{"left":0.6640625,"top":0.32881084,"width":0.02925532,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":21,"bounds":{"left":0.65608376,"top":0.3623304,"width":0.005319149,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Log","depth":21,"bounds":{"left":0.6640625,"top":0.3623304,"width":0.0078125,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":21,"bounds":{"left":0.65608376,"top":0.39584997,"width":0.005319149,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Settings","depth":21,"bounds":{"left":0.6640625,"top":0.39584997,"width":0.016788565,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":21,"bounds":{"left":0.7229056,"top":0.26895452,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Real-time Protection","depth":21,"bounds":{"left":0.7335439,"top":0.27134877,"width":0.048204787,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"337","depth":21,"bounds":{"left":0.7556516,"top":0.349162,"width":0.03324468,"height":0.05387071},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Days","depth":21,"bounds":{"left":0.79022604,"top":0.3782921,"width":0.014295213,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Protecting System","depth":21,"bounds":{"left":0.76113695,"top":0.41739824,"width":0.037732713,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.72922206,"top":0.79090184,"width":0.0066489363,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Full Scan","depth":21,"bounds":{"left":0.7229056,"top":0.81165206,"width":0.019448139,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.7749335,"top":0.79090184,"width":0.0066489363,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Custom Scan","depth":21,"bounds":{"left":0.7642952,"top":0.81165206,"width":0.027925532,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.8224734,"top":0.79090184,"width":0.0066489363,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Quarantine","depth":21,"bounds":{"left":0.81416225,"top":0.81165206,"width":0.023105053,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Time since last scan","depth":20,"bounds":{"left":0.8572141,"top":0.2753392,"width":0.041888297,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":20,"bounds":{"left":0.8572141,"top":0.3028731,"width":0.005817819,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Day","depth":20,"bounds":{"left":0.8643617,"top":0.31564245,"width":0.009640957,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
6176421737689693192
|
-6475283230576390643
|
visual_change
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Close tab
Gettin DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Close tab
Getting Started · AFFiNE
Getting Started · AFFiNE
Screenpipe — Archive
Screenpipe — Archive
Download screenpipe — get started in minutes
Download screenpipe — get started in minutes
Self-Hosted Software and Apps
Self-Hosted Software and Apps
Finance Hub
Finance Hub
New Tab
New Tab
As I get older, now 79, I am viewing, seeing or realizing more and more disturbing things that are finally hitting home more profoundly and affecti... - [EMAIL] - Gmail
As I get older, now 79, I am viewing, seeing or realizing more and more disturbing things that are finally hitting home more profoundly and affecti... - [EMAIL] - Gmail
Nvidia's GTX Titan is still the most important GPU ever made - [EMAIL] - Gmail
Nvidia's GTX Titan is still the most important GPU ever made - [EMAIL] - Gmail
Завеждане на щета онлайн | Euroins
Завеждане на щета онлайн | Euroins
Photos - Google Photos
Photos - Google Photos
Kontakt | Veľvyslanectvo Slovenskej republiky v Sofii
Kontakt | Veľvyslanectvo Slovenskej republiky v Sofii
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
1.2
KB/s
264
B/s
Files
Control Panel
Storage
App Center
Logs
Support
Task Manager
Music
Cloud Drives
Theater
Photos
Online Office
TextEdit
Virtual Machine
Downloads
DLNA
File Version Explorer
Security
Jellyfin-HT
SAN Manager
Vault
Snapshot
Comics
Sync & Backup
UGREEN AI
Recycle Bin
Search
All
System Management
Utility
Entertainment
Download
Security
Backup
Installed
12
Security
Security Utility
Open
Developer
UGREEN
Publisher
UGREEN
Downloads
230,281
Size
243.2 MB
Installation Location
Volume 2
Current Version
1.15.0.0010
Description
Security Manager uses Clamav virus scan engine to kill the viruses of system files or user files in the device. You can schedule regularly file scans on the device, and enable "real-time protection" to monitor new or edited files on the device in real time.
Latest Version
1.15.0.0010
Updated On 2026-04-30
Fixed some known issues to improve user experience.
Other Information
Report
Security
Overview
Scheduled Scan
Scan Records
Log
Settings
Real-time Protection
337
Days
Protecting System
Full Scan
Custom Scan
Quarantine
Time since last scan
0
Day...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
55621
|
1928
|
0
|
2026-05-19T06:30:35.529379+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-19/1779 /Users/lukas/.screenpipe/data/data/2026-05-19/1779172235529_m1.jpg...
|
Firefox
|
Location Logger — Personal
|
1
|
location-tracker.lakylak.xyz/dashboard
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Back
Personal
Personal
Edit profile
Other profiles Back
Personal
Personal
Edit profile
Other profiles
Other profiles
Work
New profile
Copy this profile
Manage profiles
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Getting Started · AFFiNE
Getting Started · AFFiNE
Screenpipe — Archive
Screenpipe — Archive
Download screenpipe — get started in minutes
Download screenpipe — get started in minutes
Self-Hosted Software and Apps
Self-Hosted Software and Apps
New Tab
New Tab
[LakyLak] A security advisory on axios affects at least one of your repositories - [EMAIL] - Gmail
[LakyLak] A security advisory on axios affects at least one of your repositories - [EMAIL] - Gmail
Завеждане на щета онлайн | Euroins
Завеждане на щета онлайн | Euroins
Photos - Google Photos
Photos - Google Photos
Kontakt | Veľvyslanectvo Slovenskej republiky v Sofii
Kontakt | Veľvyslanectvo Slovenskej republiky v Sofii
Settings
Settings
Nginx Proxy Manager
Nginx Proxy Manager
Location Logger
Location Logger
Close tab
Providers - Admin - authentik
Providers - Admin - authentik
Recent love experiences - Claude
Recent love experiences - Claude
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Location Logger
Location Logger
Logout
←
Yesterday
→
Today
Yesterday
7d
30d
From
19
/
04
/
2026
,
00
:
00
Calendar
To
21
/
04
/
2026
,
00
:
00
Calendar
Movement
Load
Zoom in
Zoom out
Leaflet
Leaflet
©
OSM
OSM
POINTS
8972
1768 shown
DISTANCE
147.8 km
raw: 197.6 km
TOP MODE
driving
QUALITY
97%
Stationary
Walking
Running
Cycling
Driving
Fast
Showing
1768
of 8972 points (7204 redundant points hidden)
LOCATIONS
AREAS
ADMIN
23:36:58
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
23:36:46
STATIONARY
20 Apr
42.66343, 23.28083 · 0.0m
23:26:25
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
23:20:31
STATIONARY
20 Apr
42.66350, 23.28066 · 8.1m
23:16:16
STATIONARY
20 Apr
42.66343, 23.28084 · 8.1m
23:14:38
STATIONARY
20 Apr
42.66350, 23.28066 · 8.1m
23:09:34
WALKING
20 Apr
42.66343, 23.28084 · 7.7m
23:08:39
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
22:56:41
STATIONARY
20 Apr
42.66347, 23.28062 · 4.1m
22:50:41
WALKING
20 Apr
42.66350, 23.28075 · 1.4m
22:45:36
STATIONARY
20 Apr
42.66347, 23.28066 · 3.1m
22:44:41
STATIONARY
20 Apr
42.66338, 23.28065 · 5.2m
22:39:28
WALKING
20 Apr
42.66342, 23.28053 · 5.2m
22:38:41
STATIONARY
20 Apr
42.66348, 23.28062 · 6.5m
22:34:01
STATIONARY
20 Apr
42.66341, 23.28052 · 13.1m
22:28:34
WALKING
20 Apr
42.66337, 23.28073 · 4.2m
22:28:17
RUNNING
20 Apr
42.66341, 23.28061 · 9.6m
22:24:32
STATIONARY
20 Apr
42.66343, 23.28084 · 2.7m
22:22:53
STATIONARY
20 Apr
42.66350, 23.28066 · 2.7m
22:19:15
STATIONARY
20 Apr
42.66343, 23.28084 · 8.2m
22:17:39
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
22:11:19
STATIONARY
20 Apr
42.66350, 23.28066 · 1.2m
22:09:49
STATIONARY
20 Apr
42.66350, 23.28083 · 0.0m
22:03:45
STATIONARY
20 Apr
42.66344, 23.28088 · 0.0m
22:02:51
WALKING
20 Apr
42.66340, 23.28076 · 34.4m
22:02:21
CYCLING
20 Apr
42.66312, 23.28021 · 0.0m
22:02:19
CYCLING
20 Apr
42.66320, 23.28029 · 0.0m
22:02:17
CYCLING
20 Apr
42.66327, 23.28037 · 0.1m
22:02:14
CYCLING
20 Apr
42.66335, 23.28047 · 2.0m
22:02:12
CYCLING
20 Apr
42.66343, 23.28057 · 0.0m
21:59:40
STATIONARY
20 Apr
42.66350, 23.28066 · 3.6m
21:57:15
STATIONARY
20 Apr
42.66343, 23.28084 · 7.2m
21:53:41
STATIONARY
20 Apr
42.66350, 23.28066 · 7.2m
21:49:17
STATIONARY
20 Apr
42.66343, 23.28084 · 7.2m
21:47:37
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
20:46:27
STATIONARY
20 Apr
42.66350, 23.28066 · 0.2m
20:44:04
STATIONARY
20 Apr
42.66343, 23.28084 · 4.4m
20:41:15
STATIONARY
20 Apr
42.66348, 23.28064 · 0.0m
20:40:45
RUNNING
20 Apr
42.66339, 23.28064 · 0.0m
20:40:37
RUNNING
20 Apr
42.66333, 23.28090 · 0.0m
20:38:56
RUNNING
20 Apr
42.66346, 23.28078 · 6.2m
20:36:41
WALKING
20 Apr
42.66343, 23.28096 · 5.2m
20:36:28
WALKING
20 Apr
42.66341, 23.28108 · 0.0m
20:31:08
WALKING
20 Apr
42.66344, 23.28100 · 0.0m
20:31:07
WALKING
20 Apr
42.66342, 23.28115 · 0.4m
20:30:54
DRIVING
20 Apr
42.66322, 23.28223 · 97.7m
20:30:47
STATIONARY
20 Apr
42.66343, 23.28084 · 8.0m
20:29:36
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
20:23:39
STATIONARY
20 Apr
42.66350, 23.28066 · 8.0m
20:17:46
STATIONARY
20 Apr
42.66343, 23.28084 · 1.3m
20:16:58
STATIONARY
20 Apr
42.66350, 23.28066 · 1.3m
20:12:20
WALKING
20 Apr
42.66343, 23.28084 · 8.5m
20:11:37
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
20:05:45
WALKING
20 Apr
42.66350, 23.28066 · 1.3m
20:05:38
STATIONARY
20 Apr
42.66343, 23.28084 · 1.3m
19:59:11
STATIONARY
20 Apr
42.66350, 23.28066 · 1.3m
19:58:25
STATIONARY
20 Apr
42.66343, 23.28084 · 8.9m
19:53:36
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
19:47:39
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
19:40:51
STATIONARY
20 Apr
42.66350, 23.28066 · 3.0m
19:39:23
STATIONARY
20 Apr
42.66343, 23.28084 · 8.5m
19:35:42
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
19:29:34
STATIONARY
20 Apr
42.66350, 23.28066 · 8.0m
19:26:08
STATIONARY
20 Apr
42.66343, 23.28084 · 6.8m
19:23:39
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
17:49:45
STATIONARY
20 Apr
42.66350, 23.28066 · 8.0m
17:43:35
STATIONARY
20 Apr
42.66343, 23.28084 · 3.3m
17:42:52
WALKING
20 Apr
42.66347, 23.28071 · 1.4m
17:42:49
WALKING
20 Apr
42.66356, 23.28054 · 0.0m
17:42:30
RUNNING
20 Apr
42.66350, 23.28045 · 6.0m
17:42:24
WALKING
20 Apr
42.66343, 23.28037 · 9.9m
17:42:18
WALKING
20 Apr
42.66333, 23.28048 · 36.3m
17:41:35
RUNNING
20 Apr
42.66331, 23.28097 · 7.8m
17:41:31
CYCLING
20 Apr
42.66330, 23.28084 · 10.0m
17:41:28
CYCLING
20 Apr
42.66326, 23.28069 · 7.5m
17:41:21
DRIVING
20 Apr
42.66277, 23.28045 · 10.9m
17:41:19
CYCLING
20 Apr
42.66264, 23.28043 · 10.4m
17:41:10
DRIVING
20 Apr
42.66217, 23.28008 · 10.9m
17:41:08
CYCLING
20 Apr
42.66208, 23.27993 · 9.0m
17:41:06
CYCLING
20 Apr
42.66199, 23.27984 · 10.5m
17:41:04
CYCLING
20 Apr
42.66189, 23.27975 · 10.0m
17:40:51
DRIVING
20 Apr
42.66222, 23.27871 · 11.2m
17:40:51
DRIVING
20 Apr
42.66222, 23.27871 · 11.2m
17:40:49
CYCLING
20 Apr
42.66225, 23.27855 · 11.8m
17:40:44
WALKING
20 Apr
42.66230, 23.27837 · 6.0m
17:40:07
WALKING
20 Apr
42.66232, 23.27825 · 7.8m
17:39:53
RUNNING
20 Apr
42.66234, 23.27811 · 8.1m
17:39:29
DRIVING
20 Apr
42.66284, 23.27581 · 10.3m
17:39:27
CYCLING
20 Apr
42.66287, 23.27566 · 8.9m
17:39:17
DRIVING
20 Apr
42.66303, 23.27470 · 13.6m
17:39:15
CYCLING
20 Apr
42.66307, 23.27450 · 10.6m
17:39:13
RUNNING
20 Apr
42.66310, 23.27435 · 7.6m
17:39:07
RUNNING
20 Apr
42.66303, 23.27426 · 8.1m
17:39:03
RUNNING
20 Apr
42.66294, 23.27421 · 9.2m
17:38:49
CYCLING
20 Apr
42.66284, 23.27417 · 9.8m
17:38:35
WALKING
20 Apr
42.66273, 23.27412 · 7.4m
17:38:29
CYCLING
20 Apr
42.66264, 23.27408 · 7.8m
17:38:27
CYCLING
20 Apr
42.66255, 23.27404 · 9.5m
17:38:25
CYCLING
20 Apr
42.66245, 23.27399 · 10.5m
17:38:23...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Back","depth":3,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Personal","depth":3,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Personal","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit profile","depth":3,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Other profiles","depth":3,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Other profiles","depth":4,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Work","depth":3,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New profile","depth":3,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy this profile","depth":3,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Manage profiles","depth":3,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Getting Started · AFFiNE","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Getting Started · AFFiNE","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Download screenpipe — get started in minutes","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Download screenpipe — get started in minutes","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Self-Hosted Software and Apps","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Self-Hosted Software and Apps","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[LakyLak] A security advisory on axios affects at least one of your repositories - kovaliklukas@gmail.com - Gmail","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[LakyLak] A security advisory on axios affects at least one of your repositories - kovaliklukas@gmail.com - Gmail","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Завеждане на щета онлайн | Euroins","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Завеждане на щета онлайн | Euroins","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Photos - Google Photos","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Photos - Google Photos","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Kontakt | Veľvyslanectvo Slovenskej republiky v Sofii","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Kontakt | Veľvyslanectvo Slovenskej republiky v Sofii","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Settings","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Nginx Proxy Manager","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Nginx Proxy Manager","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Location Logger","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Location Logger","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Providers - Admin - authentik","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Providers - Admin - authentik","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Recent love experiences - Claude","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Recent love experiences - Claude","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.48576388,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.5086806,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.53194445,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.5552083,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.5784722,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Location Logger","depth":8,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Location Logger","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Logout","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"←","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Yesterday","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"→","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Today","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Yesterday","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"7d","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"30d","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"From","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"19","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"04","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"00","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":":","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"00","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"To","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"21","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"04","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"00","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":":","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"00","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Movement","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Load","depth":8,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Zoom in","depth":10,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Zoom out","depth":10,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Leaflet","depth":11,"on_screen":true,"help_text":"A JavaScript library for interactive maps","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Leaflet","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"©","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"OSM","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"OSM","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"POINTS","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8972","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1768 shown","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DISTANCE","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"147.8 km","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"raw: 197.6 km","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"TOP MODE","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"driving","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QUALITY","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"97%","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Stationary","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Walking","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Running","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Cycling","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Driving","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fast","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Showing","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1768","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"of 8972 points (7204 redundant points hidden)","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"LOCATIONS","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AREAS","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ADMIN","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"23:36:58","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 0.0m","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"23:36:46","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28083 · 0.0m","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"23:26:25","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 0.0m","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"23:20:31","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 8.1m","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"23:16:16","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28084 · 8.1m","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"23:14:38","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 8.1m","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"23:09:34","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28084 · 7.7m","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"23:08:39","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 0.0m","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:56:41","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66347, 23.28062 · 4.1m","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:50:41","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28075 · 1.4m","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:45:36","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66347, 23.28066 · 3.1m","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:44:41","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66338, 23.28065 · 5.2m","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:39:28","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66342, 23.28053 · 5.2m","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:38:41","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66348, 23.28062 · 6.5m","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:34:01","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66341, 23.28052 · 13.1m","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:28:34","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66337, 23.28073 · 4.2m","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:28:17","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66341, 23.28061 · 9.6m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:24:32","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28084 · 2.7m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:22:53","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 2.7m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:19:15","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28084 · 8.2m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:17:39","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:11:19","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 1.2m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:09:49","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28083 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:03:45","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66344, 23.28088 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:02:51","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66340, 23.28076 · 34.4m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:02:21","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66312, 23.28021 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:02:19","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66320, 23.28029 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:02:17","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66327, 23.28037 · 0.1m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:02:14","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66335, 23.28047 · 2.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:02:12","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28057 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"21:59:40","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 3.6m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"21:57:15","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28084 · 7.2m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"21:53:41","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 7.2m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"21:49:17","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28084 · 7.2m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"21:47:37","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:46:27","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 0.2m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:44:04","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28084 · 4.4m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:41:15","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66348, 23.28064 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:40:45","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66339, 23.28064 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:40:37","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66333, 23.28090 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:38:56","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66346, 23.28078 · 6.2m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:36:41","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28096 · 5.2m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:36:28","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66341, 23.28108 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:31:08","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66344, 23.28100 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:31:07","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66342, 23.28115 · 0.4m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:30:54","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DRIVING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66322, 23.28223 · 97.7m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:30:47","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28084 · 8.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:29:36","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:23:39","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 8.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:17:46","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28084 · 1.3m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:16:58","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 1.3m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:12:20","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28084 · 8.5m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:11:37","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:05:45","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 1.3m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:05:38","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28084 · 1.3m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"19:59:11","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 1.3m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"19:58:25","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28084 · 8.9m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"19:53:36","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"19:47:39","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"19:40:51","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 3.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"19:39:23","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28084 · 8.5m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"19:35:42","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"19:29:34","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 8.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"19:26:08","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28084 · 6.8m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"19:23:39","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:49:45","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 8.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:43:35","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28084 · 3.3m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:42:52","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66347, 23.28071 · 1.4m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:42:49","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66356, 23.28054 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:42:30","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28045 · 6.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:42:24","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28037 · 9.9m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:42:18","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66333, 23.28048 · 36.3m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:41:35","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66331, 23.28097 · 7.8m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:41:31","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66330, 23.28084 · 10.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:41:28","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66326, 23.28069 · 7.5m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:41:21","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DRIVING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66277, 23.28045 · 10.9m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:41:19","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66264, 23.28043 · 10.4m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:41:10","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DRIVING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66217, 23.28008 · 10.9m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:41:08","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66208, 23.27993 · 9.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:41:06","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66199, 23.27984 · 10.5m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:41:04","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66189, 23.27975 · 10.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:40:51","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DRIVING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66222, 23.27871 · 11.2m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:40:51","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DRIVING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66222, 23.27871 · 11.2m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:40:49","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66225, 23.27855 · 11.8m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:40:44","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66230, 23.27837 · 6.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:40:07","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66232, 23.27825 · 7.8m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:39:53","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66234, 23.27811 · 8.1m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:39:29","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DRIVING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66284, 23.27581 · 10.3m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:39:27","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66287, 23.27566 · 8.9m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:39:17","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DRIVING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66303, 23.27470 · 13.6m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:39:15","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66307, 23.27450 · 10.6m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:39:13","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66310, 23.27435 · 7.6m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:39:07","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66303, 23.27426 · 8.1m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:39:03","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66294, 23.27421 · 9.2m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:38:49","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66284, 23.27417 · 9.8m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:38:35","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66273, 23.27412 · 7.4m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:38:29","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66264, 23.27408 · 7.8m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:38:27","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66255, 23.27404 · 9.5m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:38:25","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66245, 23.27399 · 10.5m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:38:23","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-606917349363581800
|
-8504434015248649596
|
manual
|
accessibility
|
NULL
|
Back
Personal
Personal
Edit profile
Other profiles Back
Personal
Personal
Edit profile
Other profiles
Other profiles
Work
New profile
Copy this profile
Manage profiles
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Getting Started · AFFiNE
Getting Started · AFFiNE
Screenpipe — Archive
Screenpipe — Archive
Download screenpipe — get started in minutes
Download screenpipe — get started in minutes
Self-Hosted Software and Apps
Self-Hosted Software and Apps
New Tab
New Tab
[LakyLak] A security advisory on axios affects at least one of your repositories - [EMAIL] - Gmail
[LakyLak] A security advisory on axios affects at least one of your repositories - [EMAIL] - Gmail
Завеждане на щета онлайн | Euroins
Завеждане на щета онлайн | Euroins
Photos - Google Photos
Photos - Google Photos
Kontakt | Veľvyslanectvo Slovenskej republiky v Sofii
Kontakt | Veľvyslanectvo Slovenskej republiky v Sofii
Settings
Settings
Nginx Proxy Manager
Nginx Proxy Manager
Location Logger
Location Logger
Close tab
Providers - Admin - authentik
Providers - Admin - authentik
Recent love experiences - Claude
Recent love experiences - Claude
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Location Logger
Location Logger
Logout
←
Yesterday
→
Today
Yesterday
7d
30d
From
19
/
04
/
2026
,
00
:
00
Calendar
To
21
/
04
/
2026
,
00
:
00
Calendar
Movement
Load
Zoom in
Zoom out
Leaflet
Leaflet
©
OSM
OSM
POINTS
8972
1768 shown
DISTANCE
147.8 km
raw: 197.6 km
TOP MODE
driving
QUALITY
97%
Stationary
Walking
Running
Cycling
Driving
Fast
Showing
1768
of 8972 points (7204 redundant points hidden)
LOCATIONS
AREAS
ADMIN
23:36:58
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
23:36:46
STATIONARY
20 Apr
42.66343, 23.28083 · 0.0m
23:26:25
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
23:20:31
STATIONARY
20 Apr
42.66350, 23.28066 · 8.1m
23:16:16
STATIONARY
20 Apr
42.66343, 23.28084 · 8.1m
23:14:38
STATIONARY
20 Apr
42.66350, 23.28066 · 8.1m
23:09:34
WALKING
20 Apr
42.66343, 23.28084 · 7.7m
23:08:39
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
22:56:41
STATIONARY
20 Apr
42.66347, 23.28062 · 4.1m
22:50:41
WALKING
20 Apr
42.66350, 23.28075 · 1.4m
22:45:36
STATIONARY
20 Apr
42.66347, 23.28066 · 3.1m
22:44:41
STATIONARY
20 Apr
42.66338, 23.28065 · 5.2m
22:39:28
WALKING
20 Apr
42.66342, 23.28053 · 5.2m
22:38:41
STATIONARY
20 Apr
42.66348, 23.28062 · 6.5m
22:34:01
STATIONARY
20 Apr
42.66341, 23.28052 · 13.1m
22:28:34
WALKING
20 Apr
42.66337, 23.28073 · 4.2m
22:28:17
RUNNING
20 Apr
42.66341, 23.28061 · 9.6m
22:24:32
STATIONARY
20 Apr
42.66343, 23.28084 · 2.7m
22:22:53
STATIONARY
20 Apr
42.66350, 23.28066 · 2.7m
22:19:15
STATIONARY
20 Apr
42.66343, 23.28084 · 8.2m
22:17:39
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
22:11:19
STATIONARY
20 Apr
42.66350, 23.28066 · 1.2m
22:09:49
STATIONARY
20 Apr
42.66350, 23.28083 · 0.0m
22:03:45
STATIONARY
20 Apr
42.66344, 23.28088 · 0.0m
22:02:51
WALKING
20 Apr
42.66340, 23.28076 · 34.4m
22:02:21
CYCLING
20 Apr
42.66312, 23.28021 · 0.0m
22:02:19
CYCLING
20 Apr
42.66320, 23.28029 · 0.0m
22:02:17
CYCLING
20 Apr
42.66327, 23.28037 · 0.1m
22:02:14
CYCLING
20 Apr
42.66335, 23.28047 · 2.0m
22:02:12
CYCLING
20 Apr
42.66343, 23.28057 · 0.0m
21:59:40
STATIONARY
20 Apr
42.66350, 23.28066 · 3.6m
21:57:15
STATIONARY
20 Apr
42.66343, 23.28084 · 7.2m
21:53:41
STATIONARY
20 Apr
42.66350, 23.28066 · 7.2m
21:49:17
STATIONARY
20 Apr
42.66343, 23.28084 · 7.2m
21:47:37
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
20:46:27
STATIONARY
20 Apr
42.66350, 23.28066 · 0.2m
20:44:04
STATIONARY
20 Apr
42.66343, 23.28084 · 4.4m
20:41:15
STATIONARY
20 Apr
42.66348, 23.28064 · 0.0m
20:40:45
RUNNING
20 Apr
42.66339, 23.28064 · 0.0m
20:40:37
RUNNING
20 Apr
42.66333, 23.28090 · 0.0m
20:38:56
RUNNING
20 Apr
42.66346, 23.28078 · 6.2m
20:36:41
WALKING
20 Apr
42.66343, 23.28096 · 5.2m
20:36:28
WALKING
20 Apr
42.66341, 23.28108 · 0.0m
20:31:08
WALKING
20 Apr
42.66344, 23.28100 · 0.0m
20:31:07
WALKING
20 Apr
42.66342, 23.28115 · 0.4m
20:30:54
DRIVING
20 Apr
42.66322, 23.28223 · 97.7m
20:30:47
STATIONARY
20 Apr
42.66343, 23.28084 · 8.0m
20:29:36
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
20:23:39
STATIONARY
20 Apr
42.66350, 23.28066 · 8.0m
20:17:46
STATIONARY
20 Apr
42.66343, 23.28084 · 1.3m
20:16:58
STATIONARY
20 Apr
42.66350, 23.28066 · 1.3m
20:12:20
WALKING
20 Apr
42.66343, 23.28084 · 8.5m
20:11:37
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
20:05:45
WALKING
20 Apr
42.66350, 23.28066 · 1.3m
20:05:38
STATIONARY
20 Apr
42.66343, 23.28084 · 1.3m
19:59:11
STATIONARY
20 Apr
42.66350, 23.28066 · 1.3m
19:58:25
STATIONARY
20 Apr
42.66343, 23.28084 · 8.9m
19:53:36
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
19:47:39
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
19:40:51
STATIONARY
20 Apr
42.66350, 23.28066 · 3.0m
19:39:23
STATIONARY
20 Apr
42.66343, 23.28084 · 8.5m
19:35:42
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
19:29:34
STATIONARY
20 Apr
42.66350, 23.28066 · 8.0m
19:26:08
STATIONARY
20 Apr
42.66343, 23.28084 · 6.8m
19:23:39
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
17:49:45
STATIONARY
20 Apr
42.66350, 23.28066 · 8.0m
17:43:35
STATIONARY
20 Apr
42.66343, 23.28084 · 3.3m
17:42:52
WALKING
20 Apr
42.66347, 23.28071 · 1.4m
17:42:49
WALKING
20 Apr
42.66356, 23.28054 · 0.0m
17:42:30
RUNNING
20 Apr
42.66350, 23.28045 · 6.0m
17:42:24
WALKING
20 Apr
42.66343, 23.28037 · 9.9m
17:42:18
WALKING
20 Apr
42.66333, 23.28048 · 36.3m
17:41:35
RUNNING
20 Apr
42.66331, 23.28097 · 7.8m
17:41:31
CYCLING
20 Apr
42.66330, 23.28084 · 10.0m
17:41:28
CYCLING
20 Apr
42.66326, 23.28069 · 7.5m
17:41:21
DRIVING
20 Apr
42.66277, 23.28045 · 10.9m
17:41:19
CYCLING
20 Apr
42.66264, 23.28043 · 10.4m
17:41:10
DRIVING
20 Apr
42.66217, 23.28008 · 10.9m
17:41:08
CYCLING
20 Apr
42.66208, 23.27993 · 9.0m
17:41:06
CYCLING
20 Apr
42.66199, 23.27984 · 10.5m
17:41:04
CYCLING
20 Apr
42.66189, 23.27975 · 10.0m
17:40:51
DRIVING
20 Apr
42.66222, 23.27871 · 11.2m
17:40:51
DRIVING
20 Apr
42.66222, 23.27871 · 11.2m
17:40:49
CYCLING
20 Apr
42.66225, 23.27855 · 11.8m
17:40:44
WALKING
20 Apr
42.66230, 23.27837 · 6.0m
17:40:07
WALKING
20 Apr
42.66232, 23.27825 · 7.8m
17:39:53
RUNNING
20 Apr
42.66234, 23.27811 · 8.1m
17:39:29
DRIVING
20 Apr
42.66284, 23.27581 · 10.3m
17:39:27
CYCLING
20 Apr
42.66287, 23.27566 · 8.9m
17:39:17
DRIVING
20 Apr
42.66303, 23.27470 · 13.6m
17:39:15
CYCLING
20 Apr
42.66307, 23.27450 · 10.6m
17:39:13
RUNNING
20 Apr
42.66310, 23.27435 · 7.6m
17:39:07
RUNNING
20 Apr
42.66303, 23.27426 · 8.1m
17:39:03
RUNNING
20 Apr
42.66294, 23.27421 · 9.2m
17:38:49
CYCLING
20 Apr
42.66284, 23.27417 · 9.8m
17:38:35
WALKING
20 Apr
42.66273, 23.27412 · 7.4m
17:38:29
CYCLING
20 Apr
42.66264, 23.27408 · 7.8m
17:38:27
CYCLING
20 Apr
42.66255, 23.27404 · 9.5m
17:38:25
CYCLING
20 Apr
42.66245, 23.27399 · 10.5m
17:38:23...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
55622
|
1929
|
0
|
2026-05-19T06:30:35.715007+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-19/1779 /Users/lukas/.screenpipe/data/data/2026-05-19/1779172235715_m2.jpg...
|
Firefox
|
Location Logger — Personal
|
1
|
location-tracker.lakylak.xyz/dashboard
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Back
Personal
Personal
Edit profile
Other profiles Back
Personal
Personal
Edit profile
Other profiles
Other profiles
Work
New profile
Copy this profile
Manage profiles
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Getting Started · AFFiNE
Getting Started · AFFiNE
Screenpipe — Archive
Screenpipe — Archive
Download screenpipe — get started in minutes
Download screenpipe — get started in minutes
Self-Hosted Software and Apps
Self-Hosted Software and Apps
New Tab
New Tab
[LakyLak] A security advisory on axios affects at least one of your repositories - [EMAIL] - Gmail
[LakyLak] A security advisory on axios affects at least one of your repositories - [EMAIL] - Gmail
Завеждане на щета онлайн | Euroins
Завеждане на щета онлайн | Euroins
Photos - Google Photos
Photos - Google Photos
Kontakt | Veľvyslanectvo Slovenskej republiky v Sofii
Kontakt | Veľvyslanectvo Slovenskej republiky v Sofii
Settings
Settings
Nginx Proxy Manager
Nginx Proxy Manager
Location Logger
Location Logger
Close tab
Providers - Admin - authentik
Providers - Admin - authentik
Recent love experiences - Claude
Recent love experiences - Claude
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Location Logger
Location Logger
Logout
←
Yesterday
→
Today
Yesterday
7d
30d
From
19
/
04
/
2026
,
00
:
00
Calendar
To
21
/
04
/
2026
,
00
:
00
Calendar
Movement
Load
Zoom in
Zoom out
Leaflet
Leaflet
©
OSM
OSM
POINTS
8972
1768 shown
DISTANCE
147.8 km
raw: 197.6 km
TOP MODE
driving
QUALITY
97%
Stationary
Walking
Running
Cycling
Driving
Fast
Showing
1768
of 8972 points (7204 redundant points hidden)
LOCATIONS
AREAS
ADMIN
23:36:58
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
23:36:46
STATIONARY
20 Apr
42.66343, 23.28083 · 0.0m
23:26:25
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
23:20:31
STATIONARY
20 Apr
42.66350, 23.28066 · 8.1m
23:16:16
STATIONARY
20 Apr
42.66343, 23.28084 · 8.1m
23:14:38
STATIONARY
20 Apr
42.66350, 23.28066 · 8.1m
23:09:34
WALKING
20 Apr
42.66343, 23.28084 · 7.7m
23:08:39
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
22:56:41
STATIONARY
20 Apr
42.66347, 23.28062 · 4.1m
22:50:41
WALKING
20 Apr
42.66350, 23.28075 · 1.4m
22:45:36
STATIONARY
20 Apr
42.66347, 23.28066 · 3.1m
22:44:41
STATIONARY
20 Apr
42.66338, 23.28065 · 5.2m
22:39:28
WALKING
20 Apr
42.66342, 23.28053 · 5.2m
22:38:41
STATIONARY
20 Apr
42.66348, 23.28062 · 6.5m
22:34:01
STATIONARY
20 Apr
42.66341, 23.28052 · 13.1m
22:28:34
WALKING
20 Apr
42.66337, 23.28073 · 4.2m
22:28:17
RUNNING
20 Apr
42.66341, 23.28061 · 9.6m
22:24:32
STATIONARY
20 Apr
42.66343, 23.28084 · 2.7m
22:22:53
STATIONARY
20 Apr
42.66350, 23.28066 · 2.7m
22:19:15
STATIONARY
20 Apr
42.66343, 23.28084 · 8.2m
22:17:39
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
22:11:19
STATIONARY
20 Apr
42.66350, 23.28066 · 1.2m
22:09:49
STATIONARY
20 Apr
42.66350, 23.28083 · 0.0m
22:03:45
STATIONARY
20 Apr
42.66344, 23.28088 · 0.0m
22:02:51
WALKING
20 Apr
42.66340, 23.28076 · 34.4m
22:02:21
CYCLING
20 Apr
42.66312, 23.28021 · 0.0m
22:02:19
CYCLING
20 Apr
42.66320, 23.28029 · 0.0m
22:02:17
CYCLING
20 Apr
42.66327, 23.28037 · 0.1m
22:02:14
CYCLING
20 Apr
42.66335, 23.28047 · 2.0m
22:02:12
CYCLING
20 Apr
42.66343, 23.28057 · 0.0m
21:59:40
STATIONARY
20 Apr
42.66350, 23.28066 · 3.6m
21:57:15
STATIONARY
20 Apr
42.66343, 23.28084 · 7.2m
21:53:41
STATIONARY
20 Apr
42.66350, 23.28066 · 7.2m
21:49:17
STATIONARY
20 Apr
42.66343, 23.28084 · 7.2m
21:47:37
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
20:46:27
STATIONARY
20 Apr
42.66350, 23.28066 · 0.2m
20:44:04
STATIONARY
20 Apr
42.66343, 23.28084 · 4.4m
20:41:15
STATIONARY
20 Apr
42.66348, 23.28064 · 0.0m
20:40:45
RUNNING
20 Apr
42.66339, 23.28064 · 0.0m
20:40:37
RUNNING
20 Apr
42.66333, 23.28090 · 0.0m
20:38:56
RUNNING
20 Apr
42.66346, 23.28078 · 6.2m
20:36:41
WALKING
20 Apr
42.66343, 23.28096 · 5.2m
20:36:28
WALKING
20 Apr
42.66341, 23.28108 · 0.0m
20:31:08
WALKING
20 Apr
42.66344, 23.28100 · 0.0m
20:31:07
WALKING
20 Apr
42.66342, 23.28115 · 0.4m
20:30:54
DRIVING
20 Apr
42.66322, 23.28223 · 97.7m
20:30:47
STATIONARY
20 Apr
42.66343, 23.28084 · 8.0m
20:29:36
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
20:23:39
STATIONARY
20 Apr
42.66350, 23.28066 · 8.0m
20:17:46
STATIONARY
20 Apr
42.66343, 23.28084 · 1.3m
20:16:58
STATIONARY
20 Apr
42.66350, 23.28066 · 1.3m
20:12:20
WALKING
20 Apr
42.66343, 23.28084 · 8.5m
20:11:37
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
20:05:45
WALKING
20 Apr
42.66350, 23.28066 · 1.3m
20:05:38
STATIONARY
20 Apr
42.66343, 23.28084 · 1.3m
19:59:11
STATIONARY
20 Apr
42.66350, 23.28066 · 1.3m
19:58:25
STATIONARY
20 Apr
42.66343, 23.28084 · 8.9m
19:53:36
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
19:47:39
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
19:40:51
STATIONARY
20 Apr
42.66350, 23.28066 · 3.0m
19:39:23
STATIONARY
20 Apr
42.66343, 23.28084 · 8.5m
19:35:42
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
19:29:34
STATIONARY
20 Apr
42.66350, 23.28066 · 8.0m
19:26:08
STATIONARY
20 Apr
42.66343, 23.28084 · 6.8m
19:23:39
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
17:49:45
STATIONARY
20 Apr
42.66350, 23.28066 · 8.0m
17:43:35
STATIONARY
20 Apr
42.66343, 23.28084 · 3.3m
17:42:52
WALKING
20 Apr
42.66347, 23.28071 · 1.4m
17:42:49
WALKING
20 Apr
42.66356, 23.28054 · 0.0m
17:42:30
RUNNING
20 Apr
42.66350, 23.28045 · 6.0m
17:42:24
WALKING
20 Apr
42.66343, 23.28037 · 9.9m
17:42:18
WALKING
20 Apr
42.66333, 23.28048 · 36.3m
17:41:35
RUNNING
20 Apr
42.66331, 23.28097 · 7.8m
17:41:31
CYCLING
20 Apr
42.66330, 23.28084 · 10.0m
17:41:28
CYCLING
20 Apr
42.66326, 23.28069 · 7.5m
17:41:21
DRIVING
20 Apr
42.66277, 23.28045 · 10.9m
17:41:19
CYCLING
20 Apr
42.66264, 23.28043 · 10.4m
17:41:10
DRIVING
20 Apr
42.66217, 23.28008 · 10.9m
17:41:08
CYCLING
20 Apr
42.66208, 23.27993 · 9.0m
17:41:06
CYCLING
20 Apr
42.66199, 23.27984 · 10.5m
17:41:04
CYCLING
20 Apr
42.66189, 23.27975 · 10.0m
17:40:51
DRIVING
20 Apr
42.66222, 23.27871 · 11.2m
17:40:51
DRIVING
20 Apr
42.66222, 23.27871 · 11.2m
17:40:49
CYCLING
20 Apr
42.66225, 23.27855 · 11.8m
17:40:44
WALKING
20 Apr
42.66230, 23.27837 · 6.0m
17:40:07
WALKING
20 Apr
42.66232, 23.27825 · 7.8m
17:39:53
RUNNING
20 Apr
42.66234, 23.27811 · 8.1m
17:39:29
DRIVING
20 Apr
42.66284, 23.27581 · 10.3m
17:39:27
CYCLING
20 Apr
42.66287, 23.27566 · 8.9m
17:39:17
DRIVING
20 Apr
42.66303, 23.27470 · 13.6m
17:39:15
CYCLING
20 Apr
42.66307, 23.27450 · 10.6m
17:39:13
RUNNING
20 Apr
42.66310, 23.27435 · 7.6m
17:39:07
RUNNING
20 Apr
42.66303, 23.27426 · 8.1m
17:39:03
RUNNING
20 Apr
42.66294, 23.27421 · 9.2m
17:38:49
CYCLING
20 Apr
42.66284, 23.27417 · 9.8m
17:38:35
WALKING
20 Apr
42.66273, 23.27412 · 7.4m
17:38:29
CYCLING
20 Apr
42.66264, 23.27408 · 7.8m
17:38:27
CYCLING
20 Apr
42.66255, 23.27404 · 9.5m
17:38:25
CYCLING
20 Apr
42.66245, 23.27399 · 10.5m
17:38:23
DRIVING
20 Apr
42.66233, 23.27394 · 10.6m
17:38:21
CYCLING
20 Apr
42.66222, 23.27388 · 12.0m
17:38:18
RUNNING
20 Apr
42.66209, 23.27382 · 9.8m
17:38:02
CYCLING
20 Apr
42.66199, 23.27378 · 7.9m
17:37:58
DRIVING
20 Apr
42.66177, 23.27368 · 11.0m
17:37:56
CYCLING
20 Apr
42.66165, 23.27362 · 10.0m
17:37:54
CYCLING
20 Apr
42.66154, 23.27356 · 8.8m
17:37:51
RUNNING
20 Apr
42.66144, 23.27353 · 7.4m
17:37:51
RUNNING
20 Apr
42.66144, 23.27353 · 7.4m
17:37:43
RUNNING
20 Apr
42.66135, 23.27349 · 9.3m
17:37:39
CYCLING
20 Apr
42.66125, 23.27344 · 10.0m
17:37:36
CYCLING
20 Apr
42.66114, 23.27339 · 7.6m
17:37:33
RUNNING
20 Apr
42.66105, 23.27335 · 8.5m
17:37:29
CYCLING
20 Apr
42.66096, 23.27331 · 9.7m
17:37:25
CYCLING
20 Apr
42.66085, 23.27326 · 10.1m
17:37:22
CYCLING
20 Apr
42.66074, 23.27321 · 8.3m
17:37:20
CYCLING
20 Apr
42.66064, 23.27317 · 12.4m...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Back","depth":3,"bounds":{"left":0.8412567,"top":0.05586592,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Personal","depth":3,"bounds":{"left":0.85056514,"top":0.059457302,"width":0.07330452,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Personal","depth":5,"bounds":{"left":0.8781583,"top":0.059457302,"width":0.018118352,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit profile","depth":3,"bounds":{"left":0.92386967,"top":0.05586592,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Other profiles","depth":3,"bounds":{"left":0.8412567,"top":0.15642458,"width":0.091921546,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Other profiles","depth":4,"bounds":{"left":0.84391624,"top":0.15961692,"width":0.025265958,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Work","depth":3,"bounds":{"left":0.8412567,"top":0.17557861,"width":0.091921546,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New profile","depth":3,"bounds":{"left":0.8412567,"top":0.20790103,"width":0.091921546,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy this profile","depth":3,"bounds":{"left":0.8412567,"top":0.23343974,"width":0.091921546,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Manage profiles","depth":3,"bounds":{"left":0.8412567,"top":0.25897846,"width":0.091921546,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.5,"top":0.0518755,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"bounds":{"left":0.51329786,"top":0.06304868,"width":0.036901597,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Getting Started · AFFiNE","depth":4,"bounds":{"left":0.5,"top":0.08459697,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Getting Started · AFFiNE","depth":5,"bounds":{"left":0.51329786,"top":0.09577015,"width":0.04255319,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"bounds":{"left":0.5,"top":0.11731844,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"bounds":{"left":0.51329786,"top":0.12849163,"width":0.037898935,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Download screenpipe — get started in minutes","depth":4,"bounds":{"left":0.5,"top":0.15003991,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Download screenpipe — get started in minutes","depth":5,"bounds":{"left":0.51329786,"top":0.16121309,"width":0.0809508,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Self-Hosted Software and Apps","depth":4,"bounds":{"left":0.5,"top":0.18276137,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Self-Hosted Software and Apps","depth":5,"bounds":{"left":0.51329786,"top":0.19393456,"width":0.054853722,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.5,"top":0.21548285,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.51329786,"top":0.22665602,"width":0.014960106,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[LakyLak] A security advisory on axios affects at least one of your repositories - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.5,"top":0.2482043,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[LakyLak] A security advisory on axios affects at least one of your repositories - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.51329786,"top":0.25937748,"width":0.19581117,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Завеждане на щета онлайн | Euroins","depth":4,"bounds":{"left":0.5,"top":0.28092578,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Завеждане на щета онлайн | Euroins","depth":5,"bounds":{"left":0.51329786,"top":0.29209897,"width":0.0653258,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Photos - Google Photos","depth":4,"bounds":{"left":0.5,"top":0.31364724,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Photos - Google Photos","depth":5,"bounds":{"left":0.51329786,"top":0.32482043,"width":0.04138963,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Kontakt | Veľvyslanectvo Slovenskej republiky v Sofii","depth":4,"bounds":{"left":0.5,"top":0.3463687,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Kontakt | Veľvyslanectvo Slovenskej republiky v Sofii","depth":5,"bounds":{"left":0.51329786,"top":0.3575419,"width":0.091090426,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Settings","depth":4,"bounds":{"left":0.5,"top":0.3790902,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":5,"bounds":{"left":0.51329786,"top":0.39026338,"width":0.014295213,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Nginx Proxy Manager","depth":4,"bounds":{"left":0.5,"top":0.41181165,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Nginx Proxy Manager","depth":5,"bounds":{"left":0.51329786,"top":0.42298484,"width":0.036901597,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Location Logger","depth":4,"bounds":{"left":0.5,"top":0.4445331,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Location Logger","depth":5,"bounds":{"left":0.51329786,"top":0.4557063,"width":0.028091755,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.55651593,"top":0.4517159,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Providers - Admin - authentik","depth":4,"bounds":{"left":0.5,"top":0.4772546,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Providers - Admin - authentik","depth":5,"bounds":{"left":0.51329786,"top":0.4884278,"width":0.05119681,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Recent love experiences - Claude","depth":4,"bounds":{"left":0.5,"top":0.509976,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Recent love experiences - Claude","depth":5,"bounds":{"left":0.51329786,"top":0.5211492,"width":0.058344416,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.5028258,"top":0.5442937,"width":0.06333112,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.5028258,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.51379657,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.5249335,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.53607047,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.5472075,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Location Logger","depth":8,"bounds":{"left":0.57413566,"top":0.06384677,"width":0.040724736,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Location Logger","depth":9,"bounds":{"left":0.57413566,"top":0.06384677,"width":0.040724736,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Logout","depth":8,"bounds":{"left":0.97423536,"top":0.059856344,"width":0.02044548,"height":0.023144454},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"←","depth":8,"bounds":{"left":0.57413566,"top":0.10215483,"width":0.011635638,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Yesterday","depth":9,"bounds":{"left":0.5905917,"top":0.10654429,"width":0.019614361,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"→","depth":8,"bounds":{"left":0.6150266,"top":0.10215483,"width":0.011635638,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Today","depth":8,"bounds":{"left":0.6293218,"top":0.10175578,"width":0.019115692,"height":0.021548284},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Yesterday","depth":8,"bounds":{"left":0.6491024,"top":0.10175578,"width":0.026928192,"height":0.021548284},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"7d","depth":8,"bounds":{"left":0.67669547,"top":0.10175578,"width":0.011968086,"height":0.021548284},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"30d","depth":8,"bounds":{"left":0.68932843,"top":0.10175578,"width":0.01512633,"height":0.021548284},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"From","depth":9,"bounds":{"left":0.70711434,"top":0.10654429,"width":0.009640957,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"19","depth":10,"bounds":{"left":0.72273934,"top":0.10614525,"width":0.0051529254,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":9,"bounds":{"left":0.72888964,"top":0.10614525,"width":0.0026595744,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"04","depth":10,"bounds":{"left":0.73254657,"top":0.10614525,"width":0.0051529254,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":9,"bounds":{"left":0.7386968,"top":0.10614525,"width":0.0026595744,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":10,"bounds":{"left":0.74235374,"top":0.10614525,"width":0.010305851,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":9,"bounds":{"left":0.7536569,"top":0.10614525,"width":0.005319149,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"00","depth":10,"bounds":{"left":0.7599734,"top":0.10614525,"width":0.0051529254,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":":","depth":9,"bounds":{"left":0.76612365,"top":0.10614525,"width":0.0026595744,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"00","depth":10,"bounds":{"left":0.7697806,"top":0.10614525,"width":0.0051529254,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":9,"bounds":{"left":0.7662899,"top":0.10694334,"width":0.0056515955,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"To","depth":9,"bounds":{"left":0.77892286,"top":0.10654429,"width":0.004488032,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"21","depth":10,"bounds":{"left":0.789395,"top":0.10614525,"width":0.0051529254,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":9,"bounds":{"left":0.7955452,"top":0.10614525,"width":0.0026595744,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"04","depth":10,"bounds":{"left":0.79920214,"top":0.10614525,"width":0.0051529254,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":9,"bounds":{"left":0.8053524,"top":0.10614525,"width":0.0026595744,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":10,"bounds":{"left":0.8090093,"top":0.10614525,"width":0.010472074,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":9,"bounds":{"left":0.82047874,"top":0.10614525,"width":0.0051529254,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"00","depth":10,"bounds":{"left":0.826629,"top":0.10614525,"width":0.0051529254,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":":","depth":9,"bounds":{"left":0.8327792,"top":0.10614525,"width":0.0026595744,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"00","depth":10,"bounds":{"left":0.83643615,"top":0.10614525,"width":0.0051529254,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":9,"bounds":{"left":0.83294547,"top":0.10694334,"width":0.0056515955,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Movement","depth":9,"bounds":{"left":0.84557843,"top":0.10654429,"width":0.019614361,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Load","depth":8,"bounds":{"left":0.907746,"top":0.10055866,"width":0.020777926,"height":0.023942538},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Zoom in","depth":10,"bounds":{"left":0.5728058,"top":0.14365523,"width":0.009973404,"height":0.023942538},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Zoom out","depth":10,"bounds":{"left":0.5728058,"top":0.16759777,"width":0.009973404,"height":0.023942538},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Leaflet","depth":11,"bounds":{"left":0.8450798,"top":0.9876297,"width":0.017121011,"height":0.011572227},"on_screen":true,"help_text":"A JavaScript library for interactive maps","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Leaflet","depth":12,"bounds":{"left":0.8490692,"top":0.9876297,"width":0.013131649,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"©","depth":11,"bounds":{"left":0.86419547,"top":0.9876297,"width":0.005319149,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"OSM","depth":11,"bounds":{"left":0.86951464,"top":0.9876297,"width":0.009142287,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"OSM","depth":12,"bounds":{"left":0.86951464,"top":0.9876297,"width":0.009142287,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"POINTS","depth":11,"bounds":{"left":0.88863033,"top":0.14365523,"width":0.013630319,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8972","depth":11,"bounds":{"left":0.88796544,"top":0.15522745,"width":0.014960106,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1768 shown","depth":11,"bounds":{"left":0.88513964,"top":0.17318435,"width":0.020611702,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DISTANCE","depth":11,"bounds":{"left":0.91638964,"top":0.14365523,"width":0.017952127,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"147.8 km","depth":11,"bounds":{"left":0.9177194,"top":0.15522745,"width":0.015292553,"height":0.03431764},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"raw: 197.6 km","depth":11,"bounds":{"left":0.91672206,"top":0.19034317,"width":0.017287234,"height":0.021548284},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"TOP MODE","depth":11,"bounds":{"left":0.94581115,"top":0.14365523,"width":0.018949468,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"driving","depth":11,"bounds":{"left":0.9453125,"top":0.15522745,"width":0.019946808,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QUALITY","depth":11,"bounds":{"left":0.9773936,"top":0.14365523,"width":0.015625,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"97%","depth":11,"bounds":{"left":0.97855717,"top":0.15522745,"width":0.013297873,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Stationary","depth":12,"bounds":{"left":0.8902925,"top":0.22865124,"width":0.017785905,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Walking","depth":12,"bounds":{"left":0.91638964,"top":0.22865124,"width":0.013796543,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Running","depth":12,"bounds":{"left":0.93849736,"top":0.22865124,"width":0.01412899,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Cycling","depth":12,"bounds":{"left":0.9609375,"top":0.22865124,"width":0.012965426,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Driving","depth":12,"bounds":{"left":0.9822141,"top":0.22865124,"width":0.012300532,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fast","depth":12,"bounds":{"left":0.8902925,"top":0.24740623,"width":0.00731383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Showing","depth":11,"bounds":{"left":0.8853058,"top":0.27015164,"width":0.015791224,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1768","depth":11,"bounds":{"left":0.90109706,"top":0.27015164,"width":0.008976064,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"of 8972 points (7204 redundant points hidden)","depth":11,"bounds":{"left":0.91007316,"top":0.27015164,"width":0.08294548,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"LOCATIONS","depth":11,"bounds":{"left":0.8881317,"top":0.29449323,"width":0.024767287,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AREAS","depth":11,"bounds":{"left":0.9331782,"top":0.29449323,"width":0.014295213,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ADMIN","depth":11,"bounds":{"left":0.9729056,"top":0.29449323,"width":0.014461436,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"23:36:58","depth":15,"bounds":{"left":0.8853058,"top":0.32402235,"width":0.019614361,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"bounds":{"left":0.90890956,"top":0.32601756,"width":0.021276595,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"bounds":{"left":0.9835439,"top":0.32521948,"width":0.011801862,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 0.0m","depth":15,"bounds":{"left":0.8853058,"top":0.33918595,"width":0.051861703,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"23:36:46","depth":15,"bounds":{"left":0.8853058,"top":0.367917,"width":0.019614361,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"bounds":{"left":0.90890956,"top":0.3699122,"width":0.021276595,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"bounds":{"left":0.9835439,"top":0.36911413,"width":0.011801862,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28083 · 0.0m","depth":15,"bounds":{"left":0.8853058,"top":0.3830806,"width":0.052027926,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"23:26:25","depth":15,"bounds":{"left":0.8853058,"top":0.41181165,"width":0.019281914,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"bounds":{"left":0.90857714,"top":0.41380686,"width":0.021276595,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"bounds":{"left":0.9835439,"top":0.41300878,"width":0.011801862,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 0.0m","depth":15,"bounds":{"left":0.8853058,"top":0.42697525,"width":0.051861703,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"23:20:31","depth":15,"bounds":{"left":0.8853058,"top":0.4557063,"width":0.018783245,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"bounds":{"left":0.90807843,"top":0.4577015,"width":0.021110373,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"bounds":{"left":0.9835439,"top":0.45690343,"width":0.011801862,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 8.1m","depth":15,"bounds":{"left":0.8853058,"top":0.4708699,"width":0.051363032,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"23:16:16","depth":15,"bounds":{"left":0.8853058,"top":0.49960095,"width":0.018284574,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"bounds":{"left":0.9075798,"top":0.50159615,"width":0.021110373,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"bounds":{"left":0.9835439,"top":0.5007981,"width":0.011801862,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28084 · 8.1m","depth":15,"bounds":{"left":0.8853058,"top":0.51476455,"width":0.051529255,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"23:14:38","depth":15,"bounds":{"left":0.8853058,"top":0.5434956,"width":0.018949468,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"bounds":{"left":0.90824467,"top":0.5454908,"width":0.021276595,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"bounds":{"left":0.9835439,"top":0.54469275,"width":0.011801862,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 8.1m","depth":15,"bounds":{"left":0.8853058,"top":0.5586592,"width":0.051363032,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"23:09:34","depth":15,"bounds":{"left":0.8853058,"top":0.58739024,"width":0.019614361,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"bounds":{"left":0.90890956,"top":0.58938545,"width":0.015625,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"bounds":{"left":0.9835439,"top":0.5885874,"width":0.011801862,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28084 · 7.7m","depth":15,"bounds":{"left":0.8853058,"top":0.60255384,"width":0.051363032,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"23:08:39","depth":15,"bounds":{"left":0.8853058,"top":0.6312849,"width":0.019614361,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"bounds":{"left":0.90890956,"top":0.6332801,"width":0.021276595,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"bounds":{"left":0.9835439,"top":0.63248205,"width":0.011801862,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 0.0m","depth":15,"bounds":{"left":0.8853058,"top":0.64644855,"width":0.051861703,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:56:41","depth":15,"bounds":{"left":0.8853058,"top":0.67517954,"width":0.018783245,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"bounds":{"left":0.90807843,"top":0.6771748,"width":0.021276595,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"bounds":{"left":0.9835439,"top":0.6763767,"width":0.011801862,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66347, 23.28062 · 4.1m","depth":15,"bounds":{"left":0.8853058,"top":0.6903432,"width":0.05086436,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:50:41","depth":15,"bounds":{"left":0.8853058,"top":0.71907425,"width":0.018783245,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"bounds":{"left":0.90807843,"top":0.72106946,"width":0.015625,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"bounds":{"left":0.9835439,"top":0.72027135,"width":0.011801862,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28075 · 1.4m","depth":15,"bounds":{"left":0.8853058,"top":0.73423785,"width":0.05086436,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:45:36","depth":15,"bounds":{"left":0.8853058,"top":0.7629689,"width":0.019448139,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"bounds":{"left":0.9087433,"top":0.7649641,"width":0.021276595,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"bounds":{"left":0.9835439,"top":0.764166,"width":0.011801862,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66347, 23.28066 · 3.1m","depth":15,"bounds":{"left":0.8853058,"top":0.7781325,"width":0.05086436,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:44:41","depth":15,"bounds":{"left":0.8853058,"top":0.80686355,"width":0.018949468,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"bounds":{"left":0.90824467,"top":0.80885875,"width":0.021110373,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"bounds":{"left":0.9835439,"top":0.80806065,"width":0.011801862,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66338, 23.28065 · 5.2m","depth":15,"bounds":{"left":0.8853058,"top":0.82202715,"width":0.051861703,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:39:28","depth":15,"bounds":{"left":0.8853058,"top":0.8507582,"width":0.019448139,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"bounds":{"left":0.9087433,"top":0.8527534,"width":0.015458777,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"bounds":{"left":0.9835439,"top":0.8519553,"width":0.011801862,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66342, 23.28053 · 5.2m","depth":15,"bounds":{"left":0.8853058,"top":0.8659218,"width":0.051861703,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:38:41","depth":15,"bounds":{"left":0.8853058,"top":0.89465284,"width":0.018783245,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"bounds":{"left":0.90807843,"top":0.89664805,"width":0.021276595,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"bounds":{"left":0.9835439,"top":0.89584994,"width":0.011801862,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66348, 23.28062 · 6.5m","depth":15,"bounds":{"left":0.8853058,"top":0.90981644,"width":0.052027926,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:34:01","depth":15,"bounds":{"left":0.8853058,"top":0.9385475,"width":0.018783245,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"bounds":{"left":0.90807843,"top":0.9405427,"width":0.021276595,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"bounds":{"left":0.9835439,"top":0.9397446,"width":0.011801862,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66341, 23.28052 · 13.1m","depth":15,"bounds":{"left":0.8853058,"top":0.9537111,"width":0.05236037,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:28:34","depth":15,"bounds":{"left":0.8853058,"top":0.98244214,"width":0.019448139,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"bounds":{"left":0.9087433,"top":0.98443735,"width":0.015625,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"bounds":{"left":0.9835439,"top":0.98363924,"width":0.011801862,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66337, 23.28073 · 4.2m","depth":15,"bounds":{"left":0.8853058,"top":0.99760574,"width":0.051030584,"height":0.002394259},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:28:17","depth":15,"bounds":{"left":0.8853058,"top":1.0,"width":0.018450798,"height":-0.02633679},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"bounds":{"left":0.907746,"top":1.0,"width":0.015625,"height":-0.028331995},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"bounds":{"left":0.9835439,"top":1.0,"width":0.011801862,"height":-0.027533889},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66341, 23.28061 · 9.6m","depth":15,"bounds":{"left":0.8853058,"top":1.0,"width":0.05069814,"height":-0.04150045},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:24:32","depth":15,"bounds":{"left":0.8853058,"top":1.0,"width":0.019281914,"height":-0.07023144},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"bounds":{"left":0.90857714,"top":1.0,"width":0.021110373,"height":-0.07222664},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"bounds":{"left":0.9835439,"top":1.0,"width":0.011801862,"height":-0.07142854},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28084 · 2.7m","depth":15,"bounds":{"left":0.8853058,"top":1.0,"width":0.051861703,"height":-0.0853951},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:22:53","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 2.7m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:19:15","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28084 · 8.2m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:17:39","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:11:19","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 1.2m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:09:49","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28083 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:03:45","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66344, 23.28088 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:02:51","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66340, 23.28076 · 34.4m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:02:21","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66312, 23.28021 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:02:19","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66320, 23.28029 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:02:17","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66327, 23.28037 · 0.1m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:02:14","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66335, 23.28047 · 2.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:02:12","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28057 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"21:59:40","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 3.6m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"21:57:15","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28084 · 7.2m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"21:53:41","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 7.2m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"21:49:17","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28084 · 7.2m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"21:47:37","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:46:27","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 0.2m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:44:04","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28084 · 4.4m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:41:15","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66348, 23.28064 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:40:45","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66339, 23.28064 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:40:37","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66333, 23.28090 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:38:56","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66346, 23.28078 · 6.2m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:36:41","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28096 · 5.2m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:36:28","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66341, 23.28108 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:31:08","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66344, 23.28100 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:31:07","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66342, 23.28115 · 0.4m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:30:54","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DRIVING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66322, 23.28223 · 97.7m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:30:47","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28084 · 8.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:29:36","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:23:39","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 8.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:17:46","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28084 · 1.3m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:16:58","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 1.3m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:12:20","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28084 · 8.5m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:11:37","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:05:45","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 1.3m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:05:38","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28084 · 1.3m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"19:59:11","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 1.3m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"19:58:25","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28084 · 8.9m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"19:53:36","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"19:47:39","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"19:40:51","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 3.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"19:39:23","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28084 · 8.5m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"19:35:42","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"19:29:34","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 8.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"19:26:08","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28084 · 6.8m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"19:23:39","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:49:45","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28066 · 8.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:43:35","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28084 · 3.3m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:42:52","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66347, 23.28071 · 1.4m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:42:49","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66356, 23.28054 · 0.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:42:30","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66350, 23.28045 · 6.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:42:24","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66343, 23.28037 · 9.9m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:42:18","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66333, 23.28048 · 36.3m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:41:35","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66331, 23.28097 · 7.8m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:41:31","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66330, 23.28084 · 10.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:41:28","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66326, 23.28069 · 7.5m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:41:21","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DRIVING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66277, 23.28045 · 10.9m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:41:19","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66264, 23.28043 · 10.4m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:41:10","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DRIVING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66217, 23.28008 · 10.9m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:41:08","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66208, 23.27993 · 9.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:41:06","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66199, 23.27984 · 10.5m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:41:04","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66189, 23.27975 · 10.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:40:51","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DRIVING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66222, 23.27871 · 11.2m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:40:51","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DRIVING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66222, 23.27871 · 11.2m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:40:49","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66225, 23.27855 · 11.8m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:40:44","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66230, 23.27837 · 6.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:40:07","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66232, 23.27825 · 7.8m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:39:53","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66234, 23.27811 · 8.1m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:39:29","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DRIVING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66284, 23.27581 · 10.3m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:39:27","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66287, 23.27566 · 8.9m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:39:17","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DRIVING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66303, 23.27470 · 13.6m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:39:15","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66307, 23.27450 · 10.6m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:39:13","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66310, 23.27435 · 7.6m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:39:07","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66303, 23.27426 · 8.1m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:39:03","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66294, 23.27421 · 9.2m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:38:49","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66284, 23.27417 · 9.8m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:38:35","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66273, 23.27412 · 7.4m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:38:29","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66264, 23.27408 · 7.8m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:38:27","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66255, 23.27404 · 9.5m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:38:25","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66245, 23.27399 · 10.5m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:38:23","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DRIVING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66233, 23.27394 · 10.6m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:38:21","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66222, 23.27388 · 12.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:38:18","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66209, 23.27382 · 9.8m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:38:02","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66199, 23.27378 · 7.9m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:37:58","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DRIVING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66177, 23.27368 · 11.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:37:56","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66165, 23.27362 · 10.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:37:54","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66154, 23.27356 · 8.8m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:37:51","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66144, 23.27353 · 7.4m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:37:51","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66144, 23.27353 · 7.4m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:37:43","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66135, 23.27349 · 9.3m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:37:39","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66125, 23.27344 · 10.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:37:36","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66114, 23.27339 · 7.6m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:37:33","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66105, 23.27335 · 8.5m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:37:29","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66096, 23.27331 · 9.7m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:37:25","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66085, 23.27326 · 10.1m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:37:22","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66074, 23.27321 · 8.3m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:37:20","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20 Apr","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66064, 23.27317 · 12.4m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
4694955421675255864
|
-8540476006407147388
|
manual
|
accessibility
|
NULL
|
Back
Personal
Personal
Edit profile
Other profiles Back
Personal
Personal
Edit profile
Other profiles
Other profiles
Work
New profile
Copy this profile
Manage profiles
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Getting Started · AFFiNE
Getting Started · AFFiNE
Screenpipe — Archive
Screenpipe — Archive
Download screenpipe — get started in minutes
Download screenpipe — get started in minutes
Self-Hosted Software and Apps
Self-Hosted Software and Apps
New Tab
New Tab
[LakyLak] A security advisory on axios affects at least one of your repositories - [EMAIL] - Gmail
[LakyLak] A security advisory on axios affects at least one of your repositories - [EMAIL] - Gmail
Завеждане на щета онлайн | Euroins
Завеждане на щета онлайн | Euroins
Photos - Google Photos
Photos - Google Photos
Kontakt | Veľvyslanectvo Slovenskej republiky v Sofii
Kontakt | Veľvyslanectvo Slovenskej republiky v Sofii
Settings
Settings
Nginx Proxy Manager
Nginx Proxy Manager
Location Logger
Location Logger
Close tab
Providers - Admin - authentik
Providers - Admin - authentik
Recent love experiences - Claude
Recent love experiences - Claude
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Location Logger
Location Logger
Logout
←
Yesterday
→
Today
Yesterday
7d
30d
From
19
/
04
/
2026
,
00
:
00
Calendar
To
21
/
04
/
2026
,
00
:
00
Calendar
Movement
Load
Zoom in
Zoom out
Leaflet
Leaflet
©
OSM
OSM
POINTS
8972
1768 shown
DISTANCE
147.8 km
raw: 197.6 km
TOP MODE
driving
QUALITY
97%
Stationary
Walking
Running
Cycling
Driving
Fast
Showing
1768
of 8972 points (7204 redundant points hidden)
LOCATIONS
AREAS
ADMIN
23:36:58
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
23:36:46
STATIONARY
20 Apr
42.66343, 23.28083 · 0.0m
23:26:25
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
23:20:31
STATIONARY
20 Apr
42.66350, 23.28066 · 8.1m
23:16:16
STATIONARY
20 Apr
42.66343, 23.28084 · 8.1m
23:14:38
STATIONARY
20 Apr
42.66350, 23.28066 · 8.1m
23:09:34
WALKING
20 Apr
42.66343, 23.28084 · 7.7m
23:08:39
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
22:56:41
STATIONARY
20 Apr
42.66347, 23.28062 · 4.1m
22:50:41
WALKING
20 Apr
42.66350, 23.28075 · 1.4m
22:45:36
STATIONARY
20 Apr
42.66347, 23.28066 · 3.1m
22:44:41
STATIONARY
20 Apr
42.66338, 23.28065 · 5.2m
22:39:28
WALKING
20 Apr
42.66342, 23.28053 · 5.2m
22:38:41
STATIONARY
20 Apr
42.66348, 23.28062 · 6.5m
22:34:01
STATIONARY
20 Apr
42.66341, 23.28052 · 13.1m
22:28:34
WALKING
20 Apr
42.66337, 23.28073 · 4.2m
22:28:17
RUNNING
20 Apr
42.66341, 23.28061 · 9.6m
22:24:32
STATIONARY
20 Apr
42.66343, 23.28084 · 2.7m
22:22:53
STATIONARY
20 Apr
42.66350, 23.28066 · 2.7m
22:19:15
STATIONARY
20 Apr
42.66343, 23.28084 · 8.2m
22:17:39
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
22:11:19
STATIONARY
20 Apr
42.66350, 23.28066 · 1.2m
22:09:49
STATIONARY
20 Apr
42.66350, 23.28083 · 0.0m
22:03:45
STATIONARY
20 Apr
42.66344, 23.28088 · 0.0m
22:02:51
WALKING
20 Apr
42.66340, 23.28076 · 34.4m
22:02:21
CYCLING
20 Apr
42.66312, 23.28021 · 0.0m
22:02:19
CYCLING
20 Apr
42.66320, 23.28029 · 0.0m
22:02:17
CYCLING
20 Apr
42.66327, 23.28037 · 0.1m
22:02:14
CYCLING
20 Apr
42.66335, 23.28047 · 2.0m
22:02:12
CYCLING
20 Apr
42.66343, 23.28057 · 0.0m
21:59:40
STATIONARY
20 Apr
42.66350, 23.28066 · 3.6m
21:57:15
STATIONARY
20 Apr
42.66343, 23.28084 · 7.2m
21:53:41
STATIONARY
20 Apr
42.66350, 23.28066 · 7.2m
21:49:17
STATIONARY
20 Apr
42.66343, 23.28084 · 7.2m
21:47:37
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
20:46:27
STATIONARY
20 Apr
42.66350, 23.28066 · 0.2m
20:44:04
STATIONARY
20 Apr
42.66343, 23.28084 · 4.4m
20:41:15
STATIONARY
20 Apr
42.66348, 23.28064 · 0.0m
20:40:45
RUNNING
20 Apr
42.66339, 23.28064 · 0.0m
20:40:37
RUNNING
20 Apr
42.66333, 23.28090 · 0.0m
20:38:56
RUNNING
20 Apr
42.66346, 23.28078 · 6.2m
20:36:41
WALKING
20 Apr
42.66343, 23.28096 · 5.2m
20:36:28
WALKING
20 Apr
42.66341, 23.28108 · 0.0m
20:31:08
WALKING
20 Apr
42.66344, 23.28100 · 0.0m
20:31:07
WALKING
20 Apr
42.66342, 23.28115 · 0.4m
20:30:54
DRIVING
20 Apr
42.66322, 23.28223 · 97.7m
20:30:47
STATIONARY
20 Apr
42.66343, 23.28084 · 8.0m
20:29:36
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
20:23:39
STATIONARY
20 Apr
42.66350, 23.28066 · 8.0m
20:17:46
STATIONARY
20 Apr
42.66343, 23.28084 · 1.3m
20:16:58
STATIONARY
20 Apr
42.66350, 23.28066 · 1.3m
20:12:20
WALKING
20 Apr
42.66343, 23.28084 · 8.5m
20:11:37
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
20:05:45
WALKING
20 Apr
42.66350, 23.28066 · 1.3m
20:05:38
STATIONARY
20 Apr
42.66343, 23.28084 · 1.3m
19:59:11
STATIONARY
20 Apr
42.66350, 23.28066 · 1.3m
19:58:25
STATIONARY
20 Apr
42.66343, 23.28084 · 8.9m
19:53:36
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
19:47:39
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
19:40:51
STATIONARY
20 Apr
42.66350, 23.28066 · 3.0m
19:39:23
STATIONARY
20 Apr
42.66343, 23.28084 · 8.5m
19:35:42
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
19:29:34
STATIONARY
20 Apr
42.66350, 23.28066 · 8.0m
19:26:08
STATIONARY
20 Apr
42.66343, 23.28084 · 6.8m
19:23:39
STATIONARY
20 Apr
42.66350, 23.28066 · 0.0m
17:49:45
STATIONARY
20 Apr
42.66350, 23.28066 · 8.0m
17:43:35
STATIONARY
20 Apr
42.66343, 23.28084 · 3.3m
17:42:52
WALKING
20 Apr
42.66347, 23.28071 · 1.4m
17:42:49
WALKING
20 Apr
42.66356, 23.28054 · 0.0m
17:42:30
RUNNING
20 Apr
42.66350, 23.28045 · 6.0m
17:42:24
WALKING
20 Apr
42.66343, 23.28037 · 9.9m
17:42:18
WALKING
20 Apr
42.66333, 23.28048 · 36.3m
17:41:35
RUNNING
20 Apr
42.66331, 23.28097 · 7.8m
17:41:31
CYCLING
20 Apr
42.66330, 23.28084 · 10.0m
17:41:28
CYCLING
20 Apr
42.66326, 23.28069 · 7.5m
17:41:21
DRIVING
20 Apr
42.66277, 23.28045 · 10.9m
17:41:19
CYCLING
20 Apr
42.66264, 23.28043 · 10.4m
17:41:10
DRIVING
20 Apr
42.66217, 23.28008 · 10.9m
17:41:08
CYCLING
20 Apr
42.66208, 23.27993 · 9.0m
17:41:06
CYCLING
20 Apr
42.66199, 23.27984 · 10.5m
17:41:04
CYCLING
20 Apr
42.66189, 23.27975 · 10.0m
17:40:51
DRIVING
20 Apr
42.66222, 23.27871 · 11.2m
17:40:51
DRIVING
20 Apr
42.66222, 23.27871 · 11.2m
17:40:49
CYCLING
20 Apr
42.66225, 23.27855 · 11.8m
17:40:44
WALKING
20 Apr
42.66230, 23.27837 · 6.0m
17:40:07
WALKING
20 Apr
42.66232, 23.27825 · 7.8m
17:39:53
RUNNING
20 Apr
42.66234, 23.27811 · 8.1m
17:39:29
DRIVING
20 Apr
42.66284, 23.27581 · 10.3m
17:39:27
CYCLING
20 Apr
42.66287, 23.27566 · 8.9m
17:39:17
DRIVING
20 Apr
42.66303, 23.27470 · 13.6m
17:39:15
CYCLING
20 Apr
42.66307, 23.27450 · 10.6m
17:39:13
RUNNING
20 Apr
42.66310, 23.27435 · 7.6m
17:39:07
RUNNING
20 Apr
42.66303, 23.27426 · 8.1m
17:39:03
RUNNING
20 Apr
42.66294, 23.27421 · 9.2m
17:38:49
CYCLING
20 Apr
42.66284, 23.27417 · 9.8m
17:38:35
WALKING
20 Apr
42.66273, 23.27412 · 7.4m
17:38:29
CYCLING
20 Apr
42.66264, 23.27408 · 7.8m
17:38:27
CYCLING
20 Apr
42.66255, 23.27404 · 9.5m
17:38:25
CYCLING
20 Apr
42.66245, 23.27399 · 10.5m
17:38:23
DRIVING
20 Apr
42.66233, 23.27394 · 10.6m
17:38:21
CYCLING
20 Apr
42.66222, 23.27388 · 12.0m
17:38:18
RUNNING
20 Apr
42.66209, 23.27382 · 9.8m
17:38:02
CYCLING
20 Apr
42.66199, 23.27378 · 7.9m
17:37:58
DRIVING
20 Apr
42.66177, 23.27368 · 11.0m
17:37:56
CYCLING
20 Apr
42.66165, 23.27362 · 10.0m
17:37:54
CYCLING
20 Apr
42.66154, 23.27356 · 8.8m
17:37:51
RUNNING
20 Apr
42.66144, 23.27353 · 7.4m
17:37:51
RUNNING
20 Apr
42.66144, 23.27353 · 7.4m
17:37:43
RUNNING
20 Apr
42.66135, 23.27349 · 9.3m
17:37:39
CYCLING
20 Apr
42.66125, 23.27344 · 10.0m
17:37:36
CYCLING
20 Apr
42.66114, 23.27339 · 7.6m
17:37:33
RUNNING
20 Apr
42.66105, 23.27335 · 8.5m
17:37:29
CYCLING
20 Apr
42.66096, 23.27331 · 9.7m
17:37:25
CYCLING
20 Apr
42.66085, 23.27326 · 10.1m
17:37:22
CYCLING
20 Apr
42.66074, 23.27321 · 8.3m
17:37:20
CYCLING
20 Apr
42.66064, 23.27317 · 12.4m...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
55623
|
NULL
|
0
|
2026-05-19T06:31:37.699349+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-19/1779 /Users/lukas/.screenpipe/data/data/2026-05-19/1779172297699_m1.jpg...
|
Firefox
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira — Work...
|
1
|
jiminny.atlassian.net/jira/software/c/projects/JY/ jiminny.atlassian.net/jira/software/c/projects/JY/boards/37?selectedIssue=JY-20725...
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Close tab
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Sidebar
Sidebar
Main Content
Main Content
Space navigation
Space navigation
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
1 Notification
1 Notification
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Sidebar","depth":11,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sidebar","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Main Content","depth":11,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Main Content","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Space navigation","depth":11,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Space navigation","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse sidebar [","depth":10,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse sidebar [","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Switch sites or apps","depth":11,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Switch sites or apps","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to your Jira homepage","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Search, press enter to navigate to advanced search with your text query","depth":12,"on_screen":true,"help_text":"","placeholder":"Search","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Create","depth":11,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Rovo Ask Rovo","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Rovo","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"1 Notification","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1 Notification","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Help","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Help","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Settings","depth":13,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Settings","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"lukas.kovalik@jiminny.com","depth":13,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas.kovalik@jiminny.com","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"For you","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"For you","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Recent","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Recent","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Starred","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Starred","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Apps","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Apps","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Apps","depth":14,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Apps","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Spaces","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Spaces","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create space","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
-4885021907826347434
|
4671299896745161860
|
click
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Close tab
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Sidebar
Sidebar
Main Content
Main Content
Space navigation
Space navigation
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
1 Notification
1 Notification
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space...
|
55621
|
NULL
|
NULL
|
NULL
|
|
55624
|
NULL
|
0
|
2026-05-19T06:31:37.703347+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-19/1779 /Users/lukas/.screenpipe/data/data/2026-05-19/1779172297703_m2.jpg...
|
Firefox
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira — Work...
|
1
|
jiminny.atlassian.net/jira/software/c/projects/JY/ jiminny.atlassian.net/jira/software/c/projects/JY/boards/37?selectedIssue=JY-20725...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Close tab
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Sidebar
Sidebar
Main Content
Main Content
Space navigation
Space navigation
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
1 Notification
1 Notification
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.10106383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.05905826,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.18816489,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.118914604,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Sidebar","depth":11,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sidebar","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Main Content","depth":11,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Main Content","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Space navigation","depth":11,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Space navigation","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse sidebar [","depth":10,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse sidebar [","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Switch sites or apps","depth":11,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Switch sites or apps","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to your Jira homepage","depth":10,"bounds":{"left":0.10887633,"top":0.057861134,"width":0.029421542,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Search, press enter to navigate to advanced search with your text query","depth":12,"bounds":{"left":0.40475398,"top":0.06264964,"width":0.24268617,"height":0.015961692},"on_screen":true,"help_text":"","placeholder":"Search","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Create","depth":11,"bounds":{"left":0.65575135,"top":0.057861134,"width":0.030086435,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":13,"bounds":{"left":0.66705453,"top":0.06384677,"width":0.014793883,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Rovo Ask Rovo","depth":13,"bounds":{"left":0.91223407,"top":0.057861134,"width":0.035904255,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Rovo","depth":15,"bounds":{"left":0.92353725,"top":0.06384677,"width":0.020611702,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"1 Notification","depth":13,"bounds":{"left":0.9494681,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1 Notification","depth":15,"bounds":{"left":0.954621,"top":0.06344773,"width":0.028590426,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Help","depth":13,"bounds":{"left":0.96143615,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Help","depth":15,"bounds":{"left":0.9665891,"top":0.06344773,"width":0.010139627,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Settings","depth":13,"bounds":{"left":0.9734042,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Settings","depth":15,"bounds":{"left":0.97855717,"top":0.06344773,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"lukas.kovalik@jiminny.com","depth":13,"bounds":{"left":0.98537236,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas.kovalik@jiminny.com","depth":15,"bounds":{"left":0.99052525,"top":0.06344773,"width":0.009474754,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"For you","depth":13,"bounds":{"left":0.08361037,"top":0.09976058,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"For you","depth":16,"bounds":{"left":0.09424867,"top":0.10574621,"width":0.01662234,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Recent","depth":13,"bounds":{"left":0.08361037,"top":0.12529927,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Recent","depth":16,"bounds":{"left":0.09424867,"top":0.13128492,"width":0.015458777,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Starred","depth":13,"bounds":{"left":0.08361037,"top":0.15083799,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Starred","depth":16,"bounds":{"left":0.09424867,"top":0.15682362,"width":0.016456118,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Apps","depth":13,"bounds":{"left":0.08361037,"top":0.1763767,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Apps","depth":16,"bounds":{"left":0.09424867,"top":0.18236233,"width":0.011635638,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Apps","depth":14,"bounds":{"left":0.15309176,"top":0.17956904,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Apps","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Spaces","depth":13,"bounds":{"left":0.08361037,"top":0.2019154,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Spaces","depth":16,"bounds":{"left":0.09424867,"top":0.20790103,"width":0.016456118,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create space","depth":14,"bounds":{"left":0.13646941,"top":0.20510775,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create space","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-1790291043589952781
|
4671299896740967556
|
click
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Close tab
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Sidebar
Sidebar
Main Content
Main Content
Space navigation
Space navigation
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
1 Notification
1 Notification
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space...
|
55622
|
NULL
|
NULL
|
NULL
|
|
55625
|
1931
|
0
|
2026-05-19T06:31:44.858376+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-19/1779 /Users/lukas/.screenpipe/data/data/2026-05-19/1779172304858_m2.jpg...
|
Firefox
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira — Work...
|
1
|
jiminny.atlassian.net/jira/software/c/projects/JY/ jiminny.atlassian.net/jira/software/c/projects/JY/boards/37...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Close tab
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
Main Content
Main Content
Space navigation
Space navigation
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
1 Notification
1 Notification
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Dashboards
Dashboards
Create dashboard
Create dashboard
More actions for Dashboards
More actions for Dashboards
Operations
Operations
More actions for Operations
More actions for Operations
Confluence , (opens new window)
Confluence
, (opens new window)
Teams , (opens new window)
Teams
, (opens new window)
open menu
open menu
Customise sidebar
Customise sidebar
Resize side navigation panel
Spaces
Spaces
/
Jiminny (New)
Jiminny (New)
Platform Team
Platform Team
Add people
Add people
Board actions
Board actions
Share
Automation
Give feedback
Give feedback
Enter full screen
Enter full screen
Summary
Summary
Timeline
Timeline
Backlog
Backlog
Active sprints
Active sprints
Calendar
Calendar
Reports
Reports
Testing Board
Testing Board
List
List
Forms
Forms
Components
Components
Development
Development
Code
Code
Security
Security
Releases
Releases
Deployments
Deployments
Archived work items
Archived work items
Docs
Docs
Shortcuts
Shortcuts
Slack integration
Slack integration
Reporting Center
Reporting Center
Add to navigation
As you type to search or apply filters, the board updates with work items to match.
Search on current page
Filter by assignee
Filter assignees by Lukas Kovalik
Filter assignees by Aneliya Angelova
Filter assignees by Nikolay Ivanov
Filter assignees by Nikolay Nikolov
Filter assignees by Steliyan Georgiev
Filter assignees by Unassigned
Epic
Epic
Type
Type
Quick filters
Quick filters
Complete sprint
Complete sprint
Sprint details
Sprint details
Group by Queries
Group
: Queries
Sprint insights
Sprint insights
View settings
View settings
More actions
More actions
Ready To Be Merged (1 work item)
Ready To Be Merged
(1 work item)
Ready For DEV
READY FOR DEV
In DEV
IN DEV
Code Review
CODE REVIEW
Create work item in Code Review
Create
Blocked
BLOCKED
Create work item in Blocked
Create
QA
QA
Create work item in QA
Create
PO Acceptance
PO ACCEPTANCE
Create work item in PO Acceptance
Create
Deploy
DEPLOY
1
JY-20725 [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts. Use the enter key to load the work item.
[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts
Edit summary
Edit summary
Platform Stability, Edit Parent
PLATFORM STABILITY
Ready To Merge
JY-20725
JY-20725
1.5
pull request
Assignee: Aneliya Angelova
Sprint (18 work items)
Sprint
(18 work items)
Ready For DEV
READY FOR DEV
4
JY-20676 Notify the user if a Panorama prompts is deleted but is used in AJ Report. Use the enter key to load the work item....
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.10106383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.05905826,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.18816489,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.118914604,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to:","depth":10,"bounds":{"left":0.090259306,"top":0.07861133,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Top Bar","depth":11,"bounds":{"left":0.090259306,"top":0.097765364,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Top Bar","depth":12,"bounds":{"left":0.090259306,"top":0.097765364,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sidebar","depth":11,"bounds":{"left":0.090259306,"top":0.11691939,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sidebar","depth":12,"bounds":{"left":0.090259306,"top":0.11691939,"width":0.016954787,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Main Content","depth":11,"bounds":{"left":0.090259306,"top":0.13607343,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Main Content","depth":12,"bounds":{"left":0.090259306,"top":0.13607343,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Space navigation","depth":11,"bounds":{"left":0.090259306,"top":0.15522745,"width":0.037898935,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Space navigation","depth":12,"bounds":{"left":0.090259306,"top":0.15522745,"width":0.037898935,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse sidebar [","depth":10,"bounds":{"left":0.08361037,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse sidebar [","depth":12,"bounds":{"left":0.0887633,"top":0.06344773,"width":0.039727394,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Switch sites or apps","depth":11,"bounds":{"left":0.095578454,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Switch sites or apps","depth":13,"bounds":{"left":0.10073138,"top":0.06344773,"width":0.044215426,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to your Jira homepage","depth":10,"bounds":{"left":0.10887633,"top":0.057861134,"width":0.029421542,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Search, press enter to navigate to advanced search with your text query","depth":12,"bounds":{"left":0.40475398,"top":0.06264964,"width":0.24268617,"height":0.015961692},"on_screen":true,"help_text":"","placeholder":"Search","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Create","depth":11,"bounds":{"left":0.65575135,"top":0.057861134,"width":0.030086435,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":13,"bounds":{"left":0.66705453,"top":0.06384677,"width":0.014793883,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Rovo Ask Rovo","depth":13,"bounds":{"left":0.91223407,"top":0.057861134,"width":0.035904255,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Rovo","depth":15,"bounds":{"left":0.92353725,"top":0.06384677,"width":0.020611702,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"1 Notification","depth":13,"bounds":{"left":0.9494681,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1 Notification","depth":15,"bounds":{"left":0.954621,"top":0.06344773,"width":0.028590426,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Help","depth":13,"bounds":{"left":0.96143615,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Help","depth":15,"bounds":{"left":0.9665891,"top":0.06344773,"width":0.010139627,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Settings","depth":13,"bounds":{"left":0.9734042,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Settings","depth":15,"bounds":{"left":0.97855717,"top":0.06344773,"width":0.017952127,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"lukas.kovalik@jiminny.com","depth":13,"bounds":{"left":0.98537236,"top":0.057861134,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas.kovalik@jiminny.com","depth":15,"bounds":{"left":0.99052525,"top":0.06344773,"width":0.009474754,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"For you","depth":13,"bounds":{"left":0.08361037,"top":0.09976058,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"For you","depth":16,"bounds":{"left":0.09424867,"top":0.10574621,"width":0.01662234,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Recent","depth":13,"bounds":{"left":0.08361037,"top":0.12529927,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Recent","depth":16,"bounds":{"left":0.09424867,"top":0.13128492,"width":0.015458777,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Starred","depth":13,"bounds":{"left":0.08361037,"top":0.15083799,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Starred","depth":16,"bounds":{"left":0.09424867,"top":0.15682362,"width":0.016456118,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Apps","depth":13,"bounds":{"left":0.08361037,"top":0.1763767,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Apps","depth":16,"bounds":{"left":0.09424867,"top":0.18236233,"width":0.011635638,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Apps","depth":14,"bounds":{"left":0.15309176,"top":0.17956904,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Apps","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Spaces","depth":13,"bounds":{"left":0.08361037,"top":0.2019154,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Spaces","depth":16,"bounds":{"left":0.09424867,"top":0.20790103,"width":0.016456118,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create space","depth":14,"bounds":{"left":0.13646941,"top":0.20510775,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create space","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for spaces","depth":14,"bounds":{"left":0.14577793,"top":0.20510775,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for spaces","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Recent","depth":17,"bounds":{"left":0.08959442,"top":0.23423783,"width":0.013464096,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Service-Desk","depth":18,"bounds":{"left":0.08759973,"top":0.2529928,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Service-Desk","depth":21,"bounds":{"left":0.09823803,"top":0.25897846,"width":0.03025266,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Service-Desk","depth":19,"bounds":{"left":0.15442154,"top":0.25618514,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Service-Desk","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny (New)","depth":18,"bounds":{"left":0.08759973,"top":0.27853152,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny (New)","depth":21,"bounds":{"left":0.09823803,"top":0.28451717,"width":0.032081116,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Jiminny (New)","depth":19,"bounds":{"left":0.08892952,"top":0.28172386,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXMenuButton","text":"Create board","depth":19,"bounds":{"left":0.13646941,"top":0.28172386,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create board","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Jiminny (New)","depth":19,"bounds":{"left":0.14577793,"top":0.28172386,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Jiminny (New)","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Platform Team","depth":20,"bounds":{"left":0.09158909,"top":0.30407023,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Team","depth":23,"bounds":{"left":0.1022274,"top":0.31005585,"width":0.032247342,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":21,"bounds":{"left":0.15309176,"top":0.30726257,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Capture Team","depth":20,"bounds":{"left":0.09158909,"top":0.32960895,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Capture Team","depth":23,"bounds":{"left":0.1022274,"top":0.33559456,"width":0.03125,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":21,"bounds":{"left":0.15309176,"top":0.33280128,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Enterprise Stability Issues 🤕","depth":20,"bounds":{"left":0.09158909,"top":0.35514766,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Enterprise Stability Issues 🤕","depth":23,"bounds":{"left":0.1022274,"top":0.36113328,"width":0.050531916,"height":0.030726258},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":21,"bounds":{"left":0.15309176,"top":0.35834,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Processing Team","depth":20,"bounds":{"left":0.09158909,"top":0.38068634,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Processing Team","depth":23,"bounds":{"left":0.1022274,"top":0.386672,"width":0.038231384,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":21,"bounds":{"left":0.15309176,"top":0.38387868,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SE Kanban","depth":20,"bounds":{"left":0.09158909,"top":0.40622506,"width":0.06349734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SE Kanban","depth":23,"bounds":{"left":0.1022274,"top":0.4122107,"width":0.024102394,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":21,"bounds":{"left":0.15309176,"top":0.4094174,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More spaces","depth":18,"bounds":{"left":0.08759973,"top":0.43176377,"width":0.0674867,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More spaces","depth":21,"bounds":{"left":0.09823803,"top":0.43774942,"width":0.028756648,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Filters","depth":13,"bounds":{"left":0.08361037,"top":0.45730248,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Filters","depth":16,"bounds":{"left":0.09424867,"top":0.4632881,"width":0.013796543,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Filters","depth":14,"bounds":{"left":0.15309176,"top":0.46049482,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Filters","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Dashboards","depth":13,"bounds":{"left":0.08361037,"top":0.4828412,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Dashboards","depth":16,"bounds":{"left":0.09424867,"top":0.4888268,"width":0.026761968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create dashboard","depth":14,"bounds":{"left":0.15508644,"top":0.48603353,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create dashboard","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Dashboards","depth":14,"bounds":{"left":0.16240026,"top":0.48603353,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Dashboards","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Operations","depth":13,"bounds":{"left":0.08361037,"top":0.5083799,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Operations","depth":16,"bounds":{"left":0.09424867,"top":0.5143655,"width":0.02443484,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Operations","depth":14,"bounds":{"left":0.15309176,"top":0.51157224,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Operations","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Confluence , (opens new window)","depth":14,"bounds":{"left":0.08361037,"top":0.5434956,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Confluence","depth":18,"bounds":{"left":0.09424867,"top":0.5494813,"width":0.025764627,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", (opens new window)","depth":16,"bounds":{"left":0.08361037,"top":0.55706304,"width":0.04837101,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Teams , (opens new window)","depth":14,"bounds":{"left":0.08361037,"top":0.56903434,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Teams","depth":18,"bounds":{"left":0.09424867,"top":0.57501996,"width":0.014793883,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", (opens new window)","depth":16,"bounds":{"left":0.08361037,"top":0.5826017,"width":0.04837101,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"open menu","depth":15,"bounds":{"left":0.14378324,"top":0.57222664,"width":0.0039893617,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"open menu","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Customise sidebar","depth":13,"bounds":{"left":0.08361037,"top":0.60415006,"width":0.071476065,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Customise sidebar","depth":16,"bounds":{"left":0.09424867,"top":0.6101357,"width":0.04155585,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Resize side navigation panel","depth":14,"bounds":{"left":0.2109375,"top":0.0981644,"width":0.062333778,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Spaces","depth":14,"bounds":{"left":0.16738696,"top":0.09976058,"width":0.016289894,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Spaces","depth":16,"bounds":{"left":0.16738696,"top":0.102553874,"width":0.016289894,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":14,"bounds":{"left":0.18683511,"top":0.102553874,"width":0.0016622341,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny (New)","depth":14,"bounds":{"left":0.19165559,"top":0.09976058,"width":0.03174867,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny (New)","depth":16,"bounds":{"left":0.19165559,"top":0.102553874,"width":0.03174867,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Platform Team","depth":11,"bounds":{"left":0.16738696,"top":0.12210695,"width":0.045877658,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Platform Team","depth":12,"bounds":{"left":0.16738696,"top":0.12210695,"width":0.045877658,"height":0.019553073},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add people","depth":11,"bounds":{"left":0.21525931,"top":0.118914604,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add people","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":11,"bounds":{"left":0.2278923,"top":0.118914604,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Share","depth":11,"bounds":{"left":0.94148934,"top":0.118914604,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Automation","depth":11,"bounds":{"left":0.95478725,"top":0.118914604,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Give feedback","depth":11,"bounds":{"left":0.9680851,"top":0.118914604,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Give feedback","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Enter full screen","depth":11,"bounds":{"left":0.98138297,"top":0.118914604,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Enter full screen","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Summary","depth":14,"bounds":{"left":0.16472739,"top":0.14764565,"width":0.035904255,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summary","depth":16,"bounds":{"left":0.17603059,"top":0.15363128,"width":0.021276595,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Timeline","depth":14,"bounds":{"left":0.20196144,"top":0.14764565,"width":0.03357713,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Timeline","depth":16,"bounds":{"left":0.21326463,"top":0.15363128,"width":0.018949468,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Backlog","depth":14,"bounds":{"left":0.23686835,"top":0.14764565,"width":0.032413565,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Backlog","depth":16,"bounds":{"left":0.24817154,"top":0.15363128,"width":0.017785905,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Active sprints","depth":14,"bounds":{"left":0.2706117,"top":0.14764565,"width":0.045212764,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Active sprints","depth":16,"bounds":{"left":0.2819149,"top":0.15363128,"width":0.030585106,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Calendar","depth":14,"bounds":{"left":0.31715426,"top":0.14764565,"width":0.03474069,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Calendar","depth":16,"bounds":{"left":0.32845744,"top":0.15363128,"width":0.020113032,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Reports","depth":14,"bounds":{"left":0.35322472,"top":0.14764565,"width":0.031914894,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reports","depth":16,"bounds":{"left":0.3645279,"top":0.15363128,"width":0.017287234,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Testing Board","depth":14,"bounds":{"left":0.38646942,"top":0.14764565,"width":0.046708778,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Testing Board","depth":16,"bounds":{"left":0.3977726,"top":0.15363128,"width":0.030751329,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"List","depth":14,"bounds":{"left":0.43450797,"top":0.14764565,"width":0.02244016,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"List","depth":16,"bounds":{"left":0.44581118,"top":0.15363128,"width":0.0078125,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Forms","depth":14,"bounds":{"left":0.4582779,"top":0.14764565,"width":0.028590426,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Forms","depth":16,"bounds":{"left":0.46958113,"top":0.15363128,"width":0.013962766,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Components","depth":14,"bounds":{"left":0.48819813,"top":0.14764565,"width":0.04305186,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Components","depth":16,"bounds":{"left":0.49950132,"top":0.15363128,"width":0.028424202,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Development","depth":14,"bounds":{"left":0.5325798,"top":0.14764565,"width":0.044049203,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Development","depth":16,"bounds":{"left":0.54388297,"top":0.15363128,"width":0.029421542,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":14,"bounds":{"left":0.57795876,"top":0.14764565,"width":0.02642952,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":16,"bounds":{"left":0.58926195,"top":0.15363128,"width":0.011801862,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Security","depth":14,"bounds":{"left":0.6057181,"top":0.14764565,"width":0.03324468,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Security","depth":16,"bounds":{"left":0.61702126,"top":0.15363128,"width":0.01861702,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Releases","depth":14,"bounds":{"left":0.6402925,"top":0.14764565,"width":0.034574468,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Releases","depth":16,"bounds":{"left":0.6515958,"top":0.15363128,"width":0.019946808,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Deployments","depth":14,"bounds":{"left":0.6761968,"top":0.14764565,"width":0.043882977,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Deployments","depth":16,"bounds":{"left":0.6875,"top":0.15363128,"width":0.02925532,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Archived work items","depth":14,"bounds":{"left":0.72140956,"top":0.14764565,"width":0.06017287,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Archived work items","depth":16,"bounds":{"left":0.73271275,"top":0.15363128,"width":0.045545213,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Docs","depth":14,"bounds":{"left":0.78291225,"top":0.14764565,"width":0.025930852,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Docs","depth":16,"bounds":{"left":0.79421544,"top":0.15363128,"width":0.011303191,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Shortcuts","depth":15,"bounds":{"left":0.81017286,"top":0.14764565,"width":0.045545213,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Shortcuts","depth":16,"bounds":{"left":0.8228058,"top":0.15363128,"width":0.021609042,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Slack integration","depth":14,"bounds":{"left":0.85704786,"top":0.14764565,"width":0.05319149,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Slack integration","depth":16,"bounds":{"left":0.86835104,"top":0.15363128,"width":0.03723404,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Reporting Center","depth":14,"bounds":{"left":0.9115692,"top":0.14764565,"width":0.053856384,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reporting Center","depth":16,"bounds":{"left":0.92287236,"top":0.15363128,"width":0.037898935,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Add to navigation","depth":12,"bounds":{"left":0.96675533,"top":0.15083799,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"As you type to search or apply filters, the board updates with work items to match.","depth":12,"bounds":{"left":0.16738696,"top":0.20271349,"width":0.18134974,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search on current page","depth":12,"bounds":{"left":0.17569813,"top":0.188747,"width":0.050531916,"height":0.026735835},"on_screen":true,"placeholder":"Search board","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Filter by assignee","depth":13,"bounds":{"left":0.23121676,"top":0.19034317,"width":0.03873005,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Filter assignees by Lukas Kovalik","depth":12,"bounds":{"left":0.23254654,"top":0.18914606,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Filter assignees by Aneliya Angelova","depth":12,"bounds":{"left":0.24052526,"top":0.18914606,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Filter assignees by Nikolay Ivanov","depth":12,"bounds":{"left":0.24850398,"top":0.18914606,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Filter assignees by Nikolay Nikolov","depth":12,"bounds":{"left":0.25648272,"top":0.18914606,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Filter assignees by Steliyan Georgiev","depth":12,"bounds":{"left":0.26446143,"top":0.18914606,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Filter assignees by Unassigned","depth":12,"bounds":{"left":0.27244017,"top":0.18914606,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Epic","depth":14,"bounds":{"left":0.28440824,"top":0.18914606,"width":0.0234375,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Epic","depth":17,"bounds":{"left":0.2883976,"top":0.19513169,"width":0.009474734,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Type","depth":14,"bounds":{"left":0.31050533,"top":0.18914606,"width":0.025099734,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Type","depth":17,"bounds":{"left":0.31449467,"top":0.19513169,"width":0.011136968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Quick filters","depth":14,"bounds":{"left":0.3382646,"top":0.18914606,"width":0.040724736,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Quick filters","depth":17,"bounds":{"left":0.34225398,"top":0.19513169,"width":0.026761968,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Complete sprint","depth":11,"bounds":{"left":0.85106385,"top":0.18914606,"width":0.04338431,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Complete sprint","depth":13,"bounds":{"left":0.8550532,"top":0.19513169,"width":0.035405584,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Sprint details","depth":11,"bounds":{"left":0.8971077,"top":0.18914606,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Sprint details","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Group by Queries","depth":11,"bounds":{"left":0.9104056,"top":0.18914606,"width":0.041722074,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Group","depth":14,"bounds":{"left":0.914395,"top":0.19513169,"width":0.013796543,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":": Queries","depth":14,"bounds":{"left":0.9281915,"top":0.19513169,"width":0.019946808,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Sprint insights","depth":11,"bounds":{"left":0.95478725,"top":0.18914606,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Sprint insights","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"View settings","depth":11,"bounds":{"left":0.9680851,"top":0.18914606,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"View settings","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions","depth":11,"bounds":{"left":0.98138297,"top":0.18914606,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Ready To Be Merged (1 work item)","depth":17,"bounds":{"left":0.16938165,"top":0.23942538,"width":0.8159907,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Ready To Be Merged","depth":19,"bounds":{"left":0.17869017,"top":0.2406225,"width":0.045877658,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(1 work item)","depth":19,"bounds":{"left":0.22722739,"top":0.2414206,"width":0.024268618,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Ready For DEV","depth":18,"bounds":{"left":0.1740359,"top":0.2753392,"width":0.03158245,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"READY FOR DEV","depth":20,"bounds":{"left":0.1740359,"top":0.27573824,"width":0.03158245,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"In DEV","depth":18,"bounds":{"left":0.2917221,"top":0.2753392,"width":0.013962766,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"IN DEV","depth":20,"bounds":{"left":0.2917221,"top":0.27573824,"width":0.013962766,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Code Review","depth":18,"bounds":{"left":0.40940824,"top":0.2753392,"width":0.028424202,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CODE REVIEW","depth":20,"bounds":{"left":0.40940824,"top":0.27573824,"width":0.028424202,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create work item in Code Review","depth":18,"bounds":{"left":0.40575132,"top":0.3056664,"width":0.11170213,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":21,"bounds":{"left":0.41705453,"top":0.31324822,"width":0.014793883,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Blocked","depth":18,"bounds":{"left":0.5270944,"top":0.2753392,"width":0.018783245,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BLOCKED","depth":20,"bounds":{"left":0.5270944,"top":0.27573824,"width":0.018783245,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create work item in Blocked","depth":18,"bounds":{"left":0.5234375,"top":0.3056664,"width":0.11186835,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":21,"bounds":{"left":0.5347407,"top":0.31324822,"width":0.014960106,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"QA","depth":18,"bounds":{"left":0.6449468,"top":0.2753392,"width":0.0056515955,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QA","depth":20,"bounds":{"left":0.6449468,"top":0.27573824,"width":0.0056515955,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create work item in QA","depth":18,"bounds":{"left":0.6412899,"top":0.3056664,"width":0.11170213,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":21,"bounds":{"left":0.6525931,"top":0.31324822,"width":0.014793883,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"PO Acceptance","depth":18,"bounds":{"left":0.76263297,"top":0.2753392,"width":0.03357713,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PO ACCEPTANCE","depth":20,"bounds":{"left":0.76263297,"top":0.27573824,"width":0.03357713,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create work item in PO Acceptance","depth":18,"bounds":{"left":0.75897604,"top":0.3056664,"width":0.11170213,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":21,"bounds":{"left":0.7702792,"top":0.31324822,"width":0.014793883,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Deploy","depth":18,"bounds":{"left":0.8803192,"top":0.2753392,"width":0.026263298,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DEPLOY","depth":20,"bounds":{"left":0.8803192,"top":0.27573824,"width":0.015625,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":23,"bounds":{"left":0.90043217,"top":0.27573824,"width":0.0016622341,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"JY-20725 [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts. Use the enter key to load the work item.","depth":18,"bounds":{"left":0.87666225,"top":0.3056664,"width":0.11170213,"height":0.1217079},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":true,"is_selected":false},{"role":"AXStaticText","text":"[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts","depth":20,"bounds":{"left":0.8806516,"top":0.31644055,"width":0.08809841,"height":0.029928172},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit summary","depth":22,"bounds":{"left":0.95761305,"top":0.33040702,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Edit summary","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Platform Stability, Edit Parent","depth":19,"bounds":{"left":0.8806516,"top":0.35355148,"width":0.044714097,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"PLATFORM STABILITY","depth":23,"bounds":{"left":0.8819814,"top":0.3547486,"width":0.042054523,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ready To Merge","depth":19,"bounds":{"left":0.8806516,"top":0.37430167,"width":0.035904255,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20725","depth":19,"bounds":{"left":0.88730055,"top":0.40023944,"width":0.01861702,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725","depth":21,"bounds":{"left":0.88730055,"top":0.40063846,"width":0.01861702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1.5","depth":19,"bounds":{"left":0.9506317,"top":0.40063846,"width":0.004986702,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"pull request","depth":18,"bounds":{"left":0.95910907,"top":0.39704707,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Assignee: Aneliya Angelova","depth":19,"bounds":{"left":0.9757314,"top":0.39704707,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sprint (18 work items)","depth":17,"bounds":{"left":0.16938165,"top":0.46368715,"width":0.8159907,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Sprint","depth":19,"bounds":{"left":0.17869017,"top":0.46488428,"width":0.012965426,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(18 work items)","depth":19,"bounds":{"left":0.19431517,"top":0.46568236,"width":0.028756648,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Ready For DEV","depth":18,"bounds":{"left":0.1740359,"top":0.49960095,"width":0.042220745,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"READY FOR DEV","depth":20,"bounds":{"left":0.1740359,"top":0.5,"width":0.03158245,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4","depth":23,"bounds":{"left":0.2096077,"top":0.5,"width":0.0026595744,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"JY-20676 Notify the user if a Panorama prompts is deleted but is used in AJ Report. Use the enter key to load the work item.","depth":18,"bounds":{"left":0.17037898,"top":0.52992815,"width":0.11170213,"height":0.121308856},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
-5612840006463302981
|
5967633073310127286
|
visual_change
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Close tab
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
Main Content
Main Content
Space navigation
Space navigation
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
1 Notification
1 Notification
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Dashboards
Dashboards
Create dashboard
Create dashboard
More actions for Dashboards
More actions for Dashboards
Operations
Operations
More actions for Operations
More actions for Operations
Confluence , (opens new window)
Confluence
, (opens new window)
Teams , (opens new window)
Teams
, (opens new window)
open menu
open menu
Customise sidebar
Customise sidebar
Resize side navigation panel
Spaces
Spaces
/
Jiminny (New)
Jiminny (New)
Platform Team
Platform Team
Add people
Add people
Board actions
Board actions
Share
Automation
Give feedback
Give feedback
Enter full screen
Enter full screen
Summary
Summary
Timeline
Timeline
Backlog
Backlog
Active sprints
Active sprints
Calendar
Calendar
Reports
Reports
Testing Board
Testing Board
List
List
Forms
Forms
Components
Components
Development
Development
Code
Code
Security
Security
Releases
Releases
Deployments
Deployments
Archived work items
Archived work items
Docs
Docs
Shortcuts
Shortcuts
Slack integration
Slack integration
Reporting Center
Reporting Center
Add to navigation
As you type to search or apply filters, the board updates with work items to match.
Search on current page
Filter by assignee
Filter assignees by Lukas Kovalik
Filter assignees by Aneliya Angelova
Filter assignees by Nikolay Ivanov
Filter assignees by Nikolay Nikolov
Filter assignees by Steliyan Georgiev
Filter assignees by Unassigned
Epic
Epic
Type
Type
Quick filters
Quick filters
Complete sprint
Complete sprint
Sprint details
Sprint details
Group by Queries
Group
: Queries
Sprint insights
Sprint insights
View settings
View settings
More actions
More actions
Ready To Be Merged (1 work item)
Ready To Be Merged
(1 work item)
Ready For DEV
READY FOR DEV
In DEV
IN DEV
Code Review
CODE REVIEW
Create work item in Code Review
Create
Blocked
BLOCKED
Create work item in Blocked
Create
QA
QA
Create work item in QA
Create
PO Acceptance
PO ACCEPTANCE
Create work item in PO Acceptance
Create
Deploy
DEPLOY
1
JY-20725 [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts. Use the enter key to load the work item.
[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts
Edit summary
Edit summary
Platform Stability, Edit Parent
PLATFORM STABILITY
Ready To Merge
JY-20725
JY-20725
1.5
pull request
Assignee: Aneliya Angelova
Sprint (18 work items)
Sprint
(18 work items)
Ready For DEV
READY FOR DEV
4
JY-20676 Notify the user if a Panorama prompts is deleted but is used in AJ Report. Use the enter key to load the work item....
|
NULL
|
NULL
|
NULL
|
NULL
|
|
55626
|
1930
|
0
|
2026-05-19T06:31:47.762731+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-19/1779 /Users/lukas/.screenpipe/data/data/2026-05-19/1779172307762_m1.jpg...
|
Firefox
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira — Work...
|
1
|
jiminny.atlassian.net/jira/software/c/projects/JY/ jiminny.atlassian.net/jira/software/c/projects/JY/boards/37...
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Close tab
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
Main Content
Main Content
Space navigation
Space navigation
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
1 Notification
1 Notification
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Dashboards
Dashboards
Create dashboard
Create dashboard
More actions for Dashboards
More actions for Dashboards
Operations
Operations
More actions for Operations
More actions for Operations
Confluence , (opens new window)
Confluence
, (opens new window)
Teams , (opens new window)
Teams
, (opens new window)
open menu
open menu
Customise sidebar
Customise sidebar
Resize side navigation panel
Spaces
Spaces
/
Jiminny (New)
Jiminny (New)
Platform Team
Platform Team
Add people
Add people
Board actions
Board actions
Share
Automation
Give feedback
Give feedback
Enter full screen
Enter full screen
Summary
Summary
Timeline
Timeline
Backlog
Backlog
Active sprints
Active sprints
Calendar
Calendar
Reports
Reports
Testing Board
Testing Board
List
List
Forms
Forms
Components
Components
Development
Development
Code
Code
Security
Security
Releases
Releases
Deployments
Deployments
Archived work items
Archived work items
Docs
Docs
Shortcuts
Shortcuts
Slack integration
Slack integration
Reporting Center
Reporting Center
Add to navigation
As you type to search or apply filters, the board updates with work items to match.
Search on current page
Filter by assignee
Filter assignees by Lukas Kovalik
Filter assignees by Aneliya Angelova
Filter assignees by Nikolay Ivanov
Filter assignees by Nikolay Nikolov
Filter assignees by Steliyan Georgiev
Filter assignees by Unassigned
Epic
Epic
Type
Type...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to:","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Top Bar","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Top Bar","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sidebar","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sidebar","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Main Content","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Main Content","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Space navigation","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Space navigation","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse sidebar [","depth":10,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse sidebar [","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Switch sites or apps","depth":11,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Switch sites or apps","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to your Jira homepage","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Search, press enter to navigate to advanced search with your text query","depth":12,"on_screen":true,"help_text":"","placeholder":"Search","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Create","depth":11,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Rovo Ask Rovo","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Rovo","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"1 Notification","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1 Notification","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Help","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Help","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Settings","depth":13,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Settings","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"lukas.kovalik@jiminny.com","depth":13,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas.kovalik@jiminny.com","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"For you","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"For you","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Recent","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Recent","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Starred","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Starred","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Apps","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Apps","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Apps","depth":14,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Apps","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Spaces","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Spaces","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create space","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create space","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for spaces","depth":14,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for spaces","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Recent","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Service-Desk","depth":18,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Service-Desk","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Service-Desk","depth":19,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Service-Desk","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny (New)","depth":18,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny (New)","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Jiminny (New)","depth":19,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXMenuButton","text":"Create board","depth":19,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create board","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Jiminny (New)","depth":19,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Jiminny (New)","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Platform Team","depth":20,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Team","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":21,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Capture Team","depth":20,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Capture Team","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":21,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Enterprise Stability Issues 🤕","depth":20,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Enterprise Stability Issues 🤕","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":21,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Processing Team","depth":20,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Processing Team","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":21,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SE Kanban","depth":20,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SE Kanban","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":21,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More spaces","depth":18,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More spaces","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Filters","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Filters","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Filters","depth":14,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Filters","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Dashboards","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Dashboards","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create dashboard","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create dashboard","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Dashboards","depth":14,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Dashboards","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Operations","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Operations","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Operations","depth":14,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Operations","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Confluence , (opens new window)","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Confluence","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", (opens new window)","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Teams , (opens new window)","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Teams","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", (opens new window)","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"open menu","depth":15,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"open menu","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Customise sidebar","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Customise sidebar","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Resize side navigation panel","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Spaces","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Spaces","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny (New)","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny (New)","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Platform Team","depth":11,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Platform Team","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add people","depth":11,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add people","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":11,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Share","depth":11,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Automation","depth":11,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Give feedback","depth":11,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Give feedback","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Enter full screen","depth":11,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Enter full screen","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Summary","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summary","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Timeline","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Timeline","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Backlog","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Backlog","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Active sprints","depth":14,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Active sprints","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Calendar","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Calendar","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Reports","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reports","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Testing Board","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Testing Board","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"List","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"List","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Forms","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Forms","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Components","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Components","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Development","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Development","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Security","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Security","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Releases","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Releases","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Deployments","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Deployments","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Archived work items","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Archived work items","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Docs","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Docs","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Shortcuts","depth":15,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Shortcuts","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Slack integration","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Slack integration","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Reporting Center","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reporting Center","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Add to navigation","depth":12,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"As you type to search or apply filters, the board updates with work items to match.","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search on current page","depth":12,"on_screen":true,"placeholder":"Search board","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Filter by assignee","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Filter assignees by Lukas Kovalik","depth":12,"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Filter assignees by Aneliya Angelova","depth":12,"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Filter assignees by Nikolay Ivanov","depth":12,"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Filter assignees by Nikolay Nikolov","depth":12,"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Filter assignees by Steliyan Georgiev","depth":12,"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Filter assignees by Unassigned","depth":12,"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Epic","depth":14,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Epic","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Type","depth":14,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Type","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-3669805594074954025
|
4815841298395419814
|
click
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Close tab
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
Main Content
Main Content
Space navigation
Space navigation
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
1 Notification
1 Notification
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Dashboards
Dashboards
Create dashboard
Create dashboard
More actions for Dashboards
More actions for Dashboards
Operations
Operations
More actions for Operations
More actions for Operations
Confluence , (opens new window)
Confluence
, (opens new window)
Teams , (opens new window)
Teams
, (opens new window)
open menu
open menu
Customise sidebar
Customise sidebar
Resize side navigation panel
Spaces
Spaces
/
Jiminny (New)
Jiminny (New)
Platform Team
Platform Team
Add people
Add people
Board actions
Board actions
Share
Automation
Give feedback
Give feedback
Enter full screen
Enter full screen
Summary
Summary
Timeline
Timeline
Backlog
Backlog
Active sprints
Active sprints
Calendar
Calendar
Reports
Reports
Testing Board
Testing Board
List
List
Forms
Forms
Components
Components
Development
Development
Code
Code
Security
Security
Releases
Releases
Deployments
Deployments
Archived work items
Archived work items
Docs
Docs
Shortcuts
Shortcuts
Slack integration
Slack integration
Reporting Center
Reporting Center
Add to navigation
As you type to search or apply filters, the board updates with work items to match.
Search on current page
Filter by assignee
Filter assignees by Lukas Kovalik
Filter assignees by Aneliya Angelova
Filter assignees by Nikolay Ivanov
Filter assignees by Nikolay Nikolov
Filter assignees by Steliyan Georgiev
Filter assignees by Unassigned
Epic
Epic
Type
Type...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
55627
|
1931
|
1
|
2026-05-19T06:32:15.238765+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-19/1779 /Users/lukas/.screenpipe/data/data/2026-05-19/1779172335238_m2.jpg...
|
Firefox
|
Location Logger — Personal
|
1
|
location-tracker.lakylak.xyz/dashboard
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Getting Started DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Getting Started · AFFiNE
Getting Started · AFFiNE
Screenpipe — Archive
Screenpipe — Archive
Download screenpipe — get started in minutes
Download screenpipe — get started in minutes
Self-Hosted Software and Apps
Self-Hosted Software and Apps
New Tab
New Tab
[LakyLak] A security advisory on axios affects at least one of your repositories - [EMAIL] - Gmail
[LakyLak] A security advisory on axios affects at least one of your repositories - [EMAIL] - Gmail
Завеждане на щета онлайн | Euroins
Завеждане на щета онлайн | Euroins
Photos - Google Photos
Photos - Google Photos
Kontakt | Veľvyslanectvo Slovenskej republiky v Sofii
Kontakt | Veľvyslanectvo Slovenskej republiky v Sofii
Settings
Settings
Nginx Proxy Manager
Nginx Proxy Manager
Location Logger
Location Logger
Close tab
Providers - Admin - authentik
Providers - Admin - authentik
Recent love experiences - Claude
Recent love experiences - Claude
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Location Logger
Location Logger
Logout
←
Yesterday
→
Today
Yesterday
7d
30d
From
18
/
05
/
2026
,
00
:
00
Calendar
To
19
/
05
/
2026
,
00
:
00
Calendar
Movement
Load
Zoom in
Zoom out
Leaflet
Leaflet
©
OSM
OSM
POINTS
995
690 shown
DISTANCE
9.5 km
raw: 15.2 km
TOP MODE
cycling
QUALITY
93%
Stationary
Walking
Running
Cycling
Driving
Fast
Showing
690
of 995 points (305 redundant points hidden)
LOCATIONS
AREAS
ADMIN
23:08:11
STATIONARY
18 May
42.66339, 23.28091 · 0.0m
22:44:11
STATIONARY
18 May
42.66339, 23.28091 · 0.0m
22:38:07
STATIONARY
18 May
42.66344, 23.28083 · 0.0m
22:32:07
STATIONARY
18 May
42.66339, 23.28091 · 0.0m
21:43:43
STATIONARY
18 May
42.66339, 23.28091 · 0.0m
21:37:43
STATIONARY
18 May
42.66344, 23.28083 · 0.0m
21:31:45
STATIONARY
18 May
42.66339, 23.28091 · 0.0m
20:43:45
STATIONARY
18 May
42.66339, 23.28091 · 0.0m
20:37:44
STATIONARY
18 May
42.66344, 23.28083 · 0.0m
20:31:46
STATIONARY
18 May
42.66339, 23.28091 · 0.0m
18:13:46
STATIONARY
18 May
42.66339, 23.28091 · 0.0m
18:07:45
STATIONARY
18 May
42.66344, 23.28083 · 0.0m
18:01:43
STATIONARY
18 May
42.66339, 23.28091 · 2.1m
17:54:24
WALKING
18 May
42.66341, 23.28104 · 5.2m
17:54:12
WALKING
18 May
42.66344, 23.28084 · 8.6m
17:53:29
WALKING
18 May
42.66348, 23.28064 · 10.0m
17:53:15
WALKING
18 May
42.66351, 23.28047 · 6.3m
17:53:09
WALKING
18 May
42.66344, 23.28038 · 7.3m
17:53:04
WALKING
18 May
42.66335, 23.28044 · 37.1m
17:51:46
RUNNING
18 May
42.66331, 23.28094 · 7.8m
17:51:41
CYCLING
18 May
42.66331, 23.28080 · 7.6m
17:51:38
CYCLING
18 May
42.66328, 23.28068 · 7.8m
17:51:35
CYCLING
18 May
42.66319, 23.28060 · 7.0m
17:51:33
CYCLING
18 May
42.66310, 23.28057 · 9.4m
17:51:31
CYCLING
18 May
42.66299, 23.28054 · 9.8m
17:51:29
CYCLING
18 May
42.66288, 23.28050 · 10.0m
17:51:27
CYCLING
18 May
42.66277, 23.28047 · 10.3m
17:51:25
CYCLING
18 May
42.66265, 23.28043 · 12.2m
17:51:22
CYCLING
18 May
42.66253, 23.28036 · 7.8m
17:51:20
CYCLING
18 May
42.66243, 23.28031 · 10.9m
17:51:16
DRIVING
18 May
42.66221, 23.28011 · 10.5m
17:51:14
CYCLING
18 May
42.66211, 23.27999 · 9.3m
17:51:12
CYCLING
18 May
42.66203, 23.27989 · 7.0m
17:51:10
RUNNING
18 May
42.66195, 23.27981 · 6.9m
17:51:06
CYCLING
18 May
42.66189, 23.27970 · 7.9m
17:51:03
CYCLING
18 May
42.66193, 23.27956 · 7.5m
17:51:01
CYCLING
18 May
42.66197, 23.27943 · 9.9m
17:50:59
CYCLING
18 May
42.66202, 23.27929 · 9.8m
17:50:57
CYCLING
18 May
42.66206, 23.27915 · 9.5m
17:50:55
CYCLING
18 May
42.66210, 23.27901 · 9.6m
17:50:53
CYCLING
18 May
42.66215, 23.27887 · 8.9m
17:50:51
CYCLING
18 May
42.66219, 23.27874 · 8.0m
17:50:49
CYCLING
18 May
42.66222, 23.27861 · 11.6m
17:50:46
CYCLING
18 May
42.66227, 23.27845 · 9.7m
17:50:41
RUNNING
18 May
42.66229, 23.27829 · 9.2m
17:50:38
CYCLING
18 May
42.66231, 23.27815 · 8.6m
17:50:36
CYCLING
18 May
42.66235, 23.27802 · 9.9m
17:50:14
DRIVING
18 May
42.66280, 23.27594 · 12.4m
17:50:12
CYCLING
18 May
42.66284, 23.27576 · 9.1m
17:50:10
CYCLING
18 May
42.66286, 23.27562 · 7.5m
17:50:08
CYCLING
18 May
42.66289, 23.27550 · 7.7m
17:49:58
DRIVING
18 May
42.66305, 23.27462 · 11.0m
17:49:56
CYCLING
18 May
42.66309, 23.27446 · 11.0m
17:49:53
CYCLING
18 May
42.66308, 23.27429 · 8.3m
17:49:51
CYCLING
18 May
42.66299, 23.27425 · 20.1m
17:49:35
CYCLING
18 May
42.66279, 23.27417 · 9.8m
17:49:32
CYCLING
18 May
42.66268, 23.27412 · 11.3m
17:49:29
CYCLING
18 May
42.66256, 23.27406 · 9.4m
17:49:26
CYCLING
18 May
42.66246, 23.27402 · 8.9m
17:49:23
CYCLING
18 May
42.66236, 23.27397 · 8.2m
17:49:20
CYCLING
18 May
42.66226, 23.27393 · 8.3m
17:49:17
CYCLING
18 May
42.66217, 23.27389 · 7.4m
17:49:14
RUNNING
18 May
42.66208, 23.27385 · 7.4m
17:49:10
RUNNING
18 May
42.66200, 23.27381 · 9.1m
17:48:51
RUNNING
18 May
42.66190, 23.27375 · 9.0m
17:48:47
RUNNING
18 May
42.66180, 23.27370 · 9.5m
17:48:43
CYCLING
18 May
42.66169, 23.27366 · 7.5m
17:48:40
CYCLING
18 May
42.66160, 23.27361 · 8.4m
17:48:37
CYCLING
18 May
42.66151, 23.27357 · 10.0m
17:48:15
WALKING
18 May
42.66139, 23.27353 · 7.4m
17:47:52
CYCLING
18 May
42.66131, 23.27349 · 7.6m
17:47:49
CYCLING
18 May
42.66122, 23.27345 · 8.5m
17:47:46
CYCLING
18 May
42.66112, 23.27341 · 9.9m
17:47:42
WALKING
18 May
42.66101, 23.27336 · 8.2m
17:47:33
RUNNING
18 May
42.66092, 23.27332 · 8.0m
17:47:17
WALKING
18 May
42.66083, 23.27328 · 7.4m
17:47:04
RUNNING
18 May
42.66074, 23.27324 · 8.9m
17:47:00
CYCLING
18 May
42.66064, 23.27320 · 7.2m
17:46:57
RUNNING
18 May
42.66055, 23.27315 · 10.2m
17:46:42
WALKING
18 May
42.66045, 23.27309 · 7.3m
17:46:32
RUNNING
18 May
42.66036, 23.27305 · 9.2m
17:46:28
RUNNING
18 May
42.66026, 23.27300 · 7.2m
17:46:24
RUNNING
18 May
42.66018, 23.27295 · 12.7m
17:46:18
RUNNING
18 May
42.66004, 23.27291 · 7.3m
17:45:49
RUNNING...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.5,"top":0.0518755,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"bounds":{"left":0.51329786,"top":0.06304868,"width":0.036901597,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Getting Started · AFFiNE","depth":4,"bounds":{"left":0.5,"top":0.08459697,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Getting Started · AFFiNE","depth":5,"bounds":{"left":0.51329786,"top":0.09577015,"width":0.04255319,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"bounds":{"left":0.5,"top":0.11731844,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"bounds":{"left":0.51329786,"top":0.12849163,"width":0.037898935,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Download screenpipe — get started in minutes","depth":4,"bounds":{"left":0.5,"top":0.15003991,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Download screenpipe — get started in minutes","depth":5,"bounds":{"left":0.51329786,"top":0.16121309,"width":0.0809508,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Self-Hosted Software and Apps","depth":4,"bounds":{"left":0.5,"top":0.18276137,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Self-Hosted Software and Apps","depth":5,"bounds":{"left":0.51329786,"top":0.19393456,"width":0.054853722,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.5,"top":0.21548285,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.51329786,"top":0.22665602,"width":0.014960106,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[LakyLak] A security advisory on axios affects at least one of your repositories - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.5,"top":0.2482043,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[LakyLak] A security advisory on axios affects at least one of your repositories - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.51329786,"top":0.25937748,"width":0.19581117,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Завеждане на щета онлайн | Euroins","depth":4,"bounds":{"left":0.5,"top":0.28092578,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Завеждане на щета онлайн | Euroins","depth":5,"bounds":{"left":0.51329786,"top":0.29209897,"width":0.0653258,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Photos - Google Photos","depth":4,"bounds":{"left":0.5,"top":0.31364724,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Photos - Google Photos","depth":5,"bounds":{"left":0.51329786,"top":0.32482043,"width":0.04138963,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Kontakt | Veľvyslanectvo Slovenskej republiky v Sofii","depth":4,"bounds":{"left":0.5,"top":0.3463687,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Kontakt | Veľvyslanectvo Slovenskej republiky v Sofii","depth":5,"bounds":{"left":0.51329786,"top":0.3575419,"width":0.091090426,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Settings","depth":4,"bounds":{"left":0.5,"top":0.3790902,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":5,"bounds":{"left":0.51329786,"top":0.39026338,"width":0.014295213,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Nginx Proxy Manager","depth":4,"bounds":{"left":0.5,"top":0.41181165,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Nginx Proxy Manager","depth":5,"bounds":{"left":0.51329786,"top":0.42298484,"width":0.036901597,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Location Logger","depth":4,"bounds":{"left":0.5,"top":0.4445331,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Location Logger","depth":5,"bounds":{"left":0.51329786,"top":0.4557063,"width":0.028091755,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.55651593,"top":0.4517159,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Providers - Admin - authentik","depth":4,"bounds":{"left":0.5,"top":0.4772546,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Providers - Admin - authentik","depth":5,"bounds":{"left":0.51329786,"top":0.4884278,"width":0.05119681,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Recent love experiences - Claude","depth":4,"bounds":{"left":0.5,"top":0.509976,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Recent love experiences - Claude","depth":5,"bounds":{"left":0.51329786,"top":0.5211492,"width":0.058344416,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.5028258,"top":0.5442937,"width":0.06333112,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.5028258,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.51379657,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.5249335,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.53607047,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.5472075,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Location Logger","depth":8,"bounds":{"left":0.57413566,"top":0.06384677,"width":0.040724736,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Location Logger","depth":9,"bounds":{"left":0.57413566,"top":0.06384677,"width":0.040724736,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Logout","depth":8,"bounds":{"left":0.97423536,"top":0.059856344,"width":0.02044548,"height":0.023144454},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"←","depth":8,"bounds":{"left":0.57413566,"top":0.10215483,"width":0.011635638,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Yesterday","depth":9,"bounds":{"left":0.5905917,"top":0.10654429,"width":0.019614361,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"→","depth":8,"bounds":{"left":0.6150266,"top":0.10215483,"width":0.011635638,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Today","depth":8,"bounds":{"left":0.6293218,"top":0.10175578,"width":0.019115692,"height":0.021548284},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Yesterday","depth":8,"bounds":{"left":0.6491024,"top":0.10175578,"width":0.026928192,"height":0.021548284},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"7d","depth":8,"bounds":{"left":0.67669547,"top":0.10175578,"width":0.011968086,"height":0.021548284},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"30d","depth":8,"bounds":{"left":0.68932843,"top":0.10175578,"width":0.01512633,"height":0.021548284},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"From","depth":9,"bounds":{"left":0.70711434,"top":0.10654429,"width":0.009640957,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18","depth":10,"bounds":{"left":0.72273934,"top":0.10614525,"width":0.0051529254,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":9,"bounds":{"left":0.72888964,"top":0.10614525,"width":0.0026595744,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"05","depth":10,"bounds":{"left":0.73254657,"top":0.10614525,"width":0.0051529254,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":9,"bounds":{"left":0.7386968,"top":0.10614525,"width":0.0026595744,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":10,"bounds":{"left":0.74235374,"top":0.10614525,"width":0.010305851,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":9,"bounds":{"left":0.7536569,"top":0.10614525,"width":0.005319149,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"00","depth":10,"bounds":{"left":0.7599734,"top":0.10614525,"width":0.0051529254,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":":","depth":9,"bounds":{"left":0.76612365,"top":0.10614525,"width":0.0026595744,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"00","depth":10,"bounds":{"left":0.7697806,"top":0.10614525,"width":0.0051529254,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":9,"bounds":{"left":0.7662899,"top":0.10694334,"width":0.0056515955,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"To","depth":9,"bounds":{"left":0.77892286,"top":0.10654429,"width":0.004488032,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"19","depth":10,"bounds":{"left":0.789395,"top":0.10614525,"width":0.0051529254,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":9,"bounds":{"left":0.7955452,"top":0.10614525,"width":0.0026595744,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"05","depth":10,"bounds":{"left":0.79920214,"top":0.10614525,"width":0.0051529254,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":9,"bounds":{"left":0.8053524,"top":0.10614525,"width":0.0026595744,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":10,"bounds":{"left":0.8090093,"top":0.10614525,"width":0.010472074,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":9,"bounds":{"left":0.82047874,"top":0.10614525,"width":0.0051529254,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"00","depth":10,"bounds":{"left":0.826629,"top":0.10614525,"width":0.0051529254,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":":","depth":9,"bounds":{"left":0.8327792,"top":0.10614525,"width":0.0026595744,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"00","depth":10,"bounds":{"left":0.83643615,"top":0.10614525,"width":0.0051529254,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":9,"bounds":{"left":0.83294547,"top":0.10694334,"width":0.0056515955,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Movement","depth":9,"bounds":{"left":0.84557843,"top":0.10654429,"width":0.019614361,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Load","depth":8,"bounds":{"left":0.907746,"top":0.10055866,"width":0.020777926,"height":0.023942538},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Zoom in","depth":10,"bounds":{"left":0.5728058,"top":0.14365523,"width":0.009973404,"height":0.023942538},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Zoom out","depth":10,"bounds":{"left":0.5728058,"top":0.16759777,"width":0.009973404,"height":0.023942538},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Leaflet","depth":11,"bounds":{"left":0.8450798,"top":0.9876297,"width":0.017121011,"height":0.011572227},"on_screen":true,"help_text":"A JavaScript library for interactive maps","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Leaflet","depth":12,"bounds":{"left":0.8490692,"top":0.9876297,"width":0.013131649,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"©","depth":11,"bounds":{"left":0.86419547,"top":0.9876297,"width":0.005319149,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"OSM","depth":11,"bounds":{"left":0.86951464,"top":0.9876297,"width":0.009142287,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"OSM","depth":12,"bounds":{"left":0.86951464,"top":0.9876297,"width":0.009142287,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"POINTS","depth":11,"bounds":{"left":0.88863033,"top":0.14365523,"width":0.013630319,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"995","depth":11,"bounds":{"left":0.88962764,"top":0.15522745,"width":0.011635638,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"690 shown","depth":11,"bounds":{"left":0.88580453,"top":0.17318435,"width":0.019281914,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DISTANCE","depth":11,"bounds":{"left":0.91638964,"top":0.14365523,"width":0.017952127,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9.5 km","depth":11,"bounds":{"left":0.9155585,"top":0.15522745,"width":0.019614361,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"raw: 15.2 km","depth":11,"bounds":{"left":0.9175532,"top":0.17318435,"width":0.015625,"height":0.021548284},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"TOP MODE","depth":11,"bounds":{"left":0.94581115,"top":0.14365523,"width":0.018949468,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"cycling","depth":11,"bounds":{"left":0.94498,"top":0.15522745,"width":0.020611702,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QUALITY","depth":11,"bounds":{"left":0.9773936,"top":0.14365523,"width":0.015625,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"93%","depth":11,"bounds":{"left":0.97839093,"top":0.15522745,"width":0.013630319,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Stationary","depth":12,"bounds":{"left":0.8902925,"top":0.21149242,"width":0.017785905,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Walking","depth":12,"bounds":{"left":0.91638964,"top":0.21149242,"width":0.013796543,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Running","depth":12,"bounds":{"left":0.93849736,"top":0.21149242,"width":0.01412899,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Cycling","depth":12,"bounds":{"left":0.9609375,"top":0.21149242,"width":0.012965426,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Driving","depth":12,"bounds":{"left":0.9822141,"top":0.21149242,"width":0.012300532,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fast","depth":12,"bounds":{"left":0.8902925,"top":0.23024741,"width":0.00731383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Showing","depth":11,"bounds":{"left":0.8853058,"top":0.2529928,"width":0.015791224,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"690","depth":11,"bounds":{"left":0.90109706,"top":0.2529928,"width":0.007480053,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"of 995 points (305 redundant points hidden)","depth":11,"bounds":{"left":0.90857714,"top":0.2529928,"width":0.0787899,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"LOCATIONS","depth":11,"bounds":{"left":0.8881317,"top":0.2773344,"width":0.024767287,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AREAS","depth":11,"bounds":{"left":0.9331782,"top":0.2773344,"width":0.014295213,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ADMIN","depth":11,"bounds":{"left":0.9729056,"top":0.2773344,"width":0.014461436,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"23:08:11","depth":15,"bounds":{"left":0.8853058,"top":0.30766162,"width":0.018284574,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"bounds":{"left":0.9075798,"top":0.30965683,"width":0.021110373,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"bounds":{"left":0.9830452,"top":0.30885875,"width":0.012300532,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66339, 23.28091 · 0.0m","depth":15,"bounds":{"left":0.8853058,"top":0.32282522,"width":0.05119681,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:44:11","depth":15,"bounds":{"left":0.8853058,"top":0.35155627,"width":0.018118352,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"bounds":{"left":0.90741354,"top":0.35355148,"width":0.021276595,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"bounds":{"left":0.9830452,"top":0.3527534,"width":0.012300532,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66339, 23.28091 · 0.0m","depth":15,"bounds":{"left":0.8853058,"top":0.36671987,"width":0.05119681,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:38:07","depth":15,"bounds":{"left":0.8853058,"top":0.39545092,"width":0.019115692,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"bounds":{"left":0.9084109,"top":0.39744613,"width":0.021276595,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"bounds":{"left":0.9830452,"top":0.39664805,"width":0.012300532,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66344, 23.28083 · 0.0m","depth":15,"bounds":{"left":0.8853058,"top":0.41061452,"width":0.052027926,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"22:32:07","depth":15,"bounds":{"left":0.8853058,"top":0.43934557,"width":0.018949468,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"bounds":{"left":0.90824467,"top":0.44134077,"width":0.021276595,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"bounds":{"left":0.9830452,"top":0.4405427,"width":0.012300532,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66339, 23.28091 · 0.0m","depth":15,"bounds":{"left":0.8853058,"top":0.45450917,"width":0.05119681,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"21:43:43","depth":15,"bounds":{"left":0.8853058,"top":0.48324022,"width":0.018949468,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"bounds":{"left":0.90824467,"top":0.48523542,"width":0.021276595,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"bounds":{"left":0.9830452,"top":0.48443735,"width":0.012300532,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66339, 23.28091 · 0.0m","depth":15,"bounds":{"left":0.8853058,"top":0.49840382,"width":0.05119681,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"21:37:43","depth":15,"bounds":{"left":0.8853058,"top":0.5271349,"width":0.01861702,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"bounds":{"left":0.90791225,"top":0.5291301,"width":0.021110373,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"bounds":{"left":0.9830452,"top":0.528332,"width":0.012300532,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66344, 23.28083 · 0.0m","depth":15,"bounds":{"left":0.8853058,"top":0.5422985,"width":0.052027926,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"21:31:45","depth":15,"bounds":{"left":0.8853058,"top":0.57102954,"width":0.018118352,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"bounds":{"left":0.90741354,"top":0.57302475,"width":0.021276595,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"bounds":{"left":0.9830452,"top":0.57222664,"width":0.012300532,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66339, 23.28091 · 0.0m","depth":15,"bounds":{"left":0.8853058,"top":0.58619314,"width":0.05119681,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:43:45","depth":15,"bounds":{"left":0.8853058,"top":0.6149242,"width":0.019614361,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"bounds":{"left":0.90890956,"top":0.6169194,"width":0.021276595,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"bounds":{"left":0.9830452,"top":0.6161213,"width":0.012300532,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66339, 23.28091 · 0.0m","depth":15,"bounds":{"left":0.8853058,"top":0.6300878,"width":0.05119681,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:37:44","depth":15,"bounds":{"left":0.8853058,"top":0.65881884,"width":0.019281914,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"bounds":{"left":0.90857714,"top":0.66081405,"width":0.021276595,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"bounds":{"left":0.9830452,"top":0.66001594,"width":0.012300532,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66344, 23.28083 · 0.0m","depth":15,"bounds":{"left":0.8853058,"top":0.67398244,"width":0.052027926,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:31:46","depth":15,"bounds":{"left":0.8853058,"top":0.7027135,"width":0.018949468,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"bounds":{"left":0.90824467,"top":0.7047087,"width":0.021276595,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"bounds":{"left":0.9830452,"top":0.7039106,"width":0.012300532,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66339, 23.28091 · 0.0m","depth":15,"bounds":{"left":0.8853058,"top":0.7178771,"width":0.05119681,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18:13:46","depth":15,"bounds":{"left":0.8853058,"top":0.74660814,"width":0.018450798,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"bounds":{"left":0.907746,"top":0.74860334,"width":0.021276595,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"bounds":{"left":0.9830452,"top":0.74780524,"width":0.012300532,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66339, 23.28091 · 0.0m","depth":15,"bounds":{"left":0.8853058,"top":0.76177174,"width":0.05119681,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18:07:45","depth":15,"bounds":{"left":0.8853058,"top":0.7905028,"width":0.018783245,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"bounds":{"left":0.90807843,"top":0.792498,"width":0.021110373,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"bounds":{"left":0.9830452,"top":0.79169995,"width":0.012300532,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66344, 23.28083 · 0.0m","depth":15,"bounds":{"left":0.8853058,"top":0.8056664,"width":0.052027926,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18:01:43","depth":15,"bounds":{"left":0.8853058,"top":0.83439744,"width":0.018450798,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATIONARY","depth":15,"bounds":{"left":0.907746,"top":0.83639264,"width":0.021110373,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"bounds":{"left":0.9830452,"top":0.8355946,"width":0.012300532,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66339, 23.28091 · 2.1m","depth":15,"bounds":{"left":0.8853058,"top":0.84956104,"width":0.05069814,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:54:24","depth":15,"bounds":{"left":0.8853058,"top":0.8782921,"width":0.01861702,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"bounds":{"left":0.90791225,"top":0.8802873,"width":0.015625,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"bounds":{"left":0.9830452,"top":0.87948924,"width":0.012300532,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66341, 23.28104 · 5.2m","depth":15,"bounds":{"left":0.8853058,"top":0.8934557,"width":0.05069814,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:54:12","depth":15,"bounds":{"left":0.8853058,"top":0.92218673,"width":0.017952127,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"bounds":{"left":0.90724736,"top":0.92418194,"width":0.015458777,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"bounds":{"left":0.9830452,"top":0.9233839,"width":0.012300532,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66344, 23.28084 · 8.6m","depth":15,"bounds":{"left":0.8853058,"top":0.93735033,"width":0.05219415,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:53:29","depth":15,"bounds":{"left":0.8853058,"top":0.9660814,"width":0.01861702,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"bounds":{"left":0.90791225,"top":0.9680766,"width":0.015458777,"height":0.008778931},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"bounds":{"left":0.9830452,"top":0.96727854,"width":0.012300532,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66348, 23.28064 · 10.0m","depth":15,"bounds":{"left":0.8853058,"top":0.98124504,"width":0.053856384,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:53:15","depth":15,"bounds":{"left":0.8853058,"top":1.0,"width":0.017952127,"height":-0.009976029},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"bounds":{"left":0.90724736,"top":1.0,"width":0.015458777,"height":-0.011971235},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"bounds":{"left":0.9830452,"top":1.0,"width":0.012300532,"height":-0.011173129},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66351, 23.28047 · 6.3m","depth":15,"bounds":{"left":0.8853058,"top":1.0,"width":0.05119681,"height":-0.02513969},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:53:09","depth":15,"bounds":{"left":0.8853058,"top":1.0,"width":0.018783245,"height":-0.053870678},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"bounds":{"left":0.90807843,"top":1.0,"width":0.015458777,"height":-0.055865884},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"bounds":{"left":0.9830452,"top":1.0,"width":0.012300532,"height":-0.055067778},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66344, 23.28038 · 7.3m","depth":15,"bounds":{"left":0.8853058,"top":1.0,"width":0.051529255,"height":-0.06903434},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:53:04","depth":15,"bounds":{"left":0.8853058,"top":1.0,"width":0.018783245,"height":-0.09776533},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"bounds":{"left":0.90807843,"top":1.0,"width":0.015458777,"height":-0.09976053},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"bounds":{"left":0.9830452,"top":1.0,"width":0.012300532,"height":-0.098962545},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66335, 23.28044 · 37.1m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:51:46","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66331, 23.28094 · 7.8m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:51:41","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66331, 23.28080 · 7.6m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:51:38","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66328, 23.28068 · 7.8m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:51:35","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66319, 23.28060 · 7.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:51:33","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66310, 23.28057 · 9.4m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:51:31","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66299, 23.28054 · 9.8m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:51:29","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66288, 23.28050 · 10.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:51:27","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66277, 23.28047 · 10.3m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:51:25","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66265, 23.28043 · 12.2m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:51:22","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66253, 23.28036 · 7.8m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:51:20","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66243, 23.28031 · 10.9m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:51:16","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DRIVING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66221, 23.28011 · 10.5m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:51:14","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66211, 23.27999 · 9.3m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:51:12","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66203, 23.27989 · 7.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:51:10","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66195, 23.27981 · 6.9m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:51:06","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66189, 23.27970 · 7.9m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:51:03","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66193, 23.27956 · 7.5m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:51:01","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66197, 23.27943 · 9.9m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:50:59","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66202, 23.27929 · 9.8m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:50:57","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66206, 23.27915 · 9.5m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:50:55","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66210, 23.27901 · 9.6m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:50:53","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66215, 23.27887 · 8.9m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:50:51","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66219, 23.27874 · 8.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:50:49","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66222, 23.27861 · 11.6m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:50:46","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66227, 23.27845 · 9.7m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:50:41","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66229, 23.27829 · 9.2m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:50:38","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66231, 23.27815 · 8.6m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:50:36","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66235, 23.27802 · 9.9m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:50:14","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DRIVING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66280, 23.27594 · 12.4m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:50:12","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66284, 23.27576 · 9.1m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:50:10","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66286, 23.27562 · 7.5m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:50:08","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66289, 23.27550 · 7.7m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:49:58","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DRIVING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66305, 23.27462 · 11.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:49:56","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66309, 23.27446 · 11.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:49:53","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66308, 23.27429 · 8.3m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:49:51","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66299, 23.27425 · 20.1m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:49:35","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66279, 23.27417 · 9.8m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:49:32","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66268, 23.27412 · 11.3m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:49:29","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66256, 23.27406 · 9.4m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:49:26","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66246, 23.27402 · 8.9m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:49:23","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66236, 23.27397 · 8.2m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:49:20","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66226, 23.27393 · 8.3m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:49:17","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66217, 23.27389 · 7.4m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:49:14","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66208, 23.27385 · 7.4m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:49:10","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66200, 23.27381 · 9.1m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:48:51","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66190, 23.27375 · 9.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:48:47","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66180, 23.27370 · 9.5m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:48:43","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66169, 23.27366 · 7.5m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:48:40","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66160, 23.27361 · 8.4m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:48:37","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66151, 23.27357 · 10.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:48:15","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66139, 23.27353 · 7.4m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:47:52","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66131, 23.27349 · 7.6m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:47:49","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66122, 23.27345 · 8.5m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:47:46","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66112, 23.27341 · 9.9m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:47:42","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66101, 23.27336 · 8.2m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:47:33","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66092, 23.27332 · 8.0m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:47:17","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66083, 23.27328 · 7.4m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:47:04","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66074, 23.27324 · 8.9m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:47:00","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CYCLING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66064, 23.27320 · 7.2m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:46:57","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66055, 23.27315 · 10.2m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:46:42","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WALKING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66045, 23.27309 · 7.3m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:46:32","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66036, 23.27305 · 9.2m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:46:28","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66026, 23.27300 · 7.2m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:46:24","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66018, 23.27295 · 12.7m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:46:18","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18 May","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"42.66004, 23.27291 · 7.3m","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17:45:49","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RUNNING","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-537011875546626221
|
-1858371415005529256
|
visual_change
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Getting Started DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
Getting Started · AFFiNE
Getting Started · AFFiNE
Screenpipe — Archive
Screenpipe — Archive
Download screenpipe — get started in minutes
Download screenpipe — get started in minutes
Self-Hosted Software and Apps
Self-Hosted Software and Apps
New Tab
New Tab
[LakyLak] A security advisory on axios affects at least one of your repositories - [EMAIL] - Gmail
[LakyLak] A security advisory on axios affects at least one of your repositories - [EMAIL] - Gmail
Завеждане на щета онлайн | Euroins
Завеждане на щета онлайн | Euroins
Photos - Google Photos
Photos - Google Photos
Kontakt | Veľvyslanectvo Slovenskej republiky v Sofii
Kontakt | Veľvyslanectvo Slovenskej republiky v Sofii
Settings
Settings
Nginx Proxy Manager
Nginx Proxy Manager
Location Logger
Location Logger
Close tab
Providers - Admin - authentik
Providers - Admin - authentik
Recent love experiences - Claude
Recent love experiences - Claude
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Location Logger
Location Logger
Logout
←
Yesterday
→
Today
Yesterday
7d
30d
From
18
/
05
/
2026
,
00
:
00
Calendar
To
19
/
05
/
2026
,
00
:
00
Calendar
Movement
Load
Zoom in
Zoom out
Leaflet
Leaflet
©
OSM
OSM
POINTS
995
690 shown
DISTANCE
9.5 km
raw: 15.2 km
TOP MODE
cycling
QUALITY
93%
Stationary
Walking
Running
Cycling
Driving
Fast
Showing
690
of 995 points (305 redundant points hidden)
LOCATIONS
AREAS
ADMIN
23:08:11
STATIONARY
18 May
42.66339, 23.28091 · 0.0m
22:44:11
STATIONARY
18 May
42.66339, 23.28091 · 0.0m
22:38:07
STATIONARY
18 May
42.66344, 23.28083 · 0.0m
22:32:07
STATIONARY
18 May
42.66339, 23.28091 · 0.0m
21:43:43
STATIONARY
18 May
42.66339, 23.28091 · 0.0m
21:37:43
STATIONARY
18 May
42.66344, 23.28083 · 0.0m
21:31:45
STATIONARY
18 May
42.66339, 23.28091 · 0.0m
20:43:45
STATIONARY
18 May
42.66339, 23.28091 · 0.0m
20:37:44
STATIONARY
18 May
42.66344, 23.28083 · 0.0m
20:31:46
STATIONARY
18 May
42.66339, 23.28091 · 0.0m
18:13:46
STATIONARY
18 May
42.66339, 23.28091 · 0.0m
18:07:45
STATIONARY
18 May
42.66344, 23.28083 · 0.0m
18:01:43
STATIONARY
18 May
42.66339, 23.28091 · 2.1m
17:54:24
WALKING
18 May
42.66341, 23.28104 · 5.2m
17:54:12
WALKING
18 May
42.66344, 23.28084 · 8.6m
17:53:29
WALKING
18 May
42.66348, 23.28064 · 10.0m
17:53:15
WALKING
18 May
42.66351, 23.28047 · 6.3m
17:53:09
WALKING
18 May
42.66344, 23.28038 · 7.3m
17:53:04
WALKING
18 May
42.66335, 23.28044 · 37.1m
17:51:46
RUNNING
18 May
42.66331, 23.28094 · 7.8m
17:51:41
CYCLING
18 May
42.66331, 23.28080 · 7.6m
17:51:38
CYCLING
18 May
42.66328, 23.28068 · 7.8m
17:51:35
CYCLING
18 May
42.66319, 23.28060 · 7.0m
17:51:33
CYCLING
18 May
42.66310, 23.28057 · 9.4m
17:51:31
CYCLING
18 May
42.66299, 23.28054 · 9.8m
17:51:29
CYCLING
18 May
42.66288, 23.28050 · 10.0m
17:51:27
CYCLING
18 May
42.66277, 23.28047 · 10.3m
17:51:25
CYCLING
18 May
42.66265, 23.28043 · 12.2m
17:51:22
CYCLING
18 May
42.66253, 23.28036 · 7.8m
17:51:20
CYCLING
18 May
42.66243, 23.28031 · 10.9m
17:51:16
DRIVING
18 May
42.66221, 23.28011 · 10.5m
17:51:14
CYCLING
18 May
42.66211, 23.27999 · 9.3m
17:51:12
CYCLING
18 May
42.66203, 23.27989 · 7.0m
17:51:10
RUNNING
18 May
42.66195, 23.27981 · 6.9m
17:51:06
CYCLING
18 May
42.66189, 23.27970 · 7.9m
17:51:03
CYCLING
18 May
42.66193, 23.27956 · 7.5m
17:51:01
CYCLING
18 May
42.66197, 23.27943 · 9.9m
17:50:59
CYCLING
18 May
42.66202, 23.27929 · 9.8m
17:50:57
CYCLING
18 May
42.66206, 23.27915 · 9.5m
17:50:55
CYCLING
18 May
42.66210, 23.27901 · 9.6m
17:50:53
CYCLING
18 May
42.66215, 23.27887 · 8.9m
17:50:51
CYCLING
18 May
42.66219, 23.27874 · 8.0m
17:50:49
CYCLING
18 May
42.66222, 23.27861 · 11.6m
17:50:46
CYCLING
18 May
42.66227, 23.27845 · 9.7m
17:50:41
RUNNING
18 May
42.66229, 23.27829 · 9.2m
17:50:38
CYCLING
18 May
42.66231, 23.27815 · 8.6m
17:50:36
CYCLING
18 May
42.66235, 23.27802 · 9.9m
17:50:14
DRIVING
18 May
42.66280, 23.27594 · 12.4m
17:50:12
CYCLING
18 May
42.66284, 23.27576 · 9.1m
17:50:10
CYCLING
18 May
42.66286, 23.27562 · 7.5m
17:50:08
CYCLING
18 May
42.66289, 23.27550 · 7.7m
17:49:58
DRIVING
18 May
42.66305, 23.27462 · 11.0m
17:49:56
CYCLING
18 May
42.66309, 23.27446 · 11.0m
17:49:53
CYCLING
18 May
42.66308, 23.27429 · 8.3m
17:49:51
CYCLING
18 May
42.66299, 23.27425 · 20.1m
17:49:35
CYCLING
18 May
42.66279, 23.27417 · 9.8m
17:49:32
CYCLING
18 May
42.66268, 23.27412 · 11.3m
17:49:29
CYCLING
18 May
42.66256, 23.27406 · 9.4m
17:49:26
CYCLING
18 May
42.66246, 23.27402 · 8.9m
17:49:23
CYCLING
18 May
42.66236, 23.27397 · 8.2m
17:49:20
CYCLING
18 May
42.66226, 23.27393 · 8.3m
17:49:17
CYCLING
18 May
42.66217, 23.27389 · 7.4m
17:49:14
RUNNING
18 May
42.66208, 23.27385 · 7.4m
17:49:10
RUNNING
18 May
42.66200, 23.27381 · 9.1m
17:48:51
RUNNING
18 May
42.66190, 23.27375 · 9.0m
17:48:47
RUNNING
18 May
42.66180, 23.27370 · 9.5m
17:48:43
CYCLING
18 May
42.66169, 23.27366 · 7.5m
17:48:40
CYCLING
18 May
42.66160, 23.27361 · 8.4m
17:48:37
CYCLING
18 May
42.66151, 23.27357 · 10.0m
17:48:15
WALKING
18 May
42.66139, 23.27353 · 7.4m
17:47:52
CYCLING
18 May
42.66131, 23.27349 · 7.6m
17:47:49
CYCLING
18 May
42.66122, 23.27345 · 8.5m
17:47:46
CYCLING
18 May
42.66112, 23.27341 · 9.9m
17:47:42
WALKING
18 May
42.66101, 23.27336 · 8.2m
17:47:33
RUNNING
18 May
42.66092, 23.27332 · 8.0m
17:47:17
WALKING
18 May
42.66083, 23.27328 · 7.4m
17:47:04
RUNNING
18 May
42.66074, 23.27324 · 8.9m
17:47:00
CYCLING
18 May
42.66064, 23.27320 · 7.2m
17:46:57
RUNNING
18 May
42.66055, 23.27315 · 10.2m
17:46:42
WALKING
18 May
42.66045, 23.27309 · 7.3m
17:46:32
RUNNING
18 May
42.66036, 23.27305 · 9.2m
17:46:28
RUNNING
18 May
42.66026, 23.27300 · 7.2m
17:46:24
RUNNING
18 May
42.66018, 23.27295 · 12.7m
17:46:18
RUNNING
18 May
42.66004, 23.27291 · 7.3m
17:45:49
RUNNING...
|
55625
|
NULL
|
NULL
|
NULL
|
|
55628
|
1930
|
1
|
2026-05-19T06:32:19.489237+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-19/1779 /Users/lukas/.screenpipe/data/data/2026-05-19/1779172339489_m1.jpg...
|
Firefox
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira — Work...
|
1
|
jiminny.atlassian.net/jira/software/c/projects/JY/ jiminny.atlassian.net/jira/software/c/projects/JY/boards/37...
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Close tab
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
Main Content
Main Content
Space navigation
Space navigation
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
1 Notification
1 Notification
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Dashboards
Dashboards
Create dashboard
Create dashboard
More actions for Dashboards
More actions for Dashboards
Operations
Operations
More actions for Operations
More actions for Operations
Confluence , (opens new window)
Confluence
, (opens new window)
Teams , (opens new window)
Teams
, (opens new window)
open menu
open menu
Customise sidebar
Customise sidebar
Resize side navigation panel
Spaces
Spaces
/
Jiminny (New)
Jiminny (New)
Platform Team
Platform Team
Add people
Add people
Board actions
Board actions
Share
Automation
Give feedback
Give feedback
Enter full screen
Enter full screen
Summary
Summary
Timeline
Timeline
Backlog
Backlog
Active sprints
Active sprints
Calendar
Calendar
Reports
Reports
Testing Board
Testing Board
List
List
Forms
Forms
Components
Components
Development
Development
Code
Code
Security
Security
Releases
Releases
Deployments
Deployments
Archived work items
Archived work items
Docs
Docs
Shortcuts
Shortcuts
Slack integration
Slack integration
Reporting Center
Reporting Center
Add to navigation
As you type to search or apply filters, the board updates with work items to match.
Search on current page
Filter by assignee
Filter assignees by Lukas Kovalik
Filter assignees by Aneliya Angelova
Filter assignees by Nikolay Ivanov
Filter assignees by Nikolay Nikolov
Filter assignees by Steliyan Georgiev
Filter assignees by Unassigned
Epic
Epic
Type
Type
Quick filters
Quick filters
Complete sprint
Complete sprint
Sprint details
Sprint details
Group by Queries
Group
: Queries
Sprint insights
Sprint insights
View settings
View settings
More actions
More actions
Ready To Be Merged (1 work item)
Ready To Be Merged
(1 work item)
Ready For DEV
READY FOR DEV
In DEV
IN DEV
Code Review
CODE REVIEW
Create work item in Code Review
Create
Blocked
BLOCKED
Create work item in Blocked
Create
QA
QA
Create work item in QA
Create
PO Acceptance
PO ACCEPTANCE
Create work item in PO Acceptance
Create
Deploy
DEPLOY
1
JY-20725 [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts. Use the enter key to load the work item.
[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts
Platform Stability, Edit Parent
PLATFORM STABILITY
Ready To Merge
JY-20725
JY-20725
1.5
pull request
Assignee: Aneliya Angelova
Sprint (18 work items)
Sprint
(18 work items)
Ready For DEV
READY FOR DEV
4
JY-20676 Notify the user if a Panorama prompts is deleted but is used in AJ Report. Use the enter key to load the work item.
Notify the user if a Panorama prompts is deleted but is used in AJ Report
Edit summary
Edit summary
AJ Reports, Edit Parent
AJ REPORTS
Backlog
JY-20676
JY-20676
3
Assignee: Lukas Kovalik
More actions for JY-20676 Notify the user if a Panorama prompts is deleted but is used in AJ Report
More actions for JY-20676 Notify the user if a Panorama prompts is deleted but is used in AJ Report
JY-20615 Notify the user if a SS is deleted but is used in AJ Report. Use the enter key to load the work item.
Notify the user if a SS is deleted but is used in AJ Report
AJ Reports, Edit Parent
AJ REPORTS
Backlog
JY-20615
JY-20615
2.5
JY-19958 Upgrade BE libraries - May. Use the enter key to load the work item.
Upgrade BE libraries - May
MAINTENANCE
Backlog
JY-19958
JY-19958
1
JY-20410 Improve Activity Type suggestions. Use the enter key to load the work item.
Improve Activity Type suggestions
AUTO-DETECTED ACTIVITY TYPE
Backlog
JY-20410
JY-20410
2
In DEV
IN DEV
3
JY-20833 MCP > Enable users to get a list of calls and their details. Use the enter key to load the work item.
MCP > Enable users to get a list of calls and their details
JIMINNY MCP CONNECTOR
In Dev
JY-20833
JY-20833
9
JY-20835 MCP > Enable users to get a list of deals and their details. Use the enter key to load the work item.
MCP > Enable users to get a list of deals and their details
JIMINNY MCP CONNECTOR
In Dev
JY-20835
JY-20835
20
merged pull request
JY-20919 LATUS Group - Exec Summary Inaccuracy. Use the enter key to load the work item.
LATUS Group - Exec Summary Inaccuracy
Support tickets, Edit Parent
SUPPORT TICKETS
In Dev
JY-20919
JY-20919
Successful deployment to production.
Assignee: Steliyan Georgiev
Code Review
CODE REVIEW
Create work item in Code Review
Create
Blocked
BLOCKED
Create work item in Blocked
Create
QA
QA
3
Create work item
JY-18091 Upgrade to PHP 8.5. Use the enter key to load the work item....
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to:","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Top Bar","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Top Bar","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sidebar","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sidebar","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Main Content","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Main Content","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Space navigation","depth":11,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Space navigation","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse sidebar [","depth":10,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse sidebar [","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Switch sites or apps","depth":11,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Switch sites or apps","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to your Jira homepage","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Search, press enter to navigate to advanced search with your text query","depth":12,"on_screen":true,"help_text":"","placeholder":"Search","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Create","depth":11,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Rovo Ask Rovo","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Rovo","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"1 Notification","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1 Notification","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Help","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Help","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Settings","depth":13,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Settings","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"lukas.kovalik@jiminny.com","depth":13,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas.kovalik@jiminny.com","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"For you","depth":13,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"For you","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Recent","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Recent","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Starred","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Starred","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Apps","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Apps","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Apps","depth":14,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Apps","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Spaces","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Spaces","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create space","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create space","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for spaces","depth":14,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for spaces","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Recent","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Service-Desk","depth":18,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Service-Desk","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Service-Desk","depth":19,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Service-Desk","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny (New)","depth":18,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny (New)","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Jiminny (New)","depth":19,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXMenuButton","text":"Create board","depth":19,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create board","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Jiminny (New)","depth":19,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Jiminny (New)","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Platform Team","depth":20,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Team","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":21,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Capture Team","depth":20,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Capture Team","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":21,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Enterprise Stability Issues 🤕","depth":20,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Enterprise Stability Issues 🤕","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":21,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Processing Team","depth":20,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Processing Team","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":21,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SE Kanban","depth":20,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SE Kanban","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":21,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More spaces","depth":18,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More spaces","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Filters","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Filters","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Filters","depth":14,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Filters","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Dashboards","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Dashboards","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create dashboard","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create dashboard","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Dashboards","depth":14,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Dashboards","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Operations","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Operations","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Operations","depth":14,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Operations","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Confluence , (opens new window)","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Confluence","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", (opens new window)","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Teams , (opens new window)","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Teams","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", (opens new window)","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"open menu","depth":15,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"open menu","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Customise sidebar","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Customise sidebar","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Resize side navigation panel","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Spaces","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Spaces","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny (New)","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny (New)","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Platform Team","depth":11,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Platform Team","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add people","depth":11,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add people","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":11,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Share","depth":11,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Automation","depth":11,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Give feedback","depth":11,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Give feedback","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Enter full screen","depth":11,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Enter full screen","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Summary","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summary","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Timeline","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Timeline","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Backlog","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Backlog","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Active sprints","depth":14,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Active sprints","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Calendar","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Calendar","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Reports","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reports","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Testing Board","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Testing Board","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"List","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"List","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Forms","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Forms","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Components","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Components","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Development","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Development","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Security","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Security","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Releases","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Releases","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Deployments","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Deployments","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Archived work items","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Archived work items","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Docs","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Docs","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Shortcuts","depth":15,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Shortcuts","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Slack integration","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Slack integration","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Reporting Center","depth":14,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reporting Center","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Add to navigation","depth":12,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"As you type to search or apply filters, the board updates with work items to match.","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search on current page","depth":12,"on_screen":true,"placeholder":"Search board","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Filter by assignee","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Filter assignees by Lukas Kovalik","depth":12,"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Filter assignees by Aneliya Angelova","depth":12,"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Filter assignees by Nikolay Ivanov","depth":12,"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Filter assignees by Nikolay Nikolov","depth":12,"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Filter assignees by Steliyan Georgiev","depth":12,"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Filter assignees by Unassigned","depth":12,"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Epic","depth":14,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Epic","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Type","depth":14,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Type","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Quick filters","depth":14,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Quick filters","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Complete sprint","depth":11,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Complete sprint","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Sprint details","depth":11,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Sprint details","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Group by Queries","depth":11,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Group","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":": Queries","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Sprint insights","depth":11,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Sprint insights","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"View settings","depth":11,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"View settings","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions","depth":11,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Ready To Be Merged (1 work item)","depth":17,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Ready To Be Merged","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(1 work item)","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Ready For DEV","depth":18,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"READY FOR DEV","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"In DEV","depth":18,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"IN DEV","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Code Review","depth":18,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CODE REVIEW","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create work item in Code Review","depth":18,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Blocked","depth":18,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BLOCKED","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create work item in Blocked","depth":18,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"QA","depth":18,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QA","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create work item in QA","depth":18,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"PO Acceptance","depth":18,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PO ACCEPTANCE","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create work item in PO Acceptance","depth":18,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Deploy","depth":18,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DEPLOY","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"JY-20725 [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts. Use the enter key to load the work item.","depth":18,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Platform Stability, Edit Parent","depth":19,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"PLATFORM STABILITY","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ready To Merge","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20725","depth":19,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1.5","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"pull request","depth":18,"on_screen":true,"role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Assignee: Aneliya Angelova","depth":19,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sprint (18 work items)","depth":17,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Sprint","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(18 work items)","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Ready For DEV","depth":18,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"READY FOR DEV","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"JY-20676 Notify the user if a Panorama prompts is deleted but is used in AJ Report. Use the enter key to load the work item.","depth":18,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Notify the user if a Panorama prompts is deleted but is used in AJ Report","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit summary","depth":22,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Edit summary","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"AJ Reports, Edit Parent","depth":19,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AJ REPORTS","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Backlog","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20676","depth":19,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20676","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Assignee: Lukas Kovalik","depth":19,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"More actions for JY-20676 Notify the user if a Panorama prompts is deleted but is used in AJ Report","depth":19,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for JY-20676 Notify the user if a Panorama prompts is deleted but is used in AJ Report","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"JY-20615 Notify the user if a SS is deleted but is used in AJ Report. Use the enter key to load the work item.","depth":18,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Notify the user if a SS is deleted but is used in AJ Report","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"AJ Reports, Edit Parent","depth":19,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AJ REPORTS","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Backlog","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20615","depth":19,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20615","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2.5","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"JY-19958 Upgrade BE libraries - May. Use the enter key to load the work item.","depth":18,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Upgrade BE libraries - May","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"MAINTENANCE","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Backlog","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-19958","depth":19,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-19958","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"JY-20410 Improve Activity Type suggestions. Use the enter key to load the work item.","depth":18,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Improve Activity Type suggestions","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AUTO-DETECTED ACTIVITY TYPE","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Backlog","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20410","depth":19,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20410","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2","depth":19,"bounds":{"left":0.0,"top":0.0,"width":0.0048611113,"height":0.016666668},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"In DEV","depth":18,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"IN DEV","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"JY-20833 MCP > Enable users to get a list of calls and their details. Use the enter key to load the work item.","depth":18,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"MCP > Enable users to get a list of calls and their details","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"JIMINNY MCP CONNECTOR","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"In Dev","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20833","depth":19,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20833","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"JY-20835 MCP > Enable users to get a list of deals and their details. Use the enter key to load the work item.","depth":18,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"MCP > Enable users to get a list of deals and their details","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"JIMINNY MCP CONNECTOR","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"In Dev","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20835","depth":19,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20835","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"merged pull request","depth":18,"on_screen":true,"role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20919 LATUS Group - Exec Summary Inaccuracy. Use the enter key to load the work item.","depth":18,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"LATUS Group - Exec Summary Inaccuracy","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Support tickets, Edit Parent","depth":19,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SUPPORT TICKETS","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"In Dev","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20919","depth":19,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20919","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Successful deployment to production.","depth":18,"on_screen":true,"role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Assignee: Steliyan Georgiev","depth":19,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Code Review","depth":18,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CODE REVIEW","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create work item in Code Review","depth":18,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Blocked","depth":18,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BLOCKED","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create work item in Blocked","depth":18,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"QA","depth":18,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QA","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create work item","depth":18,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"JY-18091 Upgrade to PHP 8.5. Use the enter key to load the work item.","depth":18,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
-4743867115176626143
|
5805503463039554737
|
visual_change
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Close tab
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Top Bar
Top Bar
Sidebar
Sidebar
Main Content
Main Content
Space navigation
Space navigation
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
1 Notification
1 Notification
Help
Help
Settings
Settings
[EMAIL]
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Dashboards
Dashboards
Create dashboard
Create dashboard
More actions for Dashboards
More actions for Dashboards
Operations
Operations
More actions for Operations
More actions for Operations
Confluence , (opens new window)
Confluence
, (opens new window)
Teams , (opens new window)
Teams
, (opens new window)
open menu
open menu
Customise sidebar
Customise sidebar
Resize side navigation panel
Spaces
Spaces
/
Jiminny (New)
Jiminny (New)
Platform Team
Platform Team
Add people
Add people
Board actions
Board actions
Share
Automation
Give feedback
Give feedback
Enter full screen
Enter full screen
Summary
Summary
Timeline
Timeline
Backlog
Backlog
Active sprints
Active sprints
Calendar
Calendar
Reports
Reports
Testing Board
Testing Board
List
List
Forms
Forms
Components
Components
Development
Development
Code
Code
Security
Security
Releases
Releases
Deployments
Deployments
Archived work items
Archived work items
Docs
Docs
Shortcuts
Shortcuts
Slack integration
Slack integration
Reporting Center
Reporting Center
Add to navigation
As you type to search or apply filters, the board updates with work items to match.
Search on current page
Filter by assignee
Filter assignees by Lukas Kovalik
Filter assignees by Aneliya Angelova
Filter assignees by Nikolay Ivanov
Filter assignees by Nikolay Nikolov
Filter assignees by Steliyan Georgiev
Filter assignees by Unassigned
Epic
Epic
Type
Type
Quick filters
Quick filters
Complete sprint
Complete sprint
Sprint details
Sprint details
Group by Queries
Group
: Queries
Sprint insights
Sprint insights
View settings
View settings
More actions
More actions
Ready To Be Merged (1 work item)
Ready To Be Merged
(1 work item)
Ready For DEV
READY FOR DEV
In DEV
IN DEV
Code Review
CODE REVIEW
Create work item in Code Review
Create
Blocked
BLOCKED
Create work item in Blocked
Create
QA
QA
Create work item in QA
Create
PO Acceptance
PO ACCEPTANCE
Create work item in PO Acceptance
Create
Deploy
DEPLOY
1
JY-20725 [HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts. Use the enter key to load the work item.
[HubSpot] Optimise CRM rematching on delete hubspot accounts/contacts
Platform Stability, Edit Parent
PLATFORM STABILITY
Ready To Merge
JY-20725
JY-20725
1.5
pull request
Assignee: Aneliya Angelova
Sprint (18 work items)
Sprint
(18 work items)
Ready For DEV
READY FOR DEV
4
JY-20676 Notify the user if a Panorama prompts is deleted but is used in AJ Report. Use the enter key to load the work item.
Notify the user if a Panorama prompts is deleted but is used in AJ Report
Edit summary
Edit summary
AJ Reports, Edit Parent
AJ REPORTS
Backlog
JY-20676
JY-20676
3
Assignee: Lukas Kovalik
More actions for JY-20676 Notify the user if a Panorama prompts is deleted but is used in AJ Report
More actions for JY-20676 Notify the user if a Panorama prompts is deleted but is used in AJ Report
JY-20615 Notify the user if a SS is deleted but is used in AJ Report. Use the enter key to load the work item.
Notify the user if a SS is deleted but is used in AJ Report
AJ Reports, Edit Parent
AJ REPORTS
Backlog
JY-20615
JY-20615
2.5
JY-19958 Upgrade BE libraries - May. Use the enter key to load the work item.
Upgrade BE libraries - May
MAINTENANCE
Backlog
JY-19958
JY-19958
1
JY-20410 Improve Activity Type suggestions. Use the enter key to load the work item.
Improve Activity Type suggestions
AUTO-DETECTED ACTIVITY TYPE
Backlog
JY-20410
JY-20410
2
In DEV
IN DEV
3
JY-20833 MCP > Enable users to get a list of calls and their details. Use the enter key to load the work item.
MCP > Enable users to get a list of calls and their details
JIMINNY MCP CONNECTOR
In Dev
JY-20833
JY-20833
9
JY-20835 MCP > Enable users to get a list of deals and their details. Use the enter key to load the work item.
MCP > Enable users to get a list of deals and their details
JIMINNY MCP CONNECTOR
In Dev
JY-20835
JY-20835
20
merged pull request
JY-20919 LATUS Group - Exec Summary Inaccuracy. Use the enter key to load the work item.
LATUS Group - Exec Summary Inaccuracy
Support tickets, Edit Parent
SUPPORT TICKETS
In Dev
JY-20919
JY-20919
Successful deployment to production.
Assignee: Steliyan Georgiev
Code Review
CODE REVIEW
Create work item in Code Review
Create
Blocked
BLOCKED
Create work item in Blocked
Create
QA
QA
3
Create work item
JY-18091 Upgrade to PHP 8.5. Use the enter key to load the work item....
|
NULL
|
NULL
|
NULL
|
NULL
|
|
55632
|
1930
|
3
|
2026-05-19T06:32:30.704384+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-19/1779 /Users/lukas/.screenpipe/data/data/2026-05-19/1779172350704_m1.jpg...
|
Firefox
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp‹$0Daily - Platform • in 13 msshDOCKER• ₴1DEV (-zsh)₴82APP (-zsh)*3screenpipe"WARN [0000]/volume2/docker/location-logger/docker-compose.yml:"version"is obsolete[+] Building 3.1s (25/25) FINISHED= [api internal] load build definitionfrom Dockerfile= => transferring dockerfile: 567B= [api] resolve imageconfig for [URL_WITH_CREDENTIALS] [api internal] load build definitionfrom Dockerfile=> WARN: JSONArgsRecommended: JSONargumentsrecommended for CMD to prevent unintended behavior related to 0S signals (line 21)=>[mcp internal]load metadata for= [api internal] loaddocker.io/library/python:3.11-slimdockerignore= => transferringcontext:2B=> [aрі 1/7]FROM docker.io/library/python:3.11-slim=> [api internal] loadbuildcontext= => transferring context: 60.33kB=> CACHED [api 2/7] WORKDIR/app=> CACHED [api 3/7] COPY requirements.txt /app/=> CACHED [api 4/7] RUN pip install--no-cache-dir -r requirements.txt=> [арі 5/7]COPY app /app/app=>[api 6/7] COPY alembic /app/alembic= [api 7/7] COPY alembic.ini /app/alembic.ini=> [api] exporting to image= =› exporting layers=> => writingimage sha256:0b6f06ab29cc13dc1256d9e8240bc4bbd7ab34630040c12aae54547fb10233ec= =› naming to docker.io/library/location-logger-api= [mcp internal] load build definition from Dockerfile= transferring dockerfile: 715B[mcp internal] loaddockerignore= transferring context: 2B[mcp internal] load build context= transferring context: 115B[mcp 1/6] FROM docker.io/library/python:3.11-slim=> CACHED [mcp 2/6] WORKDIR /app=> CACHED [mcp 3/6] COPY requirements.txt /app/=> CACHED [mcp 4/6] RUN pip install --no-cache-dir -r requirements.txt=> CACHED [mcp 5/6] RUN SITE=$(python -c"import sysconfig; print(sysconfig.get_path('purelib'))")=> CACHED [mcp6/6]COPY server.py /app/=> [mcp] exporting to image=> =› exportinglayers= => writing image sha256:afd9cc01d29616aa089d8ca3b164aaec06a200e88872d3ad4e2a87432aa68bc0=>=> naming to docker.io/library/location-logger-mcp[+] Running 3/3• Container location-logger-postgresHealthy‹ Container location-logger-apiHealthy• Container location-logger-mcpStartedAdm1n@DXP4800PLUS-B5F8:/volume2/docker/location-logger$ |100% C0 ₴4&& sed-i's/enable_dns_rebinding_protection=True/enable_dns_rebindin8• Tue 19 May 9:32:30ssh*5docker:default0.050.0s0.950.0s0.050.0s0.0s0.0s0.0s0.050.150.0s0.0s0.0s0.050.2s0.250.2s0.250.250.050.0s0.0s0.0s0.050.0s0.050.050.0s0.050.050.0s0.0s0.0s0.050.0s0.0s0.0s0.0510.650.85...
|
NULL
|
7357045463176371143
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp‹$0Daily - Platform • in 13 msshDOCKER• ₴1DEV (-zsh)₴82APP (-zsh)*3screenpipe"WARN [0000]/volume2/docker/location-logger/docker-compose.yml:"version"is obsolete[+] Building 3.1s (25/25) FINISHED= [api internal] load build definitionfrom Dockerfile= => transferring dockerfile: 567B= [api] resolve imageconfig for [URL_WITH_CREDENTIALS] [api internal] load build definitionfrom Dockerfile=> WARN: JSONArgsRecommended: JSONargumentsrecommended for CMD to prevent unintended behavior related to 0S signals (line 21)=>[mcp internal]load metadata for= [api internal] loaddocker.io/library/python:3.11-slimdockerignore= => transferringcontext:2B=> [aрі 1/7]FROM docker.io/library/python:3.11-slim=> [api internal] loadbuildcontext= => transferring context: 60.33kB=> CACHED [api 2/7] WORKDIR/app=> CACHED [api 3/7] COPY requirements.txt /app/=> CACHED [api 4/7] RUN pip install--no-cache-dir -r requirements.txt=> [арі 5/7]COPY app /app/app=>[api 6/7] COPY alembic /app/alembic= [api 7/7] COPY alembic.ini /app/alembic.ini=> [api] exporting to image= =› exporting layers=> => writingimage sha256:0b6f06ab29cc13dc1256d9e8240bc4bbd7ab34630040c12aae54547fb10233ec= =› naming to docker.io/library/location-logger-api= [mcp internal] load build definition from Dockerfile= transferring dockerfile: 715B[mcp internal] loaddockerignore= transferring context: 2B[mcp internal] load build context= transferring context: 115B[mcp 1/6] FROM docker.io/library/python:3.11-slim=> CACHED [mcp 2/6] WORKDIR /app=> CACHED [mcp 3/6] COPY requirements.txt /app/=> CACHED [mcp 4/6] RUN pip install --no-cache-dir -r requirements.txt=> CACHED [mcp 5/6] RUN SITE=$(python -c"import sysconfig; print(sysconfig.get_path('purelib'))")=> CACHED [mcp6/6]COPY server.py /app/=> [mcp] exporting to image=> =› exportinglayers= => writing image sha256:afd9cc01d29616aa089d8ca3b164aaec06a200e88872d3ad4e2a87432aa68bc0=>=> naming to docker.io/library/location-logger-mcp[+] Running 3/3• Container location-logger-postgresHealthy‹ Container location-logger-apiHealthy• Container location-logger-mcpStartedAdm1n@DXP4800PLUS-B5F8:/volume2/docker/location-logger$ |100% C0 ₴4&& sed-i's/enable_dns_rebinding_protection=True/enable_dns_rebindin8• Tue 19 May 9:32:30ssh*5docker:default0.050.0s0.950.0s0.050.0s0.0s0.0s0.0s0.050.150.0s0.0s0.0s0.050.2s0.250.2s0.250.250.050.0s0.0s0.0s0.050.0s0.050.050.0s0.050.050.0s0.0s0.0s0.050.0s0.0s0.0s0.0510.650.85...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
55633
|
1931
|
4
|
2026-05-19T06:32:30.672547+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-19/1779 /Users/lukas/.screenpipe/data/data/2026-05-19/1779172350672_m2.jpg...
|
Firefox
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
ClaudecaltVIeWWindowDid I drive today v0, Chat:= C ClaudecaltVIeWWindowDid I drive today v0, Chat:= Cowork" Coae+ New chatã Projectso0 Arutacts₴ CustomizeBu garian cit zenshio apolication proces:Dawarich location tracking projectCities visited this vearDid I drive todavLast visit to LovechMonthly spending breakdown and regulaSwimming visits this yearScreenpipe prune database vacuum erroMarking text locations in screenpipe traUpdating packages in LaravelScreenpipe data sync and retention manaScreenpipe sync script failing after recerHubspot BadRequest headers debuggingMonthly expense trackingExporting transaction data from Notiona How much havesoent for groc.April 2026 spending by categoryCode diff reviewHubSpot rate limit implementation strateScreenpipe retention policy code locaticViewing retention policy in screenpipeClean shot x video recording terminaticwhere was | today. Did I friveDiagnosed authentication malfunction with lo Reply + :e >Write a message…Relaunch to updatelK Lukas. ProOpus 4.7 Adaptive vClaude is Al and can make mistakes. Please double-check responses."Dally - Platrorm • In 13 m+ Create100% Lz8• Tue 19 May 9:32:30Ask RovoComponents% Development ⅘ Code O Security & Releases A Deployments E Archived work items # Docs& Shortcuts~BLOCKEDIPO ACCEPTANCEISlack integration& Reporting CenterComplete sprintGroup: QueriesDEPLOY 1delete nuospot accounts/contacisPLATFORM STABILITYReadv Io Merae÷F JY-20725BLOCKEDQA 3Upgrade to PHP 8.5PHP 8.5 UPGRADEReady for QA[ JY-180911.5 8 000 =0MCP > Enable the AI to know detailsabout the userJIMINNY MCP CONNECTORReady for QAO JY-208461.5 i2 = 0Allow owner's role to be selected whensetting up a trialEMPROVEMENT OF OUR EFFICIENCYReady for QAM JY-206131.5 87 = 0PO ACCEPTANCEDEPLOY &AJ Panorama for Call Scoring in ODAUTOMATED AI SCORINGDeployed[ JY-203610.5 © •00 =[Deadline 25 May] Migrate depricatedGemini 3.1 Flash Lite Preview modelMAINTENANCEDenloved I[ Jy-208801 d2 •00=Setup test coverage for Prophet in SonarMATNTENANCEDeployedY-199511 Ý) •e0 = |Upgrade Python and libraries - MayMAINTENANCEDeploved© JY-208811 0=1[Deadline 17 June] Migrate depricatedGemini modelsFateeuauian...
|
NULL
|
-8960421098276393152
|
NULL
|
click
|
ocr
|
NULL
|
ClaudecaltVIeWWindowDid I drive today v0, Chat:= C ClaudecaltVIeWWindowDid I drive today v0, Chat:= Cowork" Coae+ New chatã Projectso0 Arutacts₴ CustomizeBu garian cit zenshio apolication proces:Dawarich location tracking projectCities visited this vearDid I drive todavLast visit to LovechMonthly spending breakdown and regulaSwimming visits this yearScreenpipe prune database vacuum erroMarking text locations in screenpipe traUpdating packages in LaravelScreenpipe data sync and retention manaScreenpipe sync script failing after recerHubspot BadRequest headers debuggingMonthly expense trackingExporting transaction data from Notiona How much havesoent for groc.April 2026 spending by categoryCode diff reviewHubSpot rate limit implementation strateScreenpipe retention policy code locaticViewing retention policy in screenpipeClean shot x video recording terminaticwhere was | today. Did I friveDiagnosed authentication malfunction with lo Reply + :e >Write a message…Relaunch to updatelK Lukas. ProOpus 4.7 Adaptive vClaude is Al and can make mistakes. Please double-check responses."Dally - Platrorm • In 13 m+ Create100% Lz8• Tue 19 May 9:32:30Ask RovoComponents% Development ⅘ Code O Security & Releases A Deployments E Archived work items # Docs& Shortcuts~BLOCKEDIPO ACCEPTANCEISlack integration& Reporting CenterComplete sprintGroup: QueriesDEPLOY 1delete nuospot accounts/contacisPLATFORM STABILITYReadv Io Merae÷F JY-20725BLOCKEDQA 3Upgrade to PHP 8.5PHP 8.5 UPGRADEReady for QA[ JY-180911.5 8 000 =0MCP > Enable the AI to know detailsabout the userJIMINNY MCP CONNECTORReady for QAO JY-208461.5 i2 = 0Allow owner's role to be selected whensetting up a trialEMPROVEMENT OF OUR EFFICIENCYReady for QAM JY-206131.5 87 = 0PO ACCEPTANCEDEPLOY &AJ Panorama for Call Scoring in ODAUTOMATED AI SCORINGDeployed[ JY-203610.5 © •00 =[Deadline 25 May] Migrate depricatedGemini 3.1 Flash Lite Preview modelMAINTENANCEDenloved I[ Jy-208801 d2 •00=Setup test coverage for Prophet in SonarMATNTENANCEDeployedY-199511 Ý) •e0 = |Upgrade Python and libraries - MayMAINTENANCEDeploved© JY-208811 0=1[Deadline 17 June] Migrate depricatedGemini modelsFateeuauian...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
55636
|
1931
|
6
|
2026-05-19T06:32:35.544606+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-19/1779 /Users/lukas/.screenpipe/data/data/2026-05-19/1779172355544_m2.jpg...
|
Firefox
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
slackcalVIewHomeActivityLaterMoreMistonWindowhelp@ slackcalVIewHomeActivityLaterMoreMistonWindowhelp@ Describe what you are looking forJiminny…..# random# releases# sofia-office# support# thank-yous# the people of iimi.^ Direct messages€. Vasil Vasilev%. Galya DimitrovaA. Aneliya AngelovaF.. Nikolay Yankov&. Stefka StoyanovaR. Stoyan TomovZá Todor Stamatov "8i. Mario GeorgievC.. Nikolay Ivanov&o James Graham2. Stoyan Tanev. Steliyan Georgiev&. Petko KashinskiE. Lukas Kovalik y...#: AppsJira Cloud® ToastE. Vasil VasilevMessagesAdd canvasO FilesЕО ВИДАХ ФYesterday ~получавам в sасk нотификации от.toast (edited)& PinsLukas Kovalik 10:39 AMVasil Vasilev 10:40 AMScreenshot 2026-05-18 at 10.40.05.ongvне знам дали го ползваш, но е многополезен туулVaci Vacilev 0.18 AMДобро утро, Лукашкогато имаш днес възможностмол9.18 httos:/gD/OUIV12082Message Vasil Vasilev+ Aa €norama prompts IsA.l Renort70000 —is deleted but is259000Upgrade BE libraries - MayMAINTENANCEBacklogEJY-199581eeee —Improve Activity Type suggestionsAUTO-DETECTED ACTIVITY TYPEBacklog# JY-204102 0000="Dally - Platrorm • In 13m100% Lz8• Tue 19 May 9:32:35Q Search+ CreateAsk RovoE BacklogŒ Active sprints8 Calendar Reports Testing Board E List Z Forms e Components % Development % Code O Security & Releases Deployments E Archived work items E Docs& Shortcuts~Epic vType Quick filtersd (1 work item)IN DEVCODE REVIEWIN DEV 3CODE REVIEWMCP > Enable users to get a list of callsand their detailsJIMINNY MCP CONNECTORIn Dev[ JY-208339 .000=0MCP > Enable users to get a list of dealsand their detallsJIMINNY MCP CONNECTORIn Dev-JY-20835120 [ 000=0LATUS Grouo - Exec SummaryInaccuracy(SUPPORT TICKETSIn DevF JY-20919BLOCKEDIBLOCKEDSlack integration& Reporting CenterComplete sprintPO ACCEPTANCEIQA 3PO ACCEPTANCEUpgrade to PHP 8.5PHP 8.5 UPGRADEReady for QAJY-180911.5 8 000 =0MCP > Enable the AI to know detailsabout the userJIMINNY MCP CONNECTORReady for QA[ Jy-208461.5 i2 = 0Allow owner's role to be selected whensetting up a trialEMPROVEMENT OF OUR EFFICIENCYReady for QAN JY-206131.5 87 = 0Group: QueriesDEPLOY 1delete nuospot accounts/contacisPLATFORM STABILITYReadv Io Merae÷F JY-20725DEPLOY &AJ Panorama for Call Scoring in ODAUTOMATED AI SCORINGDeployed[ JY-203610.5 © •00 =[Deadline 25 May] Migrate depricatedGemini 3.1 Flash Lite Preview modelMAINTENANCEDenloved I[ Jy-208801 d2 •00=Setup test coverage for Prophet in SonarMATNTENANCEDeployedY-199511 Ý) •e0 = |Upgrade Python and libraries - MayMAINTENANCEDeploved© JY-208811 0=1[Deadline 17 June] Migrate depricatedGemini modelsFateeuauian...
|
NULL
|
-2770926454305752965
|
NULL
|
click
|
ocr
|
NULL
|
slackcalVIewHomeActivityLaterMoreMistonWindowhelp@ slackcalVIewHomeActivityLaterMoreMistonWindowhelp@ Describe what you are looking forJiminny…..# random# releases# sofia-office# support# thank-yous# the people of iimi.^ Direct messages€. Vasil Vasilev%. Galya DimitrovaA. Aneliya AngelovaF.. Nikolay Yankov&. Stefka StoyanovaR. Stoyan TomovZá Todor Stamatov "8i. Mario GeorgievC.. Nikolay Ivanov&o James Graham2. Stoyan Tanev. Steliyan Georgiev&. Petko KashinskiE. Lukas Kovalik y...#: AppsJira Cloud® ToastE. Vasil VasilevMessagesAdd canvasO FilesЕО ВИДАХ ФYesterday ~получавам в sасk нотификации от.toast (edited)& PinsLukas Kovalik 10:39 AMVasil Vasilev 10:40 AMScreenshot 2026-05-18 at 10.40.05.ongvне знам дали го ползваш, но е многополезен туулVaci Vacilev 0.18 AMДобро утро, Лукашкогато имаш днес възможностмол9.18 httos:/gD/OUIV12082Message Vasil Vasilev+ Aa €norama prompts IsA.l Renort70000 —is deleted but is259000Upgrade BE libraries - MayMAINTENANCEBacklogEJY-199581eeee —Improve Activity Type suggestionsAUTO-DETECTED ACTIVITY TYPEBacklog# JY-204102 0000="Dally - Platrorm • In 13m100% Lz8• Tue 19 May 9:32:35Q Search+ CreateAsk RovoE BacklogŒ Active sprints8 Calendar Reports Testing Board E List Z Forms e Components % Development % Code O Security & Releases Deployments E Archived work items E Docs& Shortcuts~Epic vType Quick filtersd (1 work item)IN DEVCODE REVIEWIN DEV 3CODE REVIEWMCP > Enable users to get a list of callsand their detailsJIMINNY MCP CONNECTORIn Dev[ JY-208339 .000=0MCP > Enable users to get a list of dealsand their detallsJIMINNY MCP CONNECTORIn Dev-JY-20835120 [ 000=0LATUS Grouo - Exec SummaryInaccuracy(SUPPORT TICKETSIn DevF JY-20919BLOCKEDIBLOCKEDSlack integration& Reporting CenterComplete sprintPO ACCEPTANCEIQA 3PO ACCEPTANCEUpgrade to PHP 8.5PHP 8.5 UPGRADEReady for QAJY-180911.5 8 000 =0MCP > Enable the AI to know detailsabout the userJIMINNY MCP CONNECTORReady for QA[ Jy-208461.5 i2 = 0Allow owner's role to be selected whensetting up a trialEMPROVEMENT OF OUR EFFICIENCYReady for QAN JY-206131.5 87 = 0Group: QueriesDEPLOY 1delete nuospot accounts/contacisPLATFORM STABILITYReadv Io Merae÷F JY-20725DEPLOY &AJ Panorama for Call Scoring in ODAUTOMATED AI SCORINGDeployed[ JY-203610.5 © •00 =[Deadline 25 May] Migrate depricatedGemini 3.1 Flash Lite Preview modelMAINTENANCEDenloved I[ Jy-208801 d2 •00=Setup test coverage for Prophet in SonarMATNTENANCEDeployedY-199511 Ý) •e0 = |Upgrade Python and libraries - MayMAINTENANCEDeploved© JY-208811 0=1[Deadline 17 June] Migrate depricatedGemini modelsFateeuauian...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
55637
|
1931
|
7
|
2026-05-19T06:32:36.560710+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-19/1779 /Users/lukas/.screenpipe/data/data/2026-05-19/1779172356560_m2.jpg...
|
Firefox
|
Work — Mozilla Firefox
|
1
|
github.com/jiminny/app/pull/12082
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
github.com/jiminny/app/pull/12082
github.com/jiminny/app/pull/12082
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Waiting for github.com…...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.10106383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.18816489,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"github.com/jiminny/app/pull/12082","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"github.com/jiminny/app/pull/12082","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.059840426,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.1245012,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.15163608,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Waiting for github.com…","depth":5,"bounds":{"left":0.0809508,"top":0.9876297,"width":0.04255319,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
260561918276927619
|
7226952222683722885
|
visual_change
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
github.com/jiminny/app/pull/12082
github.com/jiminny/app/pull/12082
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Waiting for github.com…...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
55638
|
1930
|
5
|
2026-05-19T06:32:37.188915+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-19/1779 /Users/lukas/.screenpipe/data/data/2026-05-19/1779172357188_m1.jpg...
|
Firefox
|
JY-20808 low priority indexing queue by Vasil-Jimi JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app — Work...
|
1
|
github.com/jiminny/app/pull/12082
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Transferring data from github.com…...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Transferring data from github.com…","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
5115896447643399201
|
6071488095275765925
|
visual_change
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Transferring data from github.com…...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
55639
|
1931
|
8
|
2026-05-19T06:32:38.861279+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-19/1779 /Users/lukas/.screenpipe/data/data/2026-05-19/1779172358861_m2.jpg...
|
Firefox
|
JY-20808 low priority indexing queue by Vasil-Jimi JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app — Work...
|
1
|
github.com/jiminny/app/pull/12082
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
All issues(g then i)
All pull requests
All repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code
Pull requests (31)
Pull requests
(
31
)
Agents
Agents
Actions
Actions
Wiki...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.10106383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.18816489,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.15674867,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.1245012,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.15163608,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Skip to content","depth":6,"bounds":{"left":0.07962101,"top":0.0518755,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to content","depth":7,"bounds":{"left":0.07962101,"top":0.05347167,"width":0.0029920214,"height":0.21468475},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open menu","depth":10,"bounds":{"left":0.08494016,"top":0.06464485,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Homepage (g then d)","depth":9,"bounds":{"left":0.099567816,"top":0.06464485,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"jiminny","depth":12,"bounds":{"left":0.112865694,"top":0.06464485,"width":0.018949468,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"jiminny","depth":14,"bounds":{"left":0.11486037,"top":0.07063048,"width":0.014960106,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":12,"bounds":{"left":0.13680187,"top":0.06464485,"width":0.017785905,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":14,"bounds":{"left":0.13879654,"top":0.07063048,"width":0.008477394,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Search or jump to…","depth":9,"bounds":{"left":0.81698805,"top":0.06464485,"width":0.06565824,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Type","depth":12,"bounds":{"left":0.82928854,"top":0.07063048,"width":0.011801862,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":12,"bounds":{"left":0.8424202,"top":0.07222666,"width":0.002493351,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to search","depth":12,"bounds":{"left":0.84640956,"top":0.07063048,"width":0.021276595,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chat with Copilot","depth":10,"bounds":{"left":0.88464093,"top":0.06464485,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Open Copilot…","depth":9,"bounds":{"left":0.8949468,"top":0.06464485,"width":0.008643617,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Create new...","depth":9,"bounds":{"left":0.9115692,"top":0.06464485,"width":0.01662234,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"All issues(g then i)","depth":9,"bounds":{"left":0.93085104,"top":0.06464485,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"All pull requests","depth":9,"bounds":{"left":0.94414896,"top":0.06464485,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"All repositories","depth":9,"bounds":{"left":0.9574468,"top":0.06464485,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"You have unread notifications(g then n)","depth":9,"bounds":{"left":0.97074467,"top":0.06464485,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open user navigation menu","depth":9,"bounds":{"left":0.9840425,"top":0.06464485,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Repository navigation","depth":9,"bounds":{"left":0.079288565,"top":0.051077414,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Repository navigation","depth":10,"bounds":{"left":0.079288565,"top":0.05387071,"width":0.0787899,"height":0.023144454},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":12,"bounds":{"left":0.08494016,"top":0.09936153,"width":0.025099734,"height":0.026336791},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":14,"bounds":{"left":0.095744684,"top":0.10574621,"width":0.011469414,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull requests (31)","depth":12,"bounds":{"left":0.11269947,"top":0.09936153,"width":0.054521278,"height":0.026336791},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull requests","depth":14,"bounds":{"left":0.12333777,"top":0.10574621,"width":0.02925532,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":14,"bounds":{"left":0.15525267,"top":0.113727055,"width":0.0029920214,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"31","depth":14,"bounds":{"left":0.15824468,"top":0.113727055,"width":0.004986702,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":14,"bounds":{"left":0.16323139,"top":0.113727055,"width":0.0016622341,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Agents","depth":12,"bounds":{"left":0.16988032,"top":0.09936153,"width":0.029089095,"height":0.026336791},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Agents","depth":14,"bounds":{"left":0.18085106,"top":0.10574621,"width":0.014960106,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":12,"bounds":{"left":0.20162898,"top":0.09936153,"width":0.03025266,"height":0.026336791},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":14,"bounds":{"left":0.21276596,"top":0.10574621,"width":0.015957447,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":12,"bounds":{"left":0.23454122,"top":0.09936153,"width":0.022938829,"height":0.026336791},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
-6976400607337241547
|
8233388608912776873
|
click
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
All issues(g then i)
All pull requests
All repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code
Pull requests (31)
Pull requests
(
31
)
Agents
Agents
Actions
Actions
Wiki...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
55640
|
1930
|
6
|
2026-05-19T06:33:07.802020+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-19/1779 /Users/lukas/.screenpipe/data/data/2026-05-19/1779172387802_m1.jpg...
|
Firefox
|
JY-20808 low priority indexing queue by Vasil-Jimi JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app — Work...
|
1
|
github.com/jiminny/app/pull/12082/changes
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New chat
Gemini
PRO
PRO
Conversation with Gemini
Conversation with Gemini
Hi Lukas
Where should we start?
Where should we start?
🖼️ Create image, button, tap to use tool
🖼️ Create image
🎸 Create music, button, tap to use tool
🎸 Create music
Help me learn, button, tap to use tool
Help me learn
Boost my day, button, tap to use tool
Boost my day
Write anything, button, tap to use tool
Write anything
Enter a prompt for Gemini
encrypted
Enter a prompt for Gemini
encrypted
Open upload file menu
Tools
Open mode picker
Pro
Microphone
Send message
Summarize page
Summarize page
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
All issues(g then i)
All pull requests
All repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code
Pull requests (31)
Pull requests
(
31
)
Agents
Agents
Actions
Actions
Wiki
Wiki
Security and quality (1)
Security and quality
(
1
)
Insights
Insights
Settings
Settings
Important update
Important update
On April 24 we'll start using GitHub Copilot interaction data for AI model training unless you opt out.
Review this update
Review this update
and manage your preferences in your
GitHub account settings
GitHub account settings
.
Dismiss banner
JY-20808 low priority indexing queue #12082 Edit title
JY-20808 low priority indexing queue
#
12082
Edit title
Preview
Preview
Awaiting approval
Awaiting approval
Code
Code
Open
Vasil-Jiminny
Vasil-Jiminny
wants to merge 36 commits into
master
master
from
JY-20808-low-priority-indexing-queue
JY-20808-low-priority-indexing-queue
Copy head branch name to clipboard
Lines changed: 432 additions & 159 deletions
Conversation (5)
Conversation
(
5
)
Commits (36)
Commits
(
36
)
Checks (3)
Checks
(
3
)
Files changed (18)
Files changed
(
18
)
Pull Request Toolbar
Pull Request Toolbar
Collapse file tree
All commits
All commits
0 of 18 files viewed
Submit review
Submit
review
Open diff view settings
Open overview panel
Open comments panel
(
0
)
Filter files…
Filter options
File tree
File tree
app
Component/ES
Listeners
UpdateMultipleTargetsListener.php
UpdateMultipleTargetsListener.php
UpdateSingleTargetListener.php
UpdateSingleTargetListener.php
Processor
Actions
UpsertDocumentsAction.php
UpsertDocumentsAction.php
DTOs
SelectionList.php
SelectionList.php
Traits
SelectEntityListTrait.php
SelectEntityListTrait.php
TargetEntitiesSelector.php
TargetEntitiesSelector.php
AsyncUpdateElasticSearch.php
AsyncUpdateElasticSearch.php
QueuePriorityEnum.php
QueuePriorityEnum.php
UpdateProcessManager.php
UpdateProcessManager.php
Console/Commands/Elasticsearch
AsyncUpdateEsEntities.php
AsyncUpdateEsEntities.php
ResetAsyncElasticSearchCommand.php
ResetAsyncElasticSearchCommand.php
tests/Unit/Component/ES
Processor
DTOs
SelectionListTest.php
SelectionListTest.php
Traits
SelectEntityListTraitTest.php
SelectEntityListTraitTest.php
BatchStatusManagerTest.php
BatchStatusManagerTest.php
TargetEntitiesSelectorTest.php
TargetEntitiesSelectorTest.php
AsyncUpdateElasticSearchTest.php
AsyncUpdateElasticSearchTest.php
QueuePriorityEnumTest.php
QueuePriorityEnumTest.php
UpdateProcessManagerTest.php
UpdateProcessManagerTest.php
Collapse file
app/Component/ES/Listeners/UpdateMultipleTargetsListener.php
app/Component/ES/Listeners/UpdateMultipleTargetsListener.php
app/Component/ES/Listeners/UpdateMultipleTargetsListener.php
Copy file name to clipboard
Expand all lines: app/Component/ES/Listeners/UpdateMultipleTargetsListener.php...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"WORK, Google Account: lukas.kovalik@jiminny.com","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Main menu","depth":12,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New chat","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gemini","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"PRO","depth":11,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"PRO","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Conversation with Gemini","depth":15,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Hi Lukas","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Where should we start?","depth":22,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Where should we start?","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"🖼️ Create image, button, tap to use tool","depth":22,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"🖼️ Create image","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"🎸 Create music, button, tap to use tool","depth":22,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"🎸 Create music","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Help me learn, button, tap to use tool","depth":22,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Help me learn","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Boost my day, button, tap to use tool","depth":22,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Boost my day","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Write anything, button, tap to use tool","depth":22,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Write anything","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextArea","text":"Enter a prompt for Gemini\nencrypted","depth":20,"on_screen":true,"value":"Enter a prompt for Gemini\nencrypted","help_text":"","role_description":"text entry area","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Enter a prompt for Gemini","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"encrypted","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open upload file menu","depth":20,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tools","depth":18,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open mode picker","depth":20,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pro","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Microphone","depth":19,"on_screen":true,"role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Send message","depth":19,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Summarize page","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Skip to content","depth":6,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to content","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open menu","depth":10,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Homepage (g then d)","depth":9,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"jiminny","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"jiminny","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Search or jump to…","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Type","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to search","depth":12,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chat with Copilot","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Open Copilot…","depth":9,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Create new...","depth":9,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"All issues(g then i)","depth":9,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"All pull requests","depth":9,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"All repositories","depth":9,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"You have unread notifications(g then n)","depth":9,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open user navigation menu","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Repository navigation","depth":9,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Repository navigation","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull requests (31)","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull requests","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"31","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Agents","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Agents","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Security and quality (1)","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Security and quality","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Insights","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Insights","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":12,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Important update","depth":10,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Important update","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"On April 24 we'll start using GitHub Copilot interaction data for AI model training unless you opt out.","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Review this update","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Review this update","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and manage your preferences in your","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"GitHub account settings","depth":10,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub account settings","depth":11,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":10,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Dismiss banner","depth":9,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"JY-20808 low priority indexing queue #12082 Edit title","depth":13,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"JY-20808 low priority indexing queue","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"#","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12082","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit title","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Preview","depth":13,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Preview","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Awaiting approval","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Awaiting approval","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Code","depth":13,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Vasil-Jiminny","depth":15,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Vasil-Jiminny","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"wants to merge 36 commits into","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"master","depth":15,"on_screen":true,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"master","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"from","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20808-low-priority-indexing-queue","depth":16,"on_screen":true,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20808-low-priority-indexing-queue","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy head branch name to clipboard","depth":16,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Lines changed: 432 additions & 159 deletions","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Conversation (5)","depth":16,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Conversation","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Commits (36)","depth":16,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Commits","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"36","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Checks (3)","depth":16,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Checks","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Files changed (18)","depth":16,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Files changed","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Pull Request Toolbar","depth":14,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Pull Request Toolbar","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse file tree","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"All commits","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All commits","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0 of 18 files viewed","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Submit review","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Submit","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"review","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Open diff view settings","depth":14,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open overview panel","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open comments panel","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"(","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Filter files…","depth":16,"on_screen":true,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Filter options","depth":16,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"File tree","depth":15,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"File tree","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Component/ES","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Listeners","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"UpdateMultipleTargetsListener.php","depth":25,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"UpdateMultipleTargetsListener.php","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"UpdateSingleTargetListener.php","depth":25,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"UpdateSingleTargetListener.php","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Processor","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Actions","depth":25,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"UpsertDocumentsAction.php","depth":27,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"UpsertDocumentsAction.php","depth":28,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DTOs","depth":25,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SelectionList.php","depth":27,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SelectionList.php","depth":28,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Traits","depth":25,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SelectEntityListTrait.php","depth":27,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SelectEntityListTrait.php","depth":28,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"TargetEntitiesSelector.php","depth":25,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"TargetEntitiesSelector.php","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"AsyncUpdateElasticSearch.php","depth":23,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AsyncUpdateElasticSearch.php","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"QueuePriorityEnum.php","depth":23,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"QueuePriorityEnum.php","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"UpdateProcessManager.php","depth":23,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"UpdateProcessManager.php","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Console/Commands/Elasticsearch","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"AsyncUpdateEsEntities.php","depth":23,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AsyncUpdateEsEntities.php","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"ResetAsyncElasticSearchCommand.php","depth":23,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ResetAsyncElasticSearchCommand.php","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"tests/Unit/Component/ES","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Processor","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DTOs","depth":23,"bounds":{"left":0.3159722,"top":0.0,"width":0.025,"height":0.018888889},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SelectionListTest.php","depth":25,"bounds":{"left":0.32152778,"top":0.0,"width":0.09652778,"height":0.018888889},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SelectionListTest.php","depth":26,"bounds":{"left":0.32152778,"top":0.0,"width":0.09652778,"height":0.018888889},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Traits","depth":23,"bounds":{"left":0.3159722,"top":0.0,"width":0.025,"height":0.018888889},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SelectEntityListTraitTest.php","depth":25,"bounds":{"left":0.32152778,"top":0.028333334,"width":0.128125,"height":0.018888889},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SelectEntityListTraitTest.php","depth":26,"bounds":{"left":0.32152778,"top":0.028333334,"width":0.128125,"height":0.018888889},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"BatchStatusManagerTest.php","depth":23,"bounds":{"left":0.3159722,"top":0.06388889,"width":0.13229166,"height":0.018888889},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"BatchStatusManagerTest.php","depth":24,"bounds":{"left":0.3159722,"top":0.06388889,"width":0.13229166,"height":0.018888889},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"TargetEntitiesSelectorTest.php","depth":23,"bounds":{"left":0.3159722,"top":0.09944444,"width":0.1375,"height":0.018888889},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"TargetEntitiesSelectorTest.php","depth":24,"bounds":{"left":0.3159722,"top":0.09944444,"width":0.1375,"height":0.018888889},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"AsyncUpdateElasticSearchTest.php","depth":21,"bounds":{"left":0.31041667,"top":0.135,"width":0.15902779,"height":0.018888889},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AsyncUpdateElasticSearchTest.php","depth":22,"bounds":{"left":0.31041667,"top":0.135,"width":0.15902779,"height":0.018888889},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"QueuePriorityEnumTest.php","depth":21,"bounds":{"left":0.31041667,"top":0.17055556,"width":0.125,"height":0.018888889},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"QueuePriorityEnumTest.php","depth":22,"bounds":{"left":0.31041667,"top":0.17055556,"width":0.125,"height":0.018888889},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"UpdateProcessManagerTest.php","depth":21,"bounds":{"left":0.31041667,"top":0.20611112,"width":0.14652778,"height":0.018888889},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"UpdateProcessManagerTest.php","depth":22,"bounds":{"left":0.31041667,"top":0.20611112,"width":0.14652778,"height":0.018888889},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse file","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"app/Component/ES/Listeners/UpdateMultipleTargetsListener.php","depth":15,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"app/Component/ES/Listeners/UpdateMultipleTargetsListener.php","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app/Component/ES/Listeners/UpdateMultipleTargetsListener.php","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy file name to clipboard","depth":15,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Expand all lines: app/Component/ES/Listeners/UpdateMultipleTargetsListener.php","depth":15,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
-6178057974300391136
|
8130694221784177991
|
click
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New chat
Gemini
PRO
PRO
Conversation with Gemini
Conversation with Gemini
Hi Lukas
Where should we start?
Where should we start?
🖼️ Create image, button, tap to use tool
🖼️ Create image
🎸 Create music, button, tap to use tool
🎸 Create music
Help me learn, button, tap to use tool
Help me learn
Boost my day, button, tap to use tool
Boost my day
Write anything, button, tap to use tool
Write anything
Enter a prompt for Gemini
encrypted
Enter a prompt for Gemini
encrypted
Open upload file menu
Tools
Open mode picker
Pro
Microphone
Send message
Summarize page
Summarize page
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
All issues(g then i)
All pull requests
All repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code
Pull requests (31)
Pull requests
(
31
)
Agents
Agents
Actions
Actions
Wiki
Wiki
Security and quality (1)
Security and quality
(
1
)
Insights
Insights
Settings
Settings
Important update
Important update
On April 24 we'll start using GitHub Copilot interaction data for AI model training unless you opt out.
Review this update
Review this update
and manage your preferences in your
GitHub account settings
GitHub account settings
.
Dismiss banner
JY-20808 low priority indexing queue #12082 Edit title
JY-20808 low priority indexing queue
#
12082
Edit title
Preview
Preview
Awaiting approval
Awaiting approval
Code
Code
Open
Vasil-Jiminny
Vasil-Jiminny
wants to merge 36 commits into
master
master
from
JY-20808-low-priority-indexing-queue
JY-20808-low-priority-indexing-queue
Copy head branch name to clipboard
Lines changed: 432 additions & 159 deletions
Conversation (5)
Conversation
(
5
)
Commits (36)
Commits
(
36
)
Checks (3)
Checks
(
3
)
Files changed (18)
Files changed
(
18
)
Pull Request Toolbar
Pull Request Toolbar
Collapse file tree
All commits
All commits
0 of 18 files viewed
Submit review
Submit
review
Open diff view settings
Open overview panel
Open comments panel
(
0
)
Filter files…
Filter options
File tree
File tree
app
Component/ES
Listeners
UpdateMultipleTargetsListener.php
UpdateMultipleTargetsListener.php
UpdateSingleTargetListener.php
UpdateSingleTargetListener.php
Processor
Actions
UpsertDocumentsAction.php
UpsertDocumentsAction.php
DTOs
SelectionList.php
SelectionList.php
Traits
SelectEntityListTrait.php
SelectEntityListTrait.php
TargetEntitiesSelector.php
TargetEntitiesSelector.php
AsyncUpdateElasticSearch.php
AsyncUpdateElasticSearch.php
QueuePriorityEnum.php
QueuePriorityEnum.php
UpdateProcessManager.php
UpdateProcessManager.php
Console/Commands/Elasticsearch
AsyncUpdateEsEntities.php
AsyncUpdateEsEntities.php
ResetAsyncElasticSearchCommand.php
ResetAsyncElasticSearchCommand.php
tests/Unit/Component/ES
Processor
DTOs
SelectionListTest.php
SelectionListTest.php
Traits
SelectEntityListTraitTest.php
SelectEntityListTraitTest.php
BatchStatusManagerTest.php
BatchStatusManagerTest.php
TargetEntitiesSelectorTest.php
TargetEntitiesSelectorTest.php
AsyncUpdateElasticSearchTest.php
AsyncUpdateElasticSearchTest.php
QueuePriorityEnumTest.php
QueuePriorityEnumTest.php
UpdateProcessManagerTest.php
UpdateProcessManagerTest.php
Collapse file
app/Component/ES/Listeners/UpdateMultipleTargetsListener.php
app/Component/ES/Listeners/UpdateMultipleTargetsListener.php
app/Component/ES/Listeners/UpdateMultipleTargetsListener.php
Copy file name to clipboard
Expand all lines: app/Component/ES/Listeners/UpdateMultipleTargetsListener.php...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
55641
|
1931
|
9
|
2026-05-19T06:33:09.841702+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-19/1779 /Users/lukas/.screenpipe/data/data/2026-05-19/1779172389841_m2.jpg...
|
Firefox
|
JY-20808 low priority indexing queue by Vasil-Jimi JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app — Work...
|
1
|
github.com/jiminny/app/pull/12082/changes
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New chat
Gemini
PRO
PRO
Conversation with Gemini
Conversation with Gemini
Copy prompt
Edit
You said I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Enter a prompt for Gemini
encrypted
Enter a prompt for Gemini
encrypted
Open upload file menu
Tools
Open mode picker
Pro
Stop response
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Gemini is typing
Summarize page
Summarize page
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
All issues(g then i)
All pull requests
All repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code
Pull requests (31)
Pull requests
(
31
)
Agents
Agents
Actions
Actions
Wiki
Wiki
Security and quality (1)
Security and quality
(
1
)
Insights
Insights
Settings
Settings
Important update
Important update
On April 24 we'll start using GitHub Copilot interaction data for AI model training unless you opt out.
Review this update
Review this update
and manage your preferences in your
GitHub account settings
GitHub account settings
.
Dismiss banner
JY-20808 low priority indexing queue #12082 Edit title
JY-20808 low priority indexing queue
#
12082
Edit title
Preview
Preview
Awaiting approval
Awaiting approval
Code
Code
Open
Vasil-Jiminny
Vasil-Jiminny
wants to merge 36 commits into
master
master
from
JY-20808-low-priority-indexing-queue
JY-20808-low-priority-indexing-queue
Copy head branch name to clipboard
Lines changed: 432 additions & 159 deletions
Conversation (5)
Conversation
(
5
)
Commits (36)
Commits
(
36
)
Checks (3)
Checks
(
3
)
Files changed (18)
Files changed
(
18
)
Pull Request Toolbar
Pull Request Toolbar
Collapse file tree
All commits
All commits
0 of 18 files viewed
Submit review
Submit
review
Open diff view settings
Open overview panel
Open comments panel
(
0
)
Filter files…
Filter options
File tree
File tree
app
Component/ES
Listeners
UpdateMultipleTargetsListener.php
UpdateMultipleTargetsListener.php
UpdateSingleTargetListener.php
UpdateSingleTargetListener.php
Processor
Actions
UpsertDocumentsAction.php
UpsertDocumentsAction.php
DTOs
SelectionList.php
SelectionList.php
Traits
SelectEntityListTrait.php
SelectEntityListTrait.php
TargetEntitiesSelector.php
TargetEntitiesSelector.php
AsyncUpdateElasticSearch.php
AsyncUpdateElasticSearch.php
QueuePriorityEnum.php
QueuePriorityEnum.php
UpdateProcessManager.php
UpdateProcessManager.php
Console/Commands/Elasticsearch
AsyncUpdateEsEntities.php
AsyncUpdateEsEntities.php
ResetAsyncElasticSearchCommand.php
ResetAsyncElasticSearchCommand.php
tests/Unit/Component/ES
Processor
DTOs
SelectionListTest.php
SelectionListTest.php
Traits
SelectEntityListTraitTest.php
SelectEntityListTraitTest.php
BatchStatusManagerTest.php
BatchStatusManagerTest.php
TargetEntitiesSelectorTest.php
TargetEntitiesSelectorTest.php
AsyncUpdateElasticSearchTest.php
AsyncUpdateElasticSearchTest.php
QueuePriorityEnumTest.php
QueuePriorityEnumTest.php
UpdateProcessManagerTest.php
UpdateProcessManagerTest.php
Collapse file
app/Component/ES/Listeners/UpdateMultipleTargetsListener.php
app/Component/ES/Listeners/UpdateMultipleTargetsListener.php
app/Component/ES/Listeners/UpdateMultipleTargetsListener.php
Copy file name to clipboard
Expand all lines: app/Component/ES/Listeners/UpdateMultipleTargetsListener.php
Lines changed: 2 additions & 1 deletion
Not Viewed
Viewed
Comment on this file
More options
Original file line number
Original file line
Diff line number
Diff line change
@@ -5,6 +5,7 @@
5
namespace
Jiminny
\
Component
\
ES
\
Listeners
;
5
namespace
Jiminny
\
Component
\
ES
\
Listeners
;
6
6
7
use
Jiminny
\
Component
\
ES
\
AsyncUpdateElasticSearch
;
7
use
Jiminny
\
Component
\
ES
\
AsyncUpdateElasticSearch
;
8
+
use
Jiminny
\
Component
\
ES
\
QueuePriorityEnum
;
8
use
Jiminny
\
Contracts
\
ES
\
Events
\
UpdateMultipleEntities
;...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.10106383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.18816489,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.15674867,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.1245012,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.15163608,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":7,"bounds":{"left":0.35854387,"top":0.055067837,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":7,"bounds":{"left":0.37051198,"top":0.055067837,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"WORK, Google Account: lukas.kovalik@jiminny.com","depth":12,"bounds":{"left":0.3678524,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Main menu","depth":12,"bounds":{"left":0.08494016,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New chat","depth":12,"bounds":{"left":0.09823803,"top":0.10454908,"width":0.028590426,"height":0.030327214},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gemini","depth":15,"bounds":{"left":0.1008976,"top":0.10973663,"width":0.021941489,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"PRO","depth":11,"bounds":{"left":0.35106382,"top":0.110135674,"width":0.014793883,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"PRO","depth":13,"bounds":{"left":0.3537234,"top":0.112529926,"width":0.009474734,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Conversation with Gemini","depth":15,"bounds":{"left":0.079288565,"top":0.14764565,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":16,"bounds":{"left":0.079288565,"top":0.15003991,"width":0.1200133,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":20,"bounds":{"left":0.17121011,"top":0.18355946,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit","depth":20,"bounds":{"left":0.18583776,"top":0.18355946,"width":0.013297873,"height":0.031923383},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;667use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;7use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;8+use Jiminny\\Component\\ES\\QueuePriorityEnum;8use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\TestCase;10use PHPUnit\\Framework\\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":20,"bounds":{"left":0.20578457,"top":0.19313647,"width":0.13696809,"height":0.09577015},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":22,"bounds":{"left":0.079288565,"top":0.19393456,"width":0.019946808,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;667use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;7use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;8+use Jiminny\\Component\\ES\\QueuePriorityEnum;8use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\TestCase;10use PHPUnit\\Framework\\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected.","depth":22,"bounds":{"left":0.20578457,"top":0.19473264,"width":0.13696809,"height":0.80526733},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":22,"bounds":{"left":0.20578457,"top":0.30965683,"width":0.13248006,"height":0.073822826},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":20,"bounds":{"left":0.34275267,"top":0.19313647,"width":0.013297873,"height":0.031923383},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXTextArea","text":"Enter a prompt for Gemini\nencrypted","depth":20,"bounds":{"left":0.11469415,"top":0.83439744,"width":0.23670213,"height":0.01915403},"on_screen":true,"value":"Enter a prompt for Gemini\nencrypted","help_text":"","role_description":"text entry area","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Enter a prompt for Gemini","depth":21,"bounds":{"left":0.12134308,"top":0.8347965,"width":0.069980055,"height":0.018355945},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"encrypted","depth":21,"bounds":{"left":0.113696806,"top":0.83439744,"width":0.0066489363,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open upload file menu","depth":20,"bounds":{"left":0.11070479,"top":0.87031126,"width":0.013297873,"height":0.031923383},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tools","depth":18,"bounds":{"left":0.12666224,"top":0.87031126,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open mode picker","depth":20,"bounds":{"left":0.31399602,"top":0.867917,"width":0.026097074,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pro","depth":23,"bounds":{"left":0.31931517,"top":0.87669593,"width":0.007480053,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Stop response","depth":19,"bounds":{"left":0.3414229,"top":0.8671189,"width":0.013962766,"height":0.033519555},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":true,"is_selected":false},{"role":"AXStaticText","text":"Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.","depth":17,"bounds":{"left":0.11303192,"top":0.92178774,"width":0.19996676,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Your privacy & Gemini Opens in a new window","depth":17,"bounds":{"left":0.31299868,"top":0.92178774,"width":0.040059842,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your privacy & Gemini","depth":18,"bounds":{"left":0.31299868,"top":0.92178774,"width":0.040059842,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Opens in a new window","depth":19,"bounds":{"left":0.079288565,"top":0.92098963,"width":0.043218084,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini is typing","depth":9,"bounds":{"left":0.079288565,"top":0.091380686,"width":0.035738032,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Summarize page","depth":7,"bounds":{"left":0.08494016,"top":0.95730245,"width":0.053523935,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":9,"bounds":{"left":0.09059176,"top":0.96249,"width":0.042220745,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Skip to content","depth":6,"bounds":{"left":0.38929522,"top":0.0518755,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to content","depth":7,"bounds":{"left":0.38929522,"top":0.05347167,"width":0.0029920214,"height":0.21468475},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open menu","depth":10,"bounds":{"left":0.39461437,"top":0.06464485,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Homepage (g then d)","depth":9,"bounds":{"left":0.40924203,"top":0.06464485,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"jiminny","depth":12,"bounds":{"left":0.4225399,"top":0.06464485,"width":0.018949468,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"jiminny","depth":14,"bounds":{"left":0.4245346,"top":0.07063048,"width":0.014960106,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":12,"bounds":{"left":0.44647607,"top":0.06464485,"width":0.017785905,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":14,"bounds":{"left":0.44847074,"top":0.07063048,"width":0.008477394,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Search or jump to…","depth":9,"bounds":{"left":0.8171542,"top":0.06464485,"width":0.06565824,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Type","depth":12,"bounds":{"left":0.8294548,"top":0.07063048,"width":0.011801862,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":12,"bounds":{"left":0.84258646,"top":0.07222666,"width":0.002493351,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to search","depth":12,"bounds":{"left":0.8465758,"top":0.07063048,"width":0.021276595,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chat with Copilot","depth":10,"bounds":{"left":0.88480717,"top":0.06464485,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Open Copilot…","depth":9,"bounds":{"left":0.89511305,"top":0.06464485,"width":0.008643617,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Create new...","depth":9,"bounds":{"left":0.91173536,"top":0.06464485,"width":0.01662234,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"All issues(g then i)","depth":9,"bounds":{"left":0.9310173,"top":0.06464485,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"All pull requests","depth":9,"bounds":{"left":0.94431514,"top":0.06464485,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"All repositories","depth":9,"bounds":{"left":0.95761305,"top":0.06464485,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"You have unread notifications(g then n)","depth":9,"bounds":{"left":0.9709109,"top":0.06464485,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open user navigation menu","depth":9,"bounds":{"left":0.98420876,"top":0.06464485,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Repository navigation","depth":9,"bounds":{"left":0.38896278,"top":0.051077414,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Repository navigation","depth":10,"bounds":{"left":0.38896278,"top":0.05387071,"width":0.0787899,"height":0.023144454},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":12,"bounds":{"left":0.39461437,"top":0.09936153,"width":0.025099734,"height":0.026336791},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":14,"bounds":{"left":0.40541887,"top":0.10574621,"width":0.011469414,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull requests (31)","depth":12,"bounds":{"left":0.42237368,"top":0.09936153,"width":0.054521278,"height":0.026336791},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull requests","depth":14,"bounds":{"left":0.43301198,"top":0.10574621,"width":0.02925532,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":14,"bounds":{"left":0.46492687,"top":0.113727055,"width":0.0029920214,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"31","depth":14,"bounds":{"left":0.46791887,"top":0.113727055,"width":0.004986702,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":14,"bounds":{"left":0.47290558,"top":0.113727055,"width":0.0016622341,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Agents","depth":12,"bounds":{"left":0.47955453,"top":0.09936153,"width":0.029089095,"height":0.026336791},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Agents","depth":14,"bounds":{"left":0.49052528,"top":0.10574621,"width":0.014960106,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":12,"bounds":{"left":0.5113032,"top":0.09936153,"width":0.03025266,"height":0.026336791},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":14,"bounds":{"left":0.52244014,"top":0.10574621,"width":0.015957447,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":12,"bounds":{"left":0.54421544,"top":0.09936153,"width":0.022938829,"height":0.026336791},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":14,"bounds":{"left":0.55502,"top":0.10574621,"width":0.009142287,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Security and quality (1)","depth":12,"bounds":{"left":0.56981385,"top":0.09936153,"width":0.0674867,"height":0.026336791},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Security and quality","depth":14,"bounds":{"left":0.5816157,"top":0.10574621,"width":0.04255319,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":14,"bounds":{"left":0.62799203,"top":0.113727055,"width":0.0029920214,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":14,"bounds":{"left":0.63098407,"top":0.113727055,"width":0.0019946808,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":14,"bounds":{"left":0.63297874,"top":0.113727055,"width":0.0018284575,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Insights","depth":12,"bounds":{"left":0.6399601,"top":0.09936153,"width":0.031083776,"height":0.026336791},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Insights","depth":14,"bounds":{"left":0.65109706,"top":0.10574621,"width":0.016788565,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":12,"bounds":{"left":0.67370343,"top":0.09936153,"width":0.032081116,"height":0.026336791},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":14,"bounds":{"left":0.68484044,"top":0.10574621,"width":0.017785905,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Important update","depth":10,"bounds":{"left":0.40292552,"top":0.14365523,"width":0.0003324468,"height":0.016759777},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Important update","depth":11,"bounds":{"left":0.40292552,"top":0.1452514,"width":0.039228722,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"On April 24 we'll start using GitHub Copilot interaction data for AI model training unless you opt out.","depth":10,"bounds":{"left":0.40292552,"top":0.1452514,"width":0.2159242,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Review this update","depth":10,"bounds":{"left":0.61884975,"top":0.1452514,"width":0.04055851,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Review this update","depth":11,"bounds":{"left":0.61884975,"top":0.1452514,"width":0.04055851,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and manage your preferences in your","depth":10,"bounds":{"left":0.6594083,"top":0.1452514,"width":0.08261303,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"GitHub account settings","depth":10,"bounds":{"left":0.74202126,"top":0.1452514,"width":0.05219415,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub account settings","depth":11,"bounds":{"left":0.74202126,"top":0.1452514,"width":0.05219415,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":10,"bounds":{"left":0.79421544,"top":0.1452514,"width":0.0013297872,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Dismiss banner","depth":9,"bounds":{"left":0.9865359,"top":0.13886672,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"JY-20808 low priority indexing queue #12082 Edit title","depth":13,"bounds":{"left":0.39993352,"top":0.19193934,"width":0.22307181,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"JY-20808 low priority indexing queue","depth":14,"bounds":{"left":0.39993352,"top":0.19273743,"width":0.17204122,"height":0.030327214},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"#","depth":15,"bounds":{"left":0.5746343,"top":0.19273743,"width":0.0066489363,"height":0.030327214},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12082","depth":15,"bounds":{"left":0.5812833,"top":0.19273743,"width":0.029753989,"height":0.030327214},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit title","depth":14,"bounds":{"left":0.61236703,"top":0.19513169,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Preview","depth":13,"bounds":{"left":0.9584442,"top":0.19992019,"width":0.031083776,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Preview","depth":15,"bounds":{"left":0.9637633,"top":0.2047087,"width":0.01512633,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Awaiting approval","depth":13,"bounds":{"left":0.86818486,"top":0.19832402,"width":0.055352394,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Awaiting approval","depth":15,"bounds":{"left":0.88048536,"top":0.20430966,"width":0.03873005,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Code","depth":13,"bounds":{"left":0.9261968,"top":0.19832402,"width":0.02825798,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":15,"bounds":{"left":0.9305186,"top":0.20430966,"width":0.011635638,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open","depth":13,"bounds":{"left":0.4105718,"top":0.23623304,"width":0.011968086,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Vasil-Jiminny","depth":15,"bounds":{"left":0.42918882,"top":0.2330407,"width":0.03025266,"height":0.016759777},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Vasil-Jiminny","depth":16,"bounds":{"left":0.42918882,"top":0.23463687,"width":0.03025266,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"wants to merge 36 commits into","depth":15,"bounds":{"left":0.46077126,"top":0.23463687,"width":0.06931516,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"master","depth":15,"bounds":{"left":0.53141624,"top":0.23264167,"width":0.018450798,"height":0.017557861},"on_screen":true,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"master","depth":16,"bounds":{"left":0.5334109,"top":0.235834,"width":0.014461436,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"from","depth":16,"bounds":{"left":0.5511968,"top":0.23463687,"width":0.009973404,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20808-low-priority-indexing-queue","depth":16,"bounds":{"left":0.5625,"top":0.23264167,"width":0.090259306,"height":0.017557861},"on_screen":true,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20808-low-priority-indexing-queue","depth":17,"bounds":{"left":0.56449467,"top":0.235834,"width":0.086269945,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy head branch name to clipboard","depth":16,"bounds":{"left":0.6540891,"top":0.23024741,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Lines changed: 432 additions & 159 deletions","depth":14,"bounds":{"left":0.9522939,"top":0.28651237,"width":0.019946808,"height":0.11412609},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Conversation (5)","depth":16,"bounds":{"left":0.39993352,"top":0.26855546,"width":0.0546875,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Conversation","depth":17,"bounds":{"left":0.41223404,"top":0.27813247,"width":0.02825798,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"bounds":{"left":0.4502992,"top":0.27813247,"width":0.0029920214,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5","depth":18,"bounds":{"left":0.45329124,"top":0.27813247,"width":0.0028257978,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"bounds":{"left":0.45611703,"top":0.27813247,"width":0.0018284575,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Commits (36)","depth":16,"bounds":{"left":0.45462102,"top":0.26855546,"width":0.04837101,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Commits","depth":17,"bounds":{"left":0.46692154,"top":0.27813247,"width":0.019115692,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"bounds":{"left":0.49867022,"top":0.27813247,"width":0.0029920214,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"36","depth":18,"bounds":{"left":0.50166225,"top":0.27813247,"width":0.005817819,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"bounds":{"left":0.50748,"top":0.27813247,"width":0.0016622341,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Checks (3)","depth":16,"bounds":{"left":0.50299203,"top":0.26855546,"width":0.042386968,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Checks","depth":17,"bounds":{"left":0.5152925,"top":0.27813247,"width":0.015957447,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"bounds":{"left":0.54105717,"top":0.27813247,"width":0.0029920214,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3","depth":18,"bounds":{"left":0.5440492,"top":0.27813247,"width":0.0028257978,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"bounds":{"left":0.546875,"top":0.27813247,"width":0.0018284575,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Files changed (18)","depth":16,"bounds":{"left":0.545379,"top":0.26855546,"width":0.058344416,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Files changed","depth":17,"bounds":{"left":0.55767953,"top":0.27813247,"width":0.029753989,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"bounds":{"left":0.5994016,"top":0.27813247,"width":0.0029920214,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18","depth":18,"bounds":{"left":0.6023936,"top":0.27813247,"width":0.0051529254,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"bounds":{"left":0.60754657,"top":0.27813247,"width":0.0016622341,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Pull Request Toolbar","depth":14,"bounds":{"left":0.39993352,"top":0.3236233,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Pull Request Toolbar","depth":15,"bounds":{"left":0.39993352,"top":0.3264166,"width":0.030086435,"height":0.08060654},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse file tree","depth":14,"bounds":{"left":0.39993352,"top":0.31284916,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"All commits","depth":14,"bounds":{"left":0.4119016,"top":0.31284916,"width":0.040392287,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All commits","depth":16,"bounds":{"left":0.42154256,"top":0.3180367,"width":0.02244016,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0 of 18 files viewed","depth":15,"bounds":{"left":0.8630319,"top":0.32521948,"width":0.014960106,"height":0.08060654},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Submit review","depth":14,"bounds":{"left":0.9027593,"top":0.31284916,"width":0.03856383,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Submit","depth":16,"bounds":{"left":0.90575135,"top":0.3180367,"width":0.014793883,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"review","depth":16,"bounds":{"left":0.9205452,"top":0.3180367,"width":0.012466756,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Open diff view settings","depth":14,"bounds":{"left":0.9439827,"top":0.31284916,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open overview panel","depth":14,"bounds":{"left":0.9616024,"top":0.31284916,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open comments panel","depth":14,"bounds":{"left":0.9722407,"top":0.31284916,"width":0.017287234,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"(","depth":16,"bounds":{"left":0.98055184,"top":0.3180367,"width":0.0026595744,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":16,"bounds":{"left":0.98321146,"top":0.3180367,"width":0.0026595744,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":16,"bounds":{"left":0.985871,"top":0.3180367,"width":0.0014960107,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Filter files…","depth":16,"bounds":{"left":0.4112367,"top":0.36193135,"width":0.06815159,"height":0.023942538},"on_screen":true,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Filter options","depth":16,"bounds":{"left":0.48238033,"top":0.36113328,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"File tree","depth":15,"bounds":{"left":0.40026596,"top":0.39944133,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"File tree","depth":16,"bounds":{"left":0.40026596,"top":0.40223464,"width":0.014295213,"height":0.0518755},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app","depth":19,"bounds":{"left":0.4162234,"top":0.40542698,"width":0.008144947,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Component/ES","depth":21,"bounds":{"left":0.41888297,"top":0.43136472,"width":0.032081116,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Listeners","depth":23,"bounds":{"left":0.42154256,"top":0.45690343,"width":0.019614361,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"UpdateMultipleTargetsListener.php","depth":25,"bounds":{"left":0.4242021,"top":0.48244214,"width":0.07496676,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"UpdateMultipleTargetsListener.php","depth":26,"bounds":{"left":0.4242021,"top":0.48244214,"width":0.07496676,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"UpdateSingleTargetListener.php","depth":25,"bounds":{"left":0.4242021,"top":0.5079808,"width":0.06865027,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"UpdateSingleTargetListener.php","depth":26,"bounds":{"left":0.4242021,"top":0.5079808,"width":0.06865027,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Processor","depth":23,"bounds":{"left":0.42154256,"top":0.53351957,"width":0.021609042,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Actions","depth":25,"bounds":{"left":0.4242021,"top":0.5594573,"width":0.016123671,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"UpsertDocumentsAction.php","depth":27,"bounds":{"left":0.4268617,"top":0.584996,"width":0.062333778,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"UpsertDocumentsAction.php","depth":28,"bounds":{"left":0.4268617,"top":0.584996,"width":0.062333778,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DTOs","depth":25,"bounds":{"left":0.4242021,"top":0.6105347,"width":0.011968086,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SelectionList.php","depth":27,"bounds":{"left":0.4268617,"top":0.63647246,"width":0.03723404,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SelectionList.php","depth":28,"bounds":{"left":0.4268617,"top":0.63647246,"width":0.03723404,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Traits","depth":25,"bounds":{"left":0.4242021,"top":0.66201115,"width":0.011968086,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SelectEntityListTrait.php","depth":27,"bounds":{"left":0.4268617,"top":0.6875499,"width":0.05236037,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SelectEntityListTrait.php","depth":28,"bounds":{"left":0.4268617,"top":0.6875499,"width":0.05236037,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"TargetEntitiesSelector.php","depth":25,"bounds":{"left":0.4242021,"top":0.7130886,"width":0.05668218,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"TargetEntitiesSelector.php","depth":26,"bounds":{"left":0.4242021,"top":0.7130886,"width":0.05668218,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"AsyncUpdateElasticSearch.php","depth":23,"bounds":{"left":0.42154256,"top":0.7386273,"width":0.06732048,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AsyncUpdateElasticSearch.php","depth":24,"bounds":{"left":0.42154256,"top":0.7386273,"width":0.06732048,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"QueuePriorityEnum.php","depth":23,"bounds":{"left":0.42154256,"top":0.764166,"width":0.05119681,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"QueuePriorityEnum.php","depth":24,"bounds":{"left":0.42154256,"top":0.764166,"width":0.05119681,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"UpdateProcessManager.php","depth":23,"bounds":{"left":0.42154256,"top":0.7897047,"width":0.06100399,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"UpdateProcessManager.php","depth":24,"bounds":{"left":0.42154256,"top":0.7897047,"width":0.06100399,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Console/Commands/Elasticsearch","depth":21,"bounds":{"left":0.41888297,"top":0.8152434,"width":0.072972074,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"AsyncUpdateEsEntities.php","depth":23,"bounds":{"left":0.42154256,"top":0.8407821,"width":0.059341755,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AsyncUpdateEsEntities.php","depth":24,"bounds":{"left":0.42154256,"top":0.8407821,"width":0.059341755,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"ResetAsyncElasticSearchCommand.php","depth":23,"bounds":{"left":0.42154256,"top":0.86632085,"width":0.08577128,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ResetAsyncElasticSearchCommand.php","depth":24,"bounds":{"left":0.42154256,"top":0.86632085,"width":0.08577128,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"tests/Unit/Component/ES","depth":19,"bounds":{"left":0.4162234,"top":0.89185953,"width":0.05418883,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Processor","depth":21,"bounds":{"left":0.41888297,"top":0.91779727,"width":0.021609042,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DTOs","depth":23,"bounds":{"left":0.42154256,"top":0.943336,"width":0.011968086,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SelectionListTest.php","depth":25,"bounds":{"left":0.4242021,"top":0.96927375,"width":0.046210106,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SelectionListTest.php","depth":26,"bounds":{"left":0.4242021,"top":0.96927375,"width":0.046210106,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Traits","depth":23,"bounds":{"left":0.42154256,"top":0.9948124,"width":0.011968086,"height":0.005187571},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SelectEntityListTraitTest.php","depth":25,"bounds":{"left":0.4242021,"top":1.0,"width":0.061336435,"height":-0.020351171},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SelectEntityListTraitTest.php","depth":26,"bounds":{"left":0.4242021,"top":1.0,"width":0.061336435,"height":-0.020351171},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"BatchStatusManagerTest.php","depth":23,"bounds":{"left":0.42154256,"top":1.0,"width":0.06333112,"height":-0.045889854},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"BatchStatusManagerTest.php","depth":24,"bounds":{"left":0.42154256,"top":1.0,"width":0.06333112,"height":-0.045889854},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"TargetEntitiesSelectorTest.php","depth":23,"bounds":{"left":0.42154256,"top":1.0,"width":0.06582447,"height":-0.07142854},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"TargetEntitiesSelectorTest.php","depth":24,"bounds":{"left":0.42154256,"top":1.0,"width":0.06582447,"height":-0.07142854},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"AsyncUpdateElasticSearchTest.php","depth":21,"bounds":{"left":0.41888297,"top":1.0,"width":0.076130316,"height":-0.09696722},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AsyncUpdateElasticSearchTest.php","depth":22,"bounds":{"left":0.41888297,"top":1.0,"width":0.076130316,"height":-0.09696722},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"QueuePriorityEnumTest.php","depth":21,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"QueuePriorityEnumTest.php","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"UpdateProcessManagerTest.php","depth":21,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"UpdateProcessManagerTest.php","depth":22,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse file","depth":14,"bounds":{"left":0.5069814,"top":0.36671987,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"app/Component/ES/Listeners/UpdateMultipleTargetsListener.php","depth":15,"bounds":{"left":0.51761967,"top":0.36951315,"width":0.14394946,"height":0.016759777},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"app/Component/ES/Listeners/UpdateMultipleTargetsListener.php","depth":16,"bounds":{"left":0.51761967,"top":0.37110934,"width":0.14394946,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app/Component/ES/Listeners/UpdateMultipleTargetsListener.php","depth":18,"bounds":{"left":0.51761967,"top":0.37310454,"width":0.14394946,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy file name to clipboard","depth":15,"bounds":{"left":0.66422874,"top":0.36671987,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Expand all lines: app/Component/ES/Listeners/UpdateMultipleTargetsListener.php","depth":15,"bounds":{"left":0.67353725,"top":0.36671987,"width":0.00930851,"height":0.022346368},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Lines changed: 2 additions & 1 deletion","depth":15,"bounds":{"left":0.9065825,"top":0.3790902,"width":0.019946808,"height":0.11412609},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Not Viewed","depth":14,"bounds":{"left":0.936004,"top":0.36671987,"width":0.026595745,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Viewed","depth":16,"bounds":{"left":0.945645,"top":0.3719074,"width":0.013962766,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Comment on this file","depth":14,"bounds":{"left":0.9652593,"top":0.36671987,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"More options","depth":14,"bounds":{"left":0.9772274,"top":0.36671987,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Original file line number","depth":17,"bounds":{"left":0.5043218,"top":0.396249,"width":0.017952127,"height":0.04708699},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Original file line","depth":17,"bounds":{"left":0.52227396,"top":0.4046289,"width":0.018118352,"height":0.030327214},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Diff line number","depth":17,"bounds":{"left":0.5403923,"top":0.396249,"width":0.01761968,"height":0.04708699},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Diff line change","depth":17,"bounds":{"left":0.55801195,"top":0.396249,"width":0.016954787,"height":0.04708699},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"@@ -5,6 +5,7 @@","depth":18,"bounds":{"left":0.5255984,"top":0.3982442,"width":0.036070477,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5","depth":16,"bounds":{"left":0.50980717,"top":0.41739824,"width":0.0023271276,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"namespace","depth":18,"bounds":{"left":0.5255984,"top":0.41739824,"width":0.021609042,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jiminny","depth":18,"bounds":{"left":0.54953456,"top":0.41739824,"width":0.016788565,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\\","depth":18,"bounds":{"left":0.56632316,"top":0.41739824,"width":0.002493351,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Component","depth":18,"bounds":{"left":0.5688165,"top":0.41739824,"width":0.021609042,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\\","depth":18,"bounds":{"left":0.59042555,"top":0.41739824,"width":0.0023271276,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ES","depth":18,"bounds":{"left":0.59275264,"top":0.41739824,"width":0.0048204786,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\\","depth":18,"bounds":{"left":0.59757316,"top":0.41739824,"width":0.0023271276,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Listeners","depth":18,"bounds":{"left":0.59990025,"top":0.41739824,"width":0.021609042,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":";","depth":18,"bounds":{"left":0.6215093,"top":0.41739824,"width":0.002493351,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5","depth":16,"bounds":{"left":0.7521609,"top":0.41739824,"width":0.002493351,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"namespace","depth":18,"bounds":{"left":0.7681183,"top":0.41739824,"width":0.02144282,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jiminny","depth":18,"bounds":{"left":0.79205453,"top":0.41739824,"width":0.016788565,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\\","depth":18,"bounds":{"left":0.8088431,"top":0.41739824,"width":0.0023271276,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Component","depth":18,"bounds":{"left":0.8111702,"top":0.41739824,"width":0.021609042,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\\","depth":18,"bounds":{"left":0.8327792,"top":0.41739824,"width":0.002493351,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ES","depth":18,"bounds":{"left":0.8352726,"top":0.41739824,"width":0.0048204786,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\\","depth":18,"bounds":{"left":0.8400931,"top":0.41739824,"width":0.0023271276,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Listeners","depth":18,"bounds":{"left":0.8424202,"top":0.41739824,"width":0.021609042,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":";","depth":18,"bounds":{"left":0.8640292,"top":0.41739824,"width":0.0023271276,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6","depth":16,"bounds":{"left":0.50980717,"top":0.4365523,"width":0.0023271276,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6","depth":16,"bounds":{"left":0.7521609,"top":0.4365523,"width":0.002493351,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7","depth":16,"bounds":{"left":0.50980717,"top":0.4557063,"width":0.0023271276,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"use","depth":18,"bounds":{"left":0.5255984,"top":0.4557063,"width":0.0071476065,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jiminny","depth":18,"bounds":{"left":0.53523934,"top":0.4557063,"width":0.016788565,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\\","depth":18,"bounds":{"left":0.55202794,"top":0.4557063,"width":0.0023271276,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Component","depth":18,"bounds":{"left":0.554355,"top":0.4557063,"width":0.021609042,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\\","depth":18,"bounds":{"left":0.5759641,"top":0.4557063,"width":0.002493351,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ES","depth":18,"bounds":{"left":0.5784575,"top":0.4557063,"width":0.004654255,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\\","depth":18,"bounds":{"left":0.5831117,"top":0.4557063,"width":0.002493351,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AsyncUpdateElasticSearch","depth":18,"bounds":{"left":0.585605,"top":0.4557063,"width":0.057513297,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":";","depth":18,"bounds":{"left":0.6431183,"top":0.4557063,"width":0.002493351,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7","depth":16,"bounds":{"left":0.7521609,"top":0.4557063,"width":0.002493351,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"use","depth":18,"bounds":{"left":0.7681183,"top":0.4557063,"width":0.0071476065,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jiminny","depth":18,"bounds":{"left":0.7775931,"top":0.4557063,"width":0.016788565,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\\","depth":18,"bounds":{"left":0.7943817,"top":0.4557063,"width":0.002493351,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Component","depth":18,"bounds":{"left":0.796875,"top":0.4557063,"width":0.021609042,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\\","depth":18,"bounds":{"left":0.81848407,"top":0.4557063,"width":0.0023271276,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ES","depth":18,"bounds":{"left":0.82081115,"top":0.4557063,"width":0.0048204786,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\\","depth":18,"bounds":{"left":0.8256317,"top":0.4557063,"width":0.0023271276,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AsyncUpdateElasticSearch","depth":18,"bounds":{"left":0.82795876,"top":0.4557063,"width":0.057679523,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":";","depth":18,"bounds":{"left":0.8856383,"top":0.4557063,"width":0.0023271276,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8","depth":16,"bounds":{"left":0.7521609,"top":0.47486034,"width":0.002493351,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+","depth":18,"bounds":{"left":0.7627992,"top":0.47486034,"width":0.0023271276,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"use","depth":18,"bounds":{"left":0.7681183,"top":0.47486034,"width":0.0071476065,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jiminny","depth":18,"bounds":{"left":0.7775931,"top":0.47486034,"width":0.016788565,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\\","depth":18,"bounds":{"left":0.7943817,"top":0.47486034,"width":0.002493351,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Component","depth":18,"bounds":{"left":0.796875,"top":0.47486034,"width":0.021609042,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\\","depth":18,"bounds":{"left":0.81848407,"top":0.47486034,"width":0.0023271276,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ES","depth":18,"bounds":{"left":0.82081115,"top":0.47486034,"width":0.0048204786,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\\","depth":18,"bounds":{"left":0.8256317,"top":0.47486034,"width":0.0023271276,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QueuePriorityEnum","depth":18,"bounds":{"left":0.82795876,"top":0.47486034,"width":0.04089096,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":";","depth":18,"bounds":{"left":0.86884975,"top":0.47486034,"width":0.0023271276,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8","depth":16,"bounds":{"left":0.50980717,"top":0.49401435,"width":0.0023271276,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"use","depth":18,"bounds":{"left":0.5255984,"top":0.49401435,"width":0.0071476065,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jiminny","depth":18,"bounds":{"left":0.53523934,"top":0.49401435,"width":0.016788565,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\\","depth":18,"bounds":{"left":0.55202794,"top":0.49401435,"width":0.0023271276,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Contracts","depth":18,"bounds":{"left":0.554355,"top":0.49401435,"width":0.021609042,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\\","depth":18,"bounds":{"left":0.5759641,"top":0.49401435,"width":0.002493351,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ES","depth":18,"bounds":{"left":0.5784575,"top":0.49401435,"width":0.004654255,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\\","depth":18,"bounds":{"left":0.5831117,"top":0.49401435,"width":0.002493351,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Events","depth":18,"bounds":{"left":0.585605,"top":0.49401435,"width":0.014295213,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\\","depth":18,"bounds":{"left":0.59990025,"top":0.49401435,"width":0.002493351,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UpdateMultipleEntities","depth":18,"bounds":{"left":0.6023936,"top":0.49401435,"width":0.05269282,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":";","depth":18,"bounds":{"left":0.65508646,"top":0.49401435,"width":0.002493351,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-3909412828975851653
|
3554588125250279701
|
visual_change
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New chat
Gemini
PRO
PRO
Conversation with Gemini
Conversation with Gemini
Copy prompt
Edit
You said I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Enter a prompt for Gemini
encrypted
Enter a prompt for Gemini
encrypted
Open upload file menu
Tools
Open mode picker
Pro
Stop response
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Gemini is typing
Summarize page
Summarize page
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
All issues(g then i)
All pull requests
All repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code
Pull requests (31)
Pull requests
(
31
)
Agents
Agents
Actions
Actions
Wiki
Wiki
Security and quality (1)
Security and quality
(
1
)
Insights
Insights
Settings
Settings
Important update
Important update
On April 24 we'll start using GitHub Copilot interaction data for AI model training unless you opt out.
Review this update
Review this update
and manage your preferences in your
GitHub account settings
GitHub account settings
.
Dismiss banner
JY-20808 low priority indexing queue #12082 Edit title
JY-20808 low priority indexing queue
#
12082
Edit title
Preview
Preview
Awaiting approval
Awaiting approval
Code
Code
Open
Vasil-Jiminny
Vasil-Jiminny
wants to merge 36 commits into
master
master
from
JY-20808-low-priority-indexing-queue
JY-20808-low-priority-indexing-queue
Copy head branch name to clipboard
Lines changed: 432 additions & 159 deletions
Conversation (5)
Conversation
(
5
)
Commits (36)
Commits
(
36
)
Checks (3)
Checks
(
3
)
Files changed (18)
Files changed
(
18
)
Pull Request Toolbar
Pull Request Toolbar
Collapse file tree
All commits
All commits
0 of 18 files viewed
Submit review
Submit
review
Open diff view settings
Open overview panel
Open comments panel
(
0
)
Filter files…
Filter options
File tree
File tree
app
Component/ES
Listeners
UpdateMultipleTargetsListener.php
UpdateMultipleTargetsListener.php
UpdateSingleTargetListener.php
UpdateSingleTargetListener.php
Processor
Actions
UpsertDocumentsAction.php
UpsertDocumentsAction.php
DTOs
SelectionList.php
SelectionList.php
Traits
SelectEntityListTrait.php
SelectEntityListTrait.php
TargetEntitiesSelector.php
TargetEntitiesSelector.php
AsyncUpdateElasticSearch.php
AsyncUpdateElasticSearch.php
QueuePriorityEnum.php
QueuePriorityEnum.php
UpdateProcessManager.php
UpdateProcessManager.php
Console/Commands/Elasticsearch
AsyncUpdateEsEntities.php
AsyncUpdateEsEntities.php
ResetAsyncElasticSearchCommand.php
ResetAsyncElasticSearchCommand.php
tests/Unit/Component/ES
Processor
DTOs
SelectionListTest.php
SelectionListTest.php
Traits
SelectEntityListTraitTest.php
SelectEntityListTraitTest.php
BatchStatusManagerTest.php
BatchStatusManagerTest.php
TargetEntitiesSelectorTest.php
TargetEntitiesSelectorTest.php
AsyncUpdateElasticSearchTest.php
AsyncUpdateElasticSearchTest.php
QueuePriorityEnumTest.php
QueuePriorityEnumTest.php
UpdateProcessManagerTest.php
UpdateProcessManagerTest.php
Collapse file
app/Component/ES/Listeners/UpdateMultipleTargetsListener.php
app/Component/ES/Listeners/UpdateMultipleTargetsListener.php
app/Component/ES/Listeners/UpdateMultipleTargetsListener.php
Copy file name to clipboard
Expand all lines: app/Component/ES/Listeners/UpdateMultipleTargetsListener.php
Lines changed: 2 additions & 1 deletion
Not Viewed
Viewed
Comment on this file
More options
Original file line number
Original file line
Diff line number
Diff line change
@@ -5,6 +5,7 @@
5
namespace
Jiminny
\
Component
\
ES
\
Listeners
;
5
namespace
Jiminny
\
Component
\
ES
\
Listeners
;
6
6
7
use
Jiminny
\
Component
\
ES
\
AsyncUpdateElasticSearch
;
7
use
Jiminny
\
Component
\
ES
\
AsyncUpdateElasticSearch
;
8
+
use
Jiminny
\
Component
\
ES
\
QueuePriorityEnum
;
8
use
Jiminny
\
Contracts
\
ES
\
Events
\
UpdateMultipleEntities
;...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
55642
|
1931
|
10
|
2026-05-19T06:33:15.893435+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-19/1779 /Users/lukas/.screenpipe/data/data/2026-05-19/1779172395893_m2.jpg...
|
Firefox
|
JY-20808 low priority indexing queue by Vasil-Jimi JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app — Work...
|
1
|
github.com/jiminny/app/pull/12082/changes
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New chat
Gemini
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
Edit
You said I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Gemini said
Gemini said
Here is a precise and concise summary of the code selection,
which refactors
SelectionListTest
to accommodate a shift from fixed high/normal priority properties to a more dynamic,
enum-driven priority group architecture.
Refactored Priority Handling
Refactored Priority Handling
Dynamic Priority Groups:
Replaces fixed high/normal array parameters with the
QueuePriorityEnum
(
HIGH
,
NORMAL
,
LOW
),
allowing entity lists to be managed dynamically by group types.
Merged Registrations:
Validates that multiple
addEntityList()
calls targeting the same priority level properly merge their data instead of overwriting it.
Group Querying:
Tests new methods
getEntityListItemsByGroup()
and
getEntityListGroups()
to retrieve group-specific IDs or an array of active group names (e.
g.,
['high', 'normal']
).
Updated State and Count Validations
Updated State and Count Validations
Instantiation:
Tests now instantiate
SelectionList
without initial constructor arguments,
using setters and action methods instead.
Empty States:
Updates assertions (
isEmpty()
) to verify state based on whether any entities have been dynamically added,
rather than checking pre-defined constructor arrays.
Stale Flags:
Changes from passing a
stale
boolean via the constructor to explicitly triggering a mutable
$selectionList->markStale()
method.
Chunk Capacity Behavior
Chunk Capacity Behavior
Flexible Chunk Sizes:
Introduces a
setChunkSize()
method,
replacing the constructor-configured chunk boundary.
Capacity Assertions:
Retains and updates the logic for
isFullChunk()
,
ensuring it accurately evaluates capacity when elements span multiple dynamic priority groups or when the chunk limit is altered mid-lifecycle.
Enter a prompt for Gemini
encrypted
Enter a prompt for Gemini
encrypted
Open upload file menu
Tools
Open mode picker
Pro
Stop response
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Summarize page
Summarize page
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
All issues(g then i)
All pull requests
All repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code
Pull requests (31)
Pull requests
(
31
)
Agents
Agents
Actions
Actions
Wiki
Wiki
Security and quality (1)
Security and quality
(
1
)
Insights
Insights
Settings
Settings
Important update
Important update
On April 24 we'll start using GitHub Copilot interaction data for AI model training unless you opt out.
Review this update
Review this update
and manage your preferences in your
GitHub account settings
GitHub account settings
.
Dismiss banner
JY-20808 low priority indexing queue #12082 Edit title
JY-20808 low priority indexing queue
#
12082
Edit title
Preview
Preview
Awaiting approval
Awaiting approval
Code
Code
Open
Vasil-Jiminny
Vasil-Jiminny
wants to merge 36 commits into
master
master
from
JY-20808-low-priority-indexing-queue
JY-20808-low-priority-indexing-queue
Copy head branch name to clipboard
Lines changed: 432 additions & 159 deletions
Conversation (5)
Conversation
(
5
)
Commits (36)
Commits
(
36
)
Checks (3)
Checks
(
3
)
Files changed (18)
Files changed
(
18
)
Pull Request Toolbar
Pull Request Toolbar
Collapse file tree
All commits
All commits
0 of 18 files viewed
Submit review
Submit
review
Open diff view settings
Open overview panel
Open comments panel
(
0
)
Filter files…
Filter options
File tree
File tree
app
Component/ES
Listeners
UpdateMultipleTargetsListener.php
UpdateMultipleTargetsListener.php
UpdateSingleTargetListener.php
UpdateSingleTargetListener.php
Processor
Actions
UpsertDocumentsAction.php
UpsertDocumentsAction.php
DTOs
SelectionList.php...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.10106383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.18816489,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.15674867,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.1245012,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.15163608,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":7,"bounds":{"left":0.35854387,"top":0.055067837,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":7,"bounds":{"left":0.37051198,"top":0.055067837,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"WORK, Google Account: lukas.kovalik@jiminny.com","depth":12,"bounds":{"left":0.3678524,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Main menu","depth":12,"bounds":{"left":0.08494016,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New chat","depth":12,"bounds":{"left":0.09823803,"top":0.10454908,"width":0.028590426,"height":0.030327214},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gemini","depth":15,"bounds":{"left":0.1008976,"top":0.10973663,"width":0.021941489,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Chat","depth":12,"bounds":{"left":0.33992687,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open menu for conversation actions.","depth":12,"bounds":{"left":0.35322472,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Conversation with Gemini","depth":15,"bounds":{"left":0.079288565,"top":0.14764565,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":16,"bounds":{"left":0.079288565,"top":0.15003991,"width":0.1200133,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":21,"bounds":{"left":0.17121011,"top":0.18355946,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit","depth":21,"bounds":{"left":0.18583776,"top":0.18355946,"width":0.013297873,"height":0.031923383},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;667use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;7use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;8+use Jiminny\\Component\\ES\\QueuePriorityEnum;8use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\TestCase;10use PHPUnit\\Framework\\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":21,"bounds":{"left":0.20578457,"top":0.19313647,"width":0.13696809,"height":0.09577015},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"bounds":{"left":0.079288565,"top":0.19393456,"width":0.019946808,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;667use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;7use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;8+use Jiminny\\Component\\ES\\QueuePriorityEnum;8use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\TestCase;10use PHPUnit\\Framework\\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected.","depth":23,"bounds":{"left":0.20578457,"top":0.19473264,"width":0.13696809,"height":0.80526733},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":23,"bounds":{"left":0.20578457,"top":0.30965683,"width":0.13248006,"height":0.073822826},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":21,"bounds":{"left":0.34275267,"top":0.19313647,"width":0.013297873,"height":0.031923383},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":20,"bounds":{"left":0.10837766,"top":0.3519553,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"bounds":{"left":0.10837766,"top":0.35395053,"width":0.04105718,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is a precise and concise summary of the code selection,","depth":23,"bounds":{"left":0.111369684,"top":0.35594574,"width":0.14827128,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"which refactors","depth":23,"bounds":{"left":0.25964096,"top":0.35594574,"width":0.040059842,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionListTest","depth":24,"bounds":{"left":0.30169547,"top":0.35714287,"width":0.047539894,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to accommodate a shift from fixed high/normal priority properties to a more dynamic,","depth":23,"bounds":{"left":0.111369684,"top":0.35594574,"width":0.24734043,"height":0.038707104},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"enum-driven priority group architecture.","depth":23,"bounds":{"left":0.111369684,"top":0.3782921,"width":0.2330452,"height":0.038707104},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Refactored Priority Handling","depth":22,"bounds":{"left":0.111369684,"top":0.44213888,"width":0.24734043,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Refactored Priority Handling","depth":23,"bounds":{"left":0.111369684,"top":0.44373503,"width":0.07413564,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dynamic Priority Groups:","depth":25,"bounds":{"left":0.12400266,"top":0.4708699,"width":0.065159574,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Replaces fixed high/normal array parameters with the","depth":25,"bounds":{"left":0.18916224,"top":0.4708699,"width":0.1314827,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QueuePriorityEnum","depth":26,"bounds":{"left":0.12599733,"top":0.4944134,"width":0.047539894,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":25,"bounds":{"left":0.17553191,"top":0.49321628,"width":0.0031582448,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HIGH","depth":26,"bounds":{"left":0.18068483,"top":0.4944134,"width":0.011136968,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":25,"bounds":{"left":0.19381648,"top":0.49321628,"width":0.0014960107,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NORMAL","depth":26,"bounds":{"left":0.19863696,"top":0.4944134,"width":0.016788565,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":25,"bounds":{"left":0.2174202,"top":0.49321628,"width":0.0013297872,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"LOW","depth":26,"bounds":{"left":0.22207446,"top":0.4944134,"width":0.00831117,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"),","depth":25,"bounds":{"left":0.23238032,"top":0.49321628,"width":0.0033244682,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"allowing entity lists to be managed dynamically by group types.","depth":25,"bounds":{"left":0.12400266,"top":0.49321628,"width":0.23470744,"height":0.038707104},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Merged Registrations:","depth":25,"bounds":{"left":0.12400266,"top":0.54668796,"width":0.05718085,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Validates that multiple","depth":25,"bounds":{"left":0.18118352,"top":0.54668796,"width":0.056017287,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList()","depth":26,"bounds":{"left":0.23919548,"top":0.54788506,"width":0.041888297,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"calls targeting the same priority level properly merge their data instead of overwriting it.","depth":25,"bounds":{"left":0.12400266,"top":0.54668796,"width":0.21974733,"height":0.038707104},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Group Querying:","depth":25,"bounds":{"left":0.12400266,"top":0.60015965,"width":0.04305186,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tests new methods","depth":25,"bounds":{"left":0.16705452,"top":0.60015965,"width":0.049035903,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getEntityListItemsByGroup()","depth":26,"bounds":{"left":0.21808511,"top":0.60135674,"width":0.075465426,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":25,"bounds":{"left":0.29554522,"top":0.60015965,"width":0.011801862,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getEntityListGroups()","depth":26,"bounds":{"left":0.12599733,"top":0.6237031,"width":0.05867686,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to retrieve group-specific IDs or an array of active group names (e.","depth":25,"bounds":{"left":0.18666889,"top":0.62250596,"width":0.16256648,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"g.,","depth":25,"bounds":{"left":0.3492354,"top":0.62250596,"width":0.005817819,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"['high', 'normal']","depth":26,"bounds":{"left":0.12599733,"top":0.6460495,"width":0.050199468,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":25,"bounds":{"left":0.17819148,"top":0.64485234,"width":0.0033244682,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Updated State and Count Validations","depth":22,"bounds":{"left":0.111369684,"top":0.6863527,"width":0.24734043,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Updated State and Count Validations","depth":23,"bounds":{"left":0.111369684,"top":0.68794894,"width":0.09541223,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Instantiation:","depth":25,"bounds":{"left":0.12400266,"top":0.7150838,"width":0.034574468,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tests now instantiate","depth":25,"bounds":{"left":0.15857713,"top":0.7150838,"width":0.053357713,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":26,"bounds":{"left":0.21392952,"top":0.71628094,"width":0.036236703,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"without initial constructor arguments,","depth":25,"bounds":{"left":0.2521609,"top":0.7150838,"width":0.091755316,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"using setters and action methods instead.","depth":25,"bounds":{"left":0.12400266,"top":0.7150838,"width":0.23470744,"height":0.038707104},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Empty States:","depth":25,"bounds":{"left":0.12400266,"top":0.76855546,"width":0.035904255,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Updates assertions (","depth":25,"bounds":{"left":0.15990691,"top":0.76855546,"width":0.05119681,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"isEmpty()","depth":26,"bounds":{"left":0.2130984,"top":0.7697526,"width":0.025099734,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") to verify state based on whether any entities have been dynamically added,","depth":25,"bounds":{"left":0.12400266,"top":0.76855546,"width":0.22822474,"height":0.038707104},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"rather than checking pre-defined constructor arrays.","depth":25,"bounds":{"left":0.19714096,"top":0.79090184,"width":0.12932181,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Stale Flags:","depth":25,"bounds":{"left":0.12400266,"top":0.82202715,"width":0.029753989,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Changes from passing a","depth":25,"bounds":{"left":0.15375665,"top":0.82202715,"width":0.060837764,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"stale","depth":26,"bounds":{"left":0.2165891,"top":0.82322425,"width":0.013962766,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"boolean via the constructor to explicitly triggering a mutable","depth":25,"bounds":{"left":0.12400266,"top":0.82202715,"width":0.23188165,"height":0.038707104},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$selectionList->markStale()","depth":26,"bounds":{"left":0.1512633,"top":0.8455706,"width":0.075465426,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method.","depth":25,"bounds":{"left":0.2287234,"top":0.8443735,"width":0.02144282,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Chunk Capacity Behavior","depth":22,"bounds":{"left":0.111369684,"top":0.8858739,"width":0.24734043,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Chunk Capacity Behavior","depth":23,"bounds":{"left":0.111369684,"top":0.88747007,"width":0.06615692,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Flexible Chunk Sizes:","depth":25,"bounds":{"left":0.12400266,"top":0.91460496,"width":0.05435505,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Introduces a","depth":25,"bounds":{"left":0.1783577,"top":0.91460496,"width":0.03274601,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"setChunkSize()","depth":26,"bounds":{"left":0.2130984,"top":0.91580206,"width":0.0390625,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method,","depth":25,"bounds":{"left":0.25415558,"top":0.91460496,"width":0.02144282,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"replacing the constructor-configured chunk boundary.","depth":25,"bounds":{"left":0.12400266,"top":0.91460496,"width":0.21675532,"height":0.038707104},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Capacity Assertions:","depth":25,"bounds":{"left":0.12400266,"top":0.9680766,"width":0.054022606,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Retains and updates the logic for","depth":25,"bounds":{"left":0.17802526,"top":0.9680766,"width":0.08228058,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"isFullChunk()","depth":26,"bounds":{"left":0.26230052,"top":0.96927375,"width":0.036236703,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":25,"bounds":{"left":0.30053192,"top":0.9680766,"width":0.0014960107,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ensuring it accurately evaluates capacity when elements span multiple dynamic priority groups or when the chunk limit is altered mid-lifecycle.","depth":25,"bounds":{"left":0.12400266,"top":0.9680766,"width":0.23404256,"height":0.031923413},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextArea","text":"Enter a prompt for Gemini\nencrypted","depth":20,"bounds":{"left":0.11469415,"top":0.83439744,"width":0.23670213,"height":0.01915403},"on_screen":true,"value":"Enter a prompt for Gemini\nencrypted","help_text":"","role_description":"text entry area","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Enter a prompt for Gemini","depth":21,"bounds":{"left":0.12134308,"top":0.8347965,"width":0.069980055,"height":0.018355945},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"encrypted","depth":21,"bounds":{"left":0.113696806,"top":0.83439744,"width":0.0066489363,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open upload file menu","depth":20,"bounds":{"left":0.11070479,"top":0.87031126,"width":0.013297873,"height":0.031923383},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tools","depth":18,"bounds":{"left":0.12666224,"top":0.87031126,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open mode picker","depth":20,"bounds":{"left":0.31399602,"top":0.867917,"width":0.026097074,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pro","depth":23,"bounds":{"left":0.31931517,"top":0.87669593,"width":0.007480053,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Stop response","depth":19,"bounds":{"left":0.3414229,"top":0.8671189,"width":0.013962766,"height":0.033519555},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.","depth":17,"bounds":{"left":0.11303192,"top":0.92178774,"width":0.19996676,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Your privacy & Gemini Opens in a new window","depth":17,"bounds":{"left":0.31299868,"top":0.92178774,"width":0.040059842,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your privacy & Gemini","depth":18,"bounds":{"left":0.31299868,"top":0.92178774,"width":0.040059842,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Opens in a new window","depth":19,"bounds":{"left":0.079288565,"top":0.92098963,"width":0.043218084,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Summarize page","depth":7,"bounds":{"left":0.08494016,"top":0.95730245,"width":0.053523935,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":9,"bounds":{"left":0.09059176,"top":0.96249,"width":0.042220745,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Skip to content","depth":6,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to content","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open menu","depth":10,"bounds":{"left":0.39461437,"top":0.0,"width":0.010638298,"height":0.025538707},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Homepage (g then d)","depth":9,"bounds":{"left":0.40924203,"top":0.0,"width":0.010638298,"height":0.025538707},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"jiminny","depth":12,"bounds":{"left":0.4225399,"top":0.0,"width":0.018949468,"height":0.025538707},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"jiminny","depth":14,"bounds":{"left":0.4245346,"top":0.0,"width":0.014960106,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":12,"bounds":{"left":0.44647607,"top":0.0,"width":0.017785905,"height":0.025538707},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":14,"bounds":{"left":0.44847074,"top":0.0,"width":0.008477394,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Search or jump to…","depth":9,"bounds":{"left":0.8171542,"top":0.0,"width":0.06565824,"height":0.025538707},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Type","depth":12,"bounds":{"left":0.8294548,"top":0.0,"width":0.011801862,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":12,"bounds":{"left":0.84258646,"top":0.0,"width":0.002493351,"height":0.011572227},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to search","depth":12,"bounds":{"left":0.8465758,"top":0.0,"width":0.021276595,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chat with Copilot","depth":10,"bounds":{"left":0.88480717,"top":0.0,"width":0.010638298,"height":0.025538707},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Open Copilot…","depth":9,"bounds":{"left":0.89511305,"top":0.0,"width":0.008643617,"height":0.025538707},"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Create new...","depth":9,"bounds":{"left":0.91173536,"top":0.0,"width":0.01662234,"height":0.025538707},"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"All issues(g then i)","depth":9,"bounds":{"left":0.9310173,"top":0.0,"width":0.010638298,"height":0.025538707},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"All pull requests","depth":9,"bounds":{"left":0.94431514,"top":0.0,"width":0.010638298,"height":0.025538707},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"All repositories","depth":9,"bounds":{"left":0.95761305,"top":0.0,"width":0.010638298,"height":0.025538707},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"You have unread notifications(g then n)","depth":9,"bounds":{"left":0.9709109,"top":0.0,"width":0.010638298,"height":0.025538707},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open user navigation menu","depth":9,"bounds":{"left":0.98420876,"top":0.0,"width":0.010638298,"height":0.025538707},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Repository navigation","depth":9,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Repository navigation","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":12,"bounds":{"left":0.39461437,"top":0.0,"width":0.025099734,"height":0.026336791},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":14,"bounds":{"left":0.40541887,"top":0.0,"width":0.011469414,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull requests (31)","depth":12,"bounds":{"left":0.42237368,"top":0.0,"width":0.054521278,"height":0.026336791},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull requests","depth":14,"bounds":{"left":0.43301198,"top":0.0,"width":0.02925532,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":14,"bounds":{"left":0.46492687,"top":0.0,"width":0.0029920214,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"31","depth":14,"bounds":{"left":0.46791887,"top":0.0,"width":0.004986702,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":14,"bounds":{"left":0.47290558,"top":0.0,"width":0.0016622341,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Agents","depth":12,"bounds":{"left":0.47955453,"top":0.0,"width":0.029089095,"height":0.026336791},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Agents","depth":14,"bounds":{"left":0.49052528,"top":0.0,"width":0.014960106,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":12,"bounds":{"left":0.5113032,"top":0.0,"width":0.03025266,"height":0.026336791},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":14,"bounds":{"left":0.52244014,"top":0.0,"width":0.015957447,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":12,"bounds":{"left":0.54421544,"top":0.0,"width":0.022938829,"height":0.026336791},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":14,"bounds":{"left":0.55502,"top":0.0,"width":0.009142287,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Security and quality (1)","depth":12,"bounds":{"left":0.56981385,"top":0.0,"width":0.0674867,"height":0.026336791},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Security and quality","depth":14,"bounds":{"left":0.5816157,"top":0.0,"width":0.04255319,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":14,"bounds":{"left":0.62799203,"top":0.0,"width":0.0029920214,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":14,"bounds":{"left":0.63098407,"top":0.0,"width":0.0019946808,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":14,"bounds":{"left":0.63297874,"top":0.0,"width":0.0018284575,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Insights","depth":12,"bounds":{"left":0.6399601,"top":0.0,"width":0.031083776,"height":0.026336791},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Insights","depth":14,"bounds":{"left":0.65109706,"top":0.0,"width":0.016788565,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":12,"bounds":{"left":0.67370343,"top":0.0,"width":0.032081116,"height":0.026336791},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":14,"bounds":{"left":0.68484044,"top":0.0,"width":0.017785905,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Important update","depth":10,"bounds":{"left":0.40292552,"top":0.0,"width":0.0003324468,"height":0.016759777},"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Important update","depth":11,"bounds":{"left":0.40292552,"top":0.0,"width":0.039228722,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"On April 24 we'll start using GitHub Copilot interaction data for AI model training unless you opt out.","depth":10,"bounds":{"left":0.40292552,"top":0.0,"width":0.2159242,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Review this update","depth":10,"bounds":{"left":0.61884975,"top":0.0,"width":0.04055851,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Review this update","depth":11,"bounds":{"left":0.61884975,"top":0.0,"width":0.04055851,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and manage your preferences in your","depth":10,"bounds":{"left":0.6594083,"top":0.0,"width":0.08261303,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"GitHub account settings","depth":10,"bounds":{"left":0.74202126,"top":0.0,"width":0.05219415,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub account settings","depth":11,"bounds":{"left":0.74202126,"top":0.0,"width":0.05219415,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":10,"bounds":{"left":0.79421544,"top":0.0,"width":0.0013297872,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Dismiss banner","depth":9,"bounds":{"left":0.9865359,"top":0.0,"width":0.010638298,"height":0.025538707},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"JY-20808 low priority indexing queue #12082 Edit title","depth":13,"bounds":{"left":0.39993352,"top":0.027533919,"width":0.22307181,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"JY-20808 low priority indexing queue","depth":14,"bounds":{"left":0.39993352,"top":0.028332002,"width":0.17204122,"height":0.030327214},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"#","depth":15,"bounds":{"left":0.5746343,"top":0.028332002,"width":0.0066489363,"height":0.030327214},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12082","depth":15,"bounds":{"left":0.5812833,"top":0.028332002,"width":0.029753989,"height":0.030327214},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit title","depth":14,"bounds":{"left":0.61236703,"top":0.030726258,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Preview","depth":13,"bounds":{"left":0.9584442,"top":0.035514764,"width":0.031083776,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Preview","depth":15,"bounds":{"left":0.9637633,"top":0.04030327,"width":0.01512633,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Awaiting approval","depth":13,"bounds":{"left":0.86818486,"top":0.033918597,"width":0.055352394,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Awaiting approval","depth":15,"bounds":{"left":0.88048536,"top":0.03990423,"width":0.03873005,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Code","depth":13,"bounds":{"left":0.9261968,"top":0.033918597,"width":0.02825798,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":15,"bounds":{"left":0.9305186,"top":0.03990423,"width":0.011635638,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open","depth":13,"bounds":{"left":0.4105718,"top":0.07182761,"width":0.011968086,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Vasil-Jiminny","depth":15,"bounds":{"left":0.42918882,"top":0.06863528,"width":0.03025266,"height":0.016759777},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Vasil-Jiminny","depth":16,"bounds":{"left":0.42918882,"top":0.070231445,"width":0.03025266,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"wants to merge 36 commits into","depth":15,"bounds":{"left":0.46077126,"top":0.070231445,"width":0.06931516,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"master","depth":15,"bounds":{"left":0.53141624,"top":0.06823623,"width":0.018450798,"height":0.017557861},"on_screen":true,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"master","depth":16,"bounds":{"left":0.5334109,"top":0.071428575,"width":0.014461436,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"from","depth":16,"bounds":{"left":0.5511968,"top":0.070231445,"width":0.009973404,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20808-low-priority-indexing-queue","depth":16,"bounds":{"left":0.5625,"top":0.06823623,"width":0.090259306,"height":0.017557861},"on_screen":true,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20808-low-priority-indexing-queue","depth":17,"bounds":{"left":0.56449467,"top":0.071428575,"width":0.086269945,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy head branch name to clipboard","depth":16,"bounds":{"left":0.6540891,"top":0.06584198,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Lines changed: 432 additions & 159 deletions","depth":14,"bounds":{"left":0.9522939,"top":0.12210695,"width":0.019946808,"height":0.11412609},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Conversation (5)","depth":16,"bounds":{"left":0.39993352,"top":0.10415004,"width":0.0546875,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Conversation","depth":17,"bounds":{"left":0.41223404,"top":0.113727055,"width":0.02825798,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"bounds":{"left":0.4502992,"top":0.113727055,"width":0.0029920214,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5","depth":18,"bounds":{"left":0.45329124,"top":0.113727055,"width":0.0028257978,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"bounds":{"left":0.45611703,"top":0.113727055,"width":0.0018284575,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Commits (36)","depth":16,"bounds":{"left":0.45462102,"top":0.10415004,"width":0.04837101,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Commits","depth":17,"bounds":{"left":0.46692154,"top":0.113727055,"width":0.019115692,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"bounds":{"left":0.49867022,"top":0.113727055,"width":0.0029920214,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"36","depth":18,"bounds":{"left":0.50166225,"top":0.113727055,"width":0.005817819,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"bounds":{"left":0.50748,"top":0.113727055,"width":0.0016622341,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Checks (3)","depth":16,"bounds":{"left":0.50299203,"top":0.10415004,"width":0.042386968,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Checks","depth":17,"bounds":{"left":0.5152925,"top":0.113727055,"width":0.015957447,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"bounds":{"left":0.54105717,"top":0.113727055,"width":0.0029920214,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3","depth":18,"bounds":{"left":0.5440492,"top":0.113727055,"width":0.0028257978,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"bounds":{"left":0.546875,"top":0.113727055,"width":0.0018284575,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Files changed (18)","depth":16,"bounds":{"left":0.545379,"top":0.10415004,"width":0.058344416,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Files changed","depth":17,"bounds":{"left":0.55767953,"top":0.113727055,"width":0.029753989,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"bounds":{"left":0.5994016,"top":0.113727055,"width":0.0029920214,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18","depth":18,"bounds":{"left":0.6023936,"top":0.113727055,"width":0.0051529254,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"bounds":{"left":0.60754657,"top":0.113727055,"width":0.0016622341,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Pull Request Toolbar","depth":14,"bounds":{"left":0.39993352,"top":0.15921788,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Pull Request Toolbar","depth":15,"bounds":{"left":0.39993352,"top":0.16201118,"width":0.030086435,"height":0.08060654},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse file tree","depth":14,"bounds":{"left":0.39993352,"top":0.14844373,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"All commits","depth":14,"bounds":{"left":0.4119016,"top":0.14844373,"width":0.040392287,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All commits","depth":16,"bounds":{"left":0.42154256,"top":0.15363128,"width":0.02244016,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0 of 18 files viewed","depth":15,"bounds":{"left":0.8630319,"top":0.16081405,"width":0.014960106,"height":0.08060654},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Submit review","depth":14,"bounds":{"left":0.9027593,"top":0.14764565,"width":0.03856383,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Submit","depth":16,"bounds":{"left":0.90575135,"top":0.1528332,"width":0.014793883,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"review","depth":16,"bounds":{"left":0.9205452,"top":0.1528332,"width":0.012466756,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Open diff view settings","depth":14,"bounds":{"left":0.9439827,"top":0.14764565,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open overview panel","depth":14,"bounds":{"left":0.9616024,"top":0.14764565,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open comments panel","depth":14,"bounds":{"left":0.9722407,"top":0.14764565,"width":0.017287234,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"(","depth":16,"bounds":{"left":0.98055184,"top":0.1528332,"width":0.0026595744,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":16,"bounds":{"left":0.98321146,"top":0.1528332,"width":0.0026595744,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":16,"bounds":{"left":0.985871,"top":0.1528332,"width":0.0014960107,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Filter files…","depth":16,"bounds":{"left":0.4112367,"top":0.19672786,"width":0.06815159,"height":0.023942538},"on_screen":true,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Filter options","depth":16,"bounds":{"left":0.48238033,"top":0.19592977,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"File tree","depth":15,"bounds":{"left":0.40026596,"top":0.23423783,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"File tree","depth":16,"bounds":{"left":0.40026596,"top":0.23703113,"width":0.014295213,"height":0.0518755},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app","depth":19,"bounds":{"left":0.4162234,"top":0.24022347,"width":0.008144947,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Component/ES","depth":21,"bounds":{"left":0.41888297,"top":0.2661612,"width":0.032081116,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Listeners","depth":23,"bounds":{"left":0.42154256,"top":0.29169992,"width":0.019614361,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"UpdateMultipleTargetsListener.php","depth":25,"bounds":{"left":0.4242021,"top":0.31723863,"width":0.07496676,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"UpdateMultipleTargetsListener.php","depth":26,"bounds":{"left":0.4242021,"top":0.31723863,"width":0.07496676,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"UpdateSingleTargetListener.php","depth":25,"bounds":{"left":0.4242021,"top":0.34277734,"width":0.06865027,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"UpdateSingleTargetListener.php","depth":26,"bounds":{"left":0.4242021,"top":0.34277734,"width":0.06865027,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Processor","depth":23,"bounds":{"left":0.42154256,"top":0.36831605,"width":0.021609042,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Actions","depth":25,"bounds":{"left":0.4242021,"top":0.3942538,"width":0.016123671,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"UpsertDocumentsAction.php","depth":27,"bounds":{"left":0.4268617,"top":0.4197925,"width":0.062333778,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"UpsertDocumentsAction.php","depth":28,"bounds":{"left":0.4268617,"top":0.4197925,"width":0.062333778,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DTOs","depth":25,"bounds":{"left":0.4242021,"top":0.44533122,"width":0.011968086,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SelectionList.php","depth":27,"bounds":{"left":0.4268617,"top":0.47126895,"width":0.03723404,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
-5307086782212463553
|
3556839925063907735
|
visual_change
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New chat
Gemini
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
Edit
You said I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Gemini said
Gemini said
Here is a precise and concise summary of the code selection,
which refactors
SelectionListTest
to accommodate a shift from fixed high/normal priority properties to a more dynamic,
enum-driven priority group architecture.
Refactored Priority Handling
Refactored Priority Handling
Dynamic Priority Groups:
Replaces fixed high/normal array parameters with the
QueuePriorityEnum
(
HIGH
,
NORMAL
,
LOW
),
allowing entity lists to be managed dynamically by group types.
Merged Registrations:
Validates that multiple
addEntityList()
calls targeting the same priority level properly merge their data instead of overwriting it.
Group Querying:
Tests new methods
getEntityListItemsByGroup()
and
getEntityListGroups()
to retrieve group-specific IDs or an array of active group names (e.
g.,
['high', 'normal']
).
Updated State and Count Validations
Updated State and Count Validations
Instantiation:
Tests now instantiate
SelectionList
without initial constructor arguments,
using setters and action methods instead.
Empty States:
Updates assertions (
isEmpty()
) to verify state based on whether any entities have been dynamically added,
rather than checking pre-defined constructor arrays.
Stale Flags:
Changes from passing a
stale
boolean via the constructor to explicitly triggering a mutable
$selectionList->markStale()
method.
Chunk Capacity Behavior
Chunk Capacity Behavior
Flexible Chunk Sizes:
Introduces a
setChunkSize()
method,
replacing the constructor-configured chunk boundary.
Capacity Assertions:
Retains and updates the logic for
isFullChunk()
,
ensuring it accurately evaluates capacity when elements span multiple dynamic priority groups or when the chunk limit is altered mid-lifecycle.
Enter a prompt for Gemini
encrypted
Enter a prompt for Gemini
encrypted
Open upload file menu
Tools
Open mode picker
Pro
Stop response
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Summarize page
Summarize page
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
All issues(g then i)
All pull requests
All repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code
Pull requests (31)
Pull requests
(
31
)
Agents
Agents
Actions
Actions
Wiki
Wiki
Security and quality (1)
Security and quality
(
1
)
Insights
Insights
Settings
Settings
Important update
Important update
On April 24 we'll start using GitHub Copilot interaction data for AI model training unless you opt out.
Review this update
Review this update
and manage your preferences in your
GitHub account settings
GitHub account settings
.
Dismiss banner
JY-20808 low priority indexing queue #12082 Edit title
JY-20808 low priority indexing queue
#
12082
Edit title
Preview
Preview
Awaiting approval
Awaiting approval
Code
Code
Open
Vasil-Jiminny
Vasil-Jiminny
wants to merge 36 commits into
master
master
from
JY-20808-low-priority-indexing-queue
JY-20808-low-priority-indexing-queue
Copy head branch name to clipboard
Lines changed: 432 additions & 159 deletions
Conversation (5)
Conversation
(
5
)
Commits (36)
Commits
(
36
)
Checks (3)
Checks
(
3
)
Files changed (18)
Files changed
(
18
)
Pull Request Toolbar
Pull Request Toolbar
Collapse file tree
All commits
All commits
0 of 18 files viewed
Submit review
Submit
review
Open diff view settings
Open overview panel
Open comments panel
(
0
)
Filter files…
Filter options
File tree
File tree
app
Component/ES
Listeners
UpdateMultipleTargetsListener.php
UpdateMultipleTargetsListener.php
UpdateSingleTargetListener.php
UpdateSingleTargetListener.php
Processor
Actions
UpsertDocumentsAction.php
UpsertDocumentsAction.php
DTOs
SelectionList.php...
|
55641
|
NULL
|
NULL
|
NULL
|
|
55643
|
1930
|
7
|
2026-05-19T06:33:20.230790+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-19/1779 /Users/lukas/.screenpipe/data/data/2026-05-19/1779172400230_m1.jpg...
|
Firefox
|
JY-20808 low priority indexing queue by Vasil-Jimi JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app — Work...
|
1
|
github.com/jiminny/app/pull/12082/changes
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New chat
Gemini
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
Edit
You said I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Gemini said
Gemini said
Here is a precise and concise summary of the code selection, which refactors
SelectionListTest
to accommodate a shift from fixed high/normal priority properties to a more dynamic, enum-driven priority group architecture.
Refactored Priority Handling
Refactored Priority Handling
Dynamic Priority Groups:
Replaces fixed high/normal array parameters with the
QueuePriorityEnum
(
HIGH
,
NORMAL
,
LOW
), allowing entity lists to be managed dynamically by group types.
Merged Registrations:
Validates that multiple
addEntityList()
calls targeting the same priority level properly merge their data instead of overwriting it.
Group Querying:
Tests new methods
getEntityListItemsByGroup()
and
getEntityListGroups()
to retrieve group-specific IDs or an array of active group names (e.g.,
['high', 'normal']
).
Updated State and Count Validations
Updated State and Count Validations
Instantiation:
Tests now instantiate
SelectionList
without initial constructor arguments, using setters and action methods instead.
Empty States:
Updates assertions (
isEmpty()
) to verify state based on whether any entities have been dynamically added, rather than checking pre-defined constructor arrays.
Stale Flags:
Changes from passing a
stale
boolean via the constructor to explicitly triggering a mutable
$selectionList->markStale()
method.
Chunk Capacity Behavior
Chunk Capacity Behavior
Flexible Chunk Sizes:
Introduces a
setChunkSize()
method, replacing the constructor-configured chunk boundary.
Capacity Assertions:
Retains and updates the logic for
isFullChunk()
, ensuring it accurately evaluates capacity when elements span multiple dynamic priority groups or when the chunk limit is altered mid-lifecycle.
Good response
Bad response
Redo
Share & export
Copy
Show more options
Enter a prompt for Gemini
encrypted
Enter a prompt for Gemini
encrypted
Open upload file menu
Tools
Open mode picker
Pro
Microphone
Send message
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Summarize page
Summarize page
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
All issues(g then i)
All pull requests
All repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code
Pull requests (31)
Pull requests
(
31
)
Agents
Agents
Actions
Actions
Wiki
Wiki
Security and quality (1)
Security and quality
(
1
)
Insights
Insights
Settings
Settings
Important update
Important update
On April 24 we'll start using GitHub Copilot interaction data for AI model training unless you opt out.
Review this update
Review this update
and manage your preferences in your
GitHub account settings
GitHub account settings
.
Dismiss banner
JY-20808 low priority indexing queue #12082 Edit title
JY-20808 low priority indexing queue
#
12082
Edit title
Preview
Preview
Awaiting approval
Awaiting approval
Code
Code
Open
Vasil-Jiminny
Vasil-Jiminny
wants to merge 36 commits into
master
master
from
JY-20808-low-priority-indexing-queue
JY-20808-low-priority-indexing-queue
Copy head branch name to clipboard
Lines changed: 432 additions & 159 deletions
Conversation (5)
Conversation
(
5
)
Commits (36)
Commits
(
36
)
Checks (3)
Checks
(
3
)
Files changed (18)
Files changed
(
18
)
Pull Request Toolbar
Pull Request Toolbar
Collapse file tree
All commits
All commits
0 of 18 files viewed
Submit review
Submit
review
Open diff view settings
Open overview panel
Open comments panel
(
0
)
Filter files…
Filter options
File tree
File tree
app
Component/ES
Listeners
UpdateMultipleTargetsListener.php
UpdateMultipleTargetsListener.php
UpdateSingleTargetListener.php
UpdateSingleTargetListener.php
Processor
Actions
UpsertDocumentsAction.php
UpsertDocumentsAction.php
DTOs
SelectionList.php
SelectionList.php
Traits
SelectEntityListTrait.php
SelectEntityListTrait.php
TargetEntitiesSelector.php
TargetEntitiesSelector.php
AsyncUpdateElasticSearch.php
AsyncUpdateElasticSearch.php
QueuePriorityEnum.php
QueuePriorityEnum.php
UpdateProcessManager.php
UpdateProcessManager.php...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"WORK, Google Account: lukas.kovalik@jiminny.com","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Main menu","depth":12,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New chat","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gemini","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Chat","depth":12,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open menu for conversation actions.","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Conversation with Gemini","depth":15,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":21,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;667use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;7use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;8+use Jiminny\\Component\\ES\\QueuePriorityEnum;8use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\TestCase;10use PHPUnit\\Framework\\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;667use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;7use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;8+use Jiminny\\Component\\ES\\QueuePriorityEnum;8use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\TestCase;10use PHPUnit\\Framework\\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected.","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Listen","depth":22,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is a precise and concise summary of the code selection, which refactors","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionListTest","depth":25,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to accommodate a shift from fixed high/normal priority properties to a more dynamic, enum-driven priority group architecture.","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Refactored Priority Handling","depth":23,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Refactored Priority Handling","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dynamic Priority Groups:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Replaces fixed high/normal array parameters with the","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QueuePriorityEnum","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HIGH","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NORMAL","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"LOW","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"), allowing entity lists to be managed dynamically by group types.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Merged Registrations:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Validates that multiple","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList()","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"calls targeting the same priority level properly merge their data instead of overwriting it.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Group Querying:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tests new methods","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getEntityListItemsByGroup()","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getEntityListGroups()","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to retrieve group-specific IDs or an array of active group names (e.g.,","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"['high', 'normal']","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Updated State and Count Validations","depth":23,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Updated State and Count Validations","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Instantiation:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tests now instantiate","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"without initial constructor arguments, using setters and action methods instead.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Empty States:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Updates assertions (","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"isEmpty()","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") to verify state based on whether any entities have been dynamically added, rather than checking pre-defined constructor arrays.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Stale Flags:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Changes from passing a","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"stale","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"boolean via the constructor to explicitly triggering a mutable","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$selectionList->markStale()","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Chunk Capacity Behavior","depth":23,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Chunk Capacity Behavior","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Flexible Chunk Sizes:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Introduces a","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"setChunkSize()","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method, replacing the constructor-configured chunk boundary.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Capacity Assertions:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Retains and updates the logic for","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"isFullChunk()","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", ensuring it accurately evaluates capacity when elements span multiple dynamic priority groups or when the chunk limit is altered mid-lifecycle.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":21,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":21,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Redo","depth":21,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Share & export","depth":20,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":21,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":20,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXTextArea","text":"Enter a prompt for Gemini\nencrypted","depth":20,"on_screen":true,"value":"Enter a prompt for Gemini\nencrypted","help_text":"","role_description":"text entry area","subrole":"AXUnknown","is_enabled":true,"is_focused":true,"is_selected":false},{"role":"AXStaticText","text":"Enter a prompt for Gemini","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"encrypted","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open upload file menu","depth":20,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tools","depth":18,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open mode picker","depth":20,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pro","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Microphone","depth":19,"on_screen":true,"role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Send message","depth":19,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Your privacy & Gemini Opens in a new window","depth":17,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your privacy & Gemini","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Opens in a new window","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Summarize page","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Skip to content","depth":6,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to content","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open menu","depth":10,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Homepage (g then d)","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"jiminny","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"jiminny","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Search or jump to…","depth":9,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Type","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to search","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chat with Copilot","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Open Copilot…","depth":9,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Create new...","depth":9,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"All issues(g then i)","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"All pull requests","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"All repositories","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"You have unread notifications(g then n)","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open user navigation menu","depth":9,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Repository navigation","depth":9,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Repository navigation","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull requests (31)","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull requests","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"31","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Agents","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Agents","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Security and quality (1)","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Security and quality","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Insights","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Insights","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Important update","depth":10,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Important update","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"On April 24 we'll start using GitHub Copilot interaction data for AI model training unless you opt out.","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Review this update","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Review this update","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and manage your preferences in your","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"GitHub account settings","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub account settings","depth":11,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Dismiss banner","depth":9,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"JY-20808 low priority indexing queue #12082 Edit title","depth":13,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"JY-20808 low priority indexing queue","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"#","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12082","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit title","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Preview","depth":13,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Preview","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Awaiting approval","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Awaiting approval","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Code","depth":13,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open","depth":13,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Vasil-Jiminny","depth":15,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Vasil-Jiminny","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"wants to merge 36 commits into","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"master","depth":15,"on_screen":true,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"master","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"from","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20808-low-priority-indexing-queue","depth":16,"on_screen":true,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20808-low-priority-indexing-queue","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy head branch name to clipboard","depth":16,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Lines changed: 432 additions & 159 deletions","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Conversation (5)","depth":16,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Conversation","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Commits (36)","depth":16,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Commits","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"36","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Checks (3)","depth":16,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Checks","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Files changed (18)","depth":16,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Files changed","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Pull Request Toolbar","depth":14,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Pull Request Toolbar","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse file tree","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"All commits","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All commits","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0 of 18 files viewed","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Submit review","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Submit","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"review","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Open diff view settings","depth":14,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open overview panel","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open comments panel","depth":14,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"(","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Filter files…","depth":16,"on_screen":true,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Filter options","depth":16,"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"File tree","depth":15,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"File tree","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Component/ES","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Listeners","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"UpdateMultipleTargetsListener.php","depth":25,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"UpdateMultipleTargetsListener.php","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"UpdateSingleTargetListener.php","depth":25,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"UpdateSingleTargetListener.php","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Processor","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Actions","depth":25,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"UpsertDocumentsAction.php","depth":27,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"UpsertDocumentsAction.php","depth":28,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DTOs","depth":25,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SelectionList.php","depth":27,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SelectionList.php","depth":28,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Traits","depth":25,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SelectEntityListTrait.php","depth":27,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SelectEntityListTrait.php","depth":28,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"TargetEntitiesSelector.php","depth":25,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"TargetEntitiesSelector.php","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"AsyncUpdateElasticSearch.php","depth":23,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AsyncUpdateElasticSearch.php","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"QueuePriorityEnum.php","depth":23,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"QueuePriorityEnum.php","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"UpdateProcessManager.php","depth":23,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"UpdateProcessManager.php","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
4268553074126854716
|
3554588125250222487
|
click
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New chat
Gemini
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
Edit
You said I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Gemini said
Gemini said
Here is a precise and concise summary of the code selection, which refactors
SelectionListTest
to accommodate a shift from fixed high/normal priority properties to a more dynamic, enum-driven priority group architecture.
Refactored Priority Handling
Refactored Priority Handling
Dynamic Priority Groups:
Replaces fixed high/normal array parameters with the
QueuePriorityEnum
(
HIGH
,
NORMAL
,
LOW
), allowing entity lists to be managed dynamically by group types.
Merged Registrations:
Validates that multiple
addEntityList()
calls targeting the same priority level properly merge their data instead of overwriting it.
Group Querying:
Tests new methods
getEntityListItemsByGroup()
and
getEntityListGroups()
to retrieve group-specific IDs or an array of active group names (e.g.,
['high', 'normal']
).
Updated State and Count Validations
Updated State and Count Validations
Instantiation:
Tests now instantiate
SelectionList
without initial constructor arguments, using setters and action methods instead.
Empty States:
Updates assertions (
isEmpty()
) to verify state based on whether any entities have been dynamically added, rather than checking pre-defined constructor arrays.
Stale Flags:
Changes from passing a
stale
boolean via the constructor to explicitly triggering a mutable
$selectionList->markStale()
method.
Chunk Capacity Behavior
Chunk Capacity Behavior
Flexible Chunk Sizes:
Introduces a
setChunkSize()
method, replacing the constructor-configured chunk boundary.
Capacity Assertions:
Retains and updates the logic for
isFullChunk()
, ensuring it accurately evaluates capacity when elements span multiple dynamic priority groups or when the chunk limit is altered mid-lifecycle.
Good response
Bad response
Redo
Share & export
Copy
Show more options
Enter a prompt for Gemini
encrypted
Enter a prompt for Gemini
encrypted
Open upload file menu
Tools
Open mode picker
Pro
Microphone
Send message
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Summarize page
Summarize page
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
All issues(g then i)
All pull requests
All repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code
Pull requests (31)
Pull requests
(
31
)
Agents
Agents
Actions
Actions
Wiki
Wiki
Security and quality (1)
Security and quality
(
1
)
Insights
Insights
Settings
Settings
Important update
Important update
On April 24 we'll start using GitHub Copilot interaction data for AI model training unless you opt out.
Review this update
Review this update
and manage your preferences in your
GitHub account settings
GitHub account settings
.
Dismiss banner
JY-20808 low priority indexing queue #12082 Edit title
JY-20808 low priority indexing queue
#
12082
Edit title
Preview
Preview
Awaiting approval
Awaiting approval
Code
Code
Open
Vasil-Jiminny
Vasil-Jiminny
wants to merge 36 commits into
master
master
from
JY-20808-low-priority-indexing-queue
JY-20808-low-priority-indexing-queue
Copy head branch name to clipboard
Lines changed: 432 additions & 159 deletions
Conversation (5)
Conversation
(
5
)
Commits (36)
Commits
(
36
)
Checks (3)
Checks
(
3
)
Files changed (18)
Files changed
(
18
)
Pull Request Toolbar
Pull Request Toolbar
Collapse file tree
All commits
All commits
0 of 18 files viewed
Submit review
Submit
review
Open diff view settings
Open overview panel
Open comments panel
(
0
)
Filter files…
Filter options
File tree
File tree
app
Component/ES
Listeners
UpdateMultipleTargetsListener.php
UpdateMultipleTargetsListener.php
UpdateSingleTargetListener.php
UpdateSingleTargetListener.php
Processor
Actions
UpsertDocumentsAction.php
UpsertDocumentsAction.php
DTOs
SelectionList.php
SelectionList.php
Traits
SelectEntityListTrait.php
SelectEntityListTrait.php
TargetEntitiesSelector.php
TargetEntitiesSelector.php
AsyncUpdateElasticSearch.php
AsyncUpdateElasticSearch.php
QueuePriorityEnum.php
QueuePriorityEnum.php
UpdateProcessManager.php
UpdateProcessManager.php...
|
55640
|
NULL
|
NULL
|
NULL
|
|
55644
|
1931
|
11
|
2026-05-19T06:33:48.122044+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-19/1779 /Users/lukas/.screenpipe/data/data/2026-05-19/1779172428122_m2.jpg...
|
Firefox
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
ActivityFllesLaterMoreslackcalVIewJiminny ...#TMor ActivityFllesLaterMoreslackcalVIewJiminny ...#TMore unreads# random# releases# sofia-office# support# thank-yous# the people of iimi.^ Direct messages€. Vasil Vasilev%. Galya DimitrovaA. Aneliya AngelovaF.. Nikolay Yankov&. Stefka StoyanovaR. Stoyan TomovZá Todor Stamatov "8i. Mario GeorgievC.. Nikolay Ivanov&o James Graham2. Stoyan Tanev. Steliyan Georgiev&. Petko KashinskiE. Lukas Kovalik y...#: Apps-T lira Cloud® ToastmistonWindowHelp@ Describe what you are looking for# releases8 22Messagese Files• BookmarksYesterdayrequest #12093from jiminny/proper-hubspot-loggingjiminny/app Added by GitHubCircleCl APP 5:34 PMDeployment Successful!Frolect.When:05/18/202014:34:05lag,View JooGitHub APP 9:17 AM3 new commits oushed to master ov llianlminny8e266035 -nx-twilio-tlex-s3-recordingSKiD Wilio APl for customer ssrecordings2480058b - nx-twillo-flex-ss-recordingadd observability log and unit test366e60a - Merge null request #12096from liminny/nx-twilio-flex-s3-recordingjiminny/app Added by GitHubMessage #releases+ AalAre there any issues or potential bollteneckshfer a few potential issues and architectural bottlenecksation. While the tests are well-structured, the behaviorwant to keep an eye on, particularly for an Elasticsearchto consider:sForSamePriority test shows that callingne priority group merges the arrays.mentation uses array_merge() inside a loop toin memory every time it's called. If you are processingam in small batches, this can lead to memory bloat andreallocation.andles batch appends efficiently (e.g., using the spreadappending via references) or groups the arrays beforeNone of the tests explicily verify what happens if duplicate IDs are added. For example, if you calladdEntityList(QueuePriorityEnum::HIGH, [1, 2]) and thenaddEntitvlistQueuePrioritv=num: :HIGH.12. 370• Enter a prompt for GeminiProvYour Jiminny chats aren't used to improve our models. Gemini is Al. It can make mistakes, so double check it. Your privacy & GeminiSummarize page••• X12 OpenVasil-Jiminny. wants to merge 36 commits into master from JY-20808-low-priority-indexing-queueO Conversation 5o Commits# Checks 3ll_ All commits• Filter files.....× E app~ 5 Component/ES• [ Listeners.₴ UpdateMultipleTargetsListen..E UpdateSingleTargetListener...• & Processo~ & Actions# UpsertDocumentsAction.php• &DTOSSelectionList.php& Traits# SelectEntitvListTrait.ohpTargetEntitiesSelector.phpAsyncUpdateElasticSearch.php+ QueuePriorityEnum.ohp# UpdateProcessManager.phpv = Console/Commands/Elasticsear…E AsvncUodateEsEntities.ohpResetAsyncElasticSearchCom.> tests/Unit/Component/ES* Files changed 18~ app/Component/ES/Listeners/UpdateMultipleTargetsListener-php d +ee -5,6 +5,7 @namesoace Jiminny\Component_ES Listeners:luse Jiminny Comoonent\ES\AsvncUodateElasticSearch:luse Jiminny\Contracts\ES\Events\UpdateMultipleEntities;use Psr\Log\LoggerIntertace;@ -26,7 +27,7 @@ public function handle(UpdateMultipleEntities sevent): voidAsvncUodateElasticSearch::bulkMarkEntitiesForUodatelSevent->getUpdatelargetvaluel),Sevent->cetEntitieso.sevent->isPriority()app/Component/ES/Listeners/UpdateSingleTargetListener.php L +Ce -9,6 +9,7 @use Jiminny|Component\ES\Actions\TrackElasticSearchOperations;use Jiminnv\Comoonent\ES\AsvncUodateElasticSearch:luse Jiminny|Component\ES|Processor\EntityQueryBuilder;use Jiminny contracts.cs.cvents updatesinglecncltyuse Psr.Loa.LoagerInterface:@@ -30,6 +31,13 @@ public function handle(UpdateSingleEntity Sevent): void'entityld' => sevent->getEntityid(),B< 0 0 f Daily - Platform - in 12m A 100% C/7 &• Tue 19 May 9:33:47+432 -199 0bu8+2-1 98230[ Viewed ||• 0 , 18 viewecnamespace Jiminny|Component\ES\Listeners;use Jiminny\Component\ES\AsyncUpdateElasticSearch;8 + use Jiminny|Component\ES\QueuePriorityEnum;use Jiminny\Contracts\ES\Events\UpdateMultipleEntities;use Psr\Log\LoggerIntertace;AsvncUodateElasticSearch::bulkMarkEntitiesForUodate(sevent->getUpdateTargetValue(),Sevent->aetEntitieso.sevent->isPriority() ? QueuePriorityEnum::HIGH : QueuePriorityEnum::NORMAL,+9-1ae [ Vieweduse Jiminny\Component\ES\Actions\TrackElasticSearchOperations:use Jiminny\Component\ES\AsyncUpdateElasticSearch;use Jiminny\Component\ES\Processor\EntityQueryBuilder:12 + use Jiminny Comoonent.ES QueuePrioritvEnum:|use Jiminny|Contracts\ES|Events\UpdateSingleEntity;use Psr\Loa. LoagerInterface:'entityld' => Sevent->getEntityId(),34 +* @important:* Svnchronous event should eventually be deprecated.* Instant write operations are blocking and should be used sparingly.* It is much better in terms of performance to write 100 or 1000 documents atonce,* and have one blocking reindex operation. instead of writing 10 documentssynchronously.40 +...
|
NULL
|
8112875416401411337
|
NULL
|
click
|
ocr
|
NULL
|
ActivityFllesLaterMoreslackcalVIewJiminny ...#TMor ActivityFllesLaterMoreslackcalVIewJiminny ...#TMore unreads# random# releases# sofia-office# support# thank-yous# the people of iimi.^ Direct messages€. Vasil Vasilev%. Galya DimitrovaA. Aneliya AngelovaF.. Nikolay Yankov&. Stefka StoyanovaR. Stoyan TomovZá Todor Stamatov "8i. Mario GeorgievC.. Nikolay Ivanov&o James Graham2. Stoyan Tanev. Steliyan Georgiev&. Petko KashinskiE. Lukas Kovalik y...#: Apps-T lira Cloud® ToastmistonWindowHelp@ Describe what you are looking for# releases8 22Messagese Files• BookmarksYesterdayrequest #12093from jiminny/proper-hubspot-loggingjiminny/app Added by GitHubCircleCl APP 5:34 PMDeployment Successful!Frolect.When:05/18/202014:34:05lag,View JooGitHub APP 9:17 AM3 new commits oushed to master ov llianlminny8e266035 -nx-twilio-tlex-s3-recordingSKiD Wilio APl for customer ssrecordings2480058b - nx-twillo-flex-ss-recordingadd observability log and unit test366e60a - Merge null request #12096from liminny/nx-twilio-flex-s3-recordingjiminny/app Added by GitHubMessage #releases+ AalAre there any issues or potential bollteneckshfer a few potential issues and architectural bottlenecksation. While the tests are well-structured, the behaviorwant to keep an eye on, particularly for an Elasticsearchto consider:sForSamePriority test shows that callingne priority group merges the arrays.mentation uses array_merge() inside a loop toin memory every time it's called. If you are processingam in small batches, this can lead to memory bloat andreallocation.andles batch appends efficiently (e.g., using the spreadappending via references) or groups the arrays beforeNone of the tests explicily verify what happens if duplicate IDs are added. For example, if you calladdEntityList(QueuePriorityEnum::HIGH, [1, 2]) and thenaddEntitvlistQueuePrioritv=num: :HIGH.12. 370• Enter a prompt for GeminiProvYour Jiminny chats aren't used to improve our models. Gemini is Al. It can make mistakes, so double check it. Your privacy & GeminiSummarize page••• X12 OpenVasil-Jiminny. wants to merge 36 commits into master from JY-20808-low-priority-indexing-queueO Conversation 5o Commits# Checks 3ll_ All commits• Filter files.....× E app~ 5 Component/ES• [ Listeners.₴ UpdateMultipleTargetsListen..E UpdateSingleTargetListener...• & Processo~ & Actions# UpsertDocumentsAction.php• &DTOSSelectionList.php& Traits# SelectEntitvListTrait.ohpTargetEntitiesSelector.phpAsyncUpdateElasticSearch.php+ QueuePriorityEnum.ohp# UpdateProcessManager.phpv = Console/Commands/Elasticsear…E AsvncUodateEsEntities.ohpResetAsyncElasticSearchCom.> tests/Unit/Component/ES* Files changed 18~ app/Component/ES/Listeners/UpdateMultipleTargetsListener-php d +ee -5,6 +5,7 @namesoace Jiminny\Component_ES Listeners:luse Jiminny Comoonent\ES\AsvncUodateElasticSearch:luse Jiminny\Contracts\ES\Events\UpdateMultipleEntities;use Psr\Log\LoggerIntertace;@ -26,7 +27,7 @@ public function handle(UpdateMultipleEntities sevent): voidAsvncUodateElasticSearch::bulkMarkEntitiesForUodatelSevent->getUpdatelargetvaluel),Sevent->cetEntitieso.sevent->isPriority()app/Component/ES/Listeners/UpdateSingleTargetListener.php L +Ce -9,6 +9,7 @use Jiminny|Component\ES\Actions\TrackElasticSearchOperations;use Jiminnv\Comoonent\ES\AsvncUodateElasticSearch:luse Jiminny|Component\ES|Processor\EntityQueryBuilder;use Jiminny contracts.cs.cvents updatesinglecncltyuse Psr.Loa.LoagerInterface:@@ -30,6 +31,13 @@ public function handle(UpdateSingleEntity Sevent): void'entityld' => sevent->getEntityid(),B< 0 0 f Daily - Platform - in 12m A 100% C/7 &• Tue 19 May 9:33:47+432 -199 0bu8+2-1 98230[ Viewed ||• 0 , 18 viewecnamespace Jiminny|Component\ES\Listeners;use Jiminny\Component\ES\AsyncUpdateElasticSearch;8 + use Jiminny|Component\ES\QueuePriorityEnum;use Jiminny\Contracts\ES\Events\UpdateMultipleEntities;use Psr\Log\LoggerIntertace;AsvncUodateElasticSearch::bulkMarkEntitiesForUodate(sevent->getUpdateTargetValue(),Sevent->aetEntitieso.sevent->isPriority() ? QueuePriorityEnum::HIGH : QueuePriorityEnum::NORMAL,+9-1ae [ Vieweduse Jiminny\Component\ES\Actions\TrackElasticSearchOperations:use Jiminny\Component\ES\AsyncUpdateElasticSearch;use Jiminny\Component\ES\Processor\EntityQueryBuilder:12 + use Jiminny Comoonent.ES QueuePrioritvEnum:|use Jiminny|Contracts\ES|Events\UpdateSingleEntity;use Psr\Loa. LoagerInterface:'entityld' => Sevent->getEntityId(),34 +* @important:* Svnchronous event should eventually be deprecated.* Instant write operations are blocking and should be used sparingly.* It is much better in terms of performance to write 100 or 1000 documents atonce,* and have one blocking reindex operation. instead of writing 10 documentssynchronously.40 +...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
55645
|
1931
|
12
|
2026-05-19T06:33:55.251635+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-19/1779 /Users/lukas/.screenpipe/data/data/2026-05-19/1779172435251_m2.jpg...
|
Firefox
|
JY-20808 low priority indexing queue by Vasil-Jimi JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app — Work...
|
1
|
github.com/jiminny/app/pull/12082/changes
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New chat
Gemini
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Gemini said
Gemini said
Here is a precise and concise summary of the code selection, which refactors
SelectionListTest
to accommodate a shift from fixed high/normal priority properties to a more dynamic, enum-driven priority group architecture.
Refactored Priority Handling
Refactored Priority Handling
Dynamic Priority Groups:
Replaces fixed high/normal array parameters with the
QueuePriorityEnum
(
HIGH
,
NORMAL
,
LOW
), allowing entity lists to be managed dynamically by group types.
Merged Registrations:
Validates that multiple
addEntityList()
calls targeting the same priority level properly merge their data instead of overwriting it.
Group Querying:
Tests new methods
getEntityListItemsByGroup()
and
getEntityListGroups()
to retrieve group-specific IDs or an array of active group names (e.g.,
['high', 'normal']
).
Updated State and Count Validations
Updated State and Count Validations
Instantiation:
Tests now instantiate
SelectionList
without initial constructor arguments, using setters and action methods instead.
Empty States:
Updates assertions (
isEmpty()
) to verify state based on whether any entities have been dynamically added, rather than checking pre-defined constructor arrays.
Stale Flags:
Changes from passing a
stale
boolean via the constructor to explicitly triggering a mutable
$selectionList->markStale()
method.
Chunk Capacity Behavior
Chunk Capacity Behavior
Flexible Chunk Sizes:
Introduces a
setChunkSize()
method, replacing the constructor-configured chunk boundary.
Capacity Assertions:
Retains and updates the logic for
isFullChunk()
, ensuring it accurately evaluates capacity when elements span multiple dynamic priority groups or when the chunk limit is altered mid-lifecycle.
Good response
Bad response
Share & export
Copy
Show more options
Copy prompt
Edit
You said Are there any issues or potential bolltenecks
You said
Are there any issues or potential bolltenecks
Listen
Show thinking
Gemini said
Gemini said
Based on the test diff you provided, we can infer a few potential issues and architectural bottlenecks in the underlying
SelectionList
implementation. While the tests are well-structured, the behavior they describe hints at a few areas you might want to keep an eye on, particularly for an Elasticsearch (ES) processor queue.
Here are the potential issues and bottlenecks to consider:
1. Array Merging Overhead (Performance)
1. Array Merging Overhead (Performance)
The
testAddEntityListMergesMultipleCallsForSamePriority
test shows that calling
addEntityList()
multiple times for the same priority group merges the arrays.
The Bottleneck:
If the underlying implementation uses
array_merge()
inside a loop to append these IDs, it creates a new array in memory every time it's called. If you are processing thousands of entities and appending them in small batches, this can lead to memory bloat and CPU degradation due to constant array reallocation.
Mitigation:
Ensure the implementation handles batch appends efficiently (e.g., using the spread operator
[...$existing, ...$new]
or appending via references) or groups the arrays before doing a single merge.
2. Lack of Uniqueness/Deduplication (Logic)
2. Lack of Uniqueness/Deduplication (Logic)
None of the tests explicitly verify what happens if duplicate IDs are added. For example, if you call
addEntityList(QueuePriorityEnum::HIGH, [1, 2])
and then
addEntityList(QueuePriorityEnum::HIGH, [2, 3])
.
The Issue:
Does the getter return
[1, 2, 2, 3]
or
[1, 2, 3]
? If duplicates are not filtered out, your ES processor might end up indexing the same entity multiple times in a single chunk, which wastes I/O and processor cycles.
Mitigation:
The underlying class should ideally enforce uniqueness (e.g., using
array_unique()
before resolving the chunk, or using ID keys as associative array keys to naturally prevent duplicates).
3. Memory Consumption with Large Chunks (Scalability)
3. Memory Consumption with Large Chunks (Scalability)
The tests introduce
setChunkSize()
. If this chunk size is configured to be very large (e.g., tens of thousands of IDs to bulk-send to Elasticsearch).
The Bottleneck:
Holding massive arrays of IDs in memory across different priority groups can quickly hit PHP memory limits, especially if this
SelectionList
object is kept alive during a long-running daemon or cron job.
Mitigation:
Monitor memory usage if
CHUNK_SIZE
grows, and ensure the
SelectionList
object is properly destroyed (or garbage collected) after the chunk is processed to free up memory.
4. Type Juggling
4. Type Juggling
In the original code, string IDs were used (
['p1', 'p2']
). In the refactored tests, integer IDs are used (
[1, 2]
).
The Issue:
If your system handles UUIDs (strings) vs. relational DB auto-increments (integers), make sure the underlying implementation uses strict comparisons (
===
) where necessary, especially if deduplicating arrays, to prevent PHP from juggling
'1'
and
1
improperly.
Would you like me to draft a quick test case to check how the class currently handles duplicate IDs, or is deduplication intentionally handled further down your pipeline?
Good response
Bad response
Redo
Share & export
Copy
Show more options
Enter a prompt for Gemini
encrypted
Enter a prompt for Gemini
encrypted
Open upload file menu
Tools
Open mode picker
Pro
Microphone
Send message
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Summarize page
Summarize page
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
All issues(g then i)
All pull requests
All repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code
Pull requests (31)
Pull requests
(
31
)
Agents
Agents
Actions
Actions
Wiki
Wiki
Security and quality (1)
Security and quality
(
1
)
Insights
Insights
Settings
Settings
Important update
Important update
On April 24 we'll start using GitHub Copilot interaction data for AI model training unless you opt out.
Review this update
Review this update
and manage your preferences in your
GitHub account settings
GitHub account settings
.
Dismiss banner
JY-20808 low priority indexing queue #12082 Edit title
JY-20808 low priority indexing queue
#
12082
Edit title
Preview
Preview
Awaiting approval
Awaiting approval
Code
Code
Open
Vasil-Jiminny
Vasil-Jiminny...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.10106383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.18816489,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.15674867,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.1245012,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.15163608,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":7,"bounds":{"left":0.35854387,"top":0.055067837,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":7,"bounds":{"left":0.37051198,"top":0.055067837,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"WORK, Google Account: lukas.kovalik@jiminny.com","depth":12,"bounds":{"left":0.3678524,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Main menu","depth":12,"bounds":{"left":0.08494016,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New chat","depth":12,"bounds":{"left":0.09823803,"top":0.10454908,"width":0.028590426,"height":0.030327214},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gemini","depth":15,"bounds":{"left":0.1008976,"top":0.10973663,"width":0.021941489,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Chat","depth":12,"bounds":{"left":0.33992687,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open menu for conversation actions.","depth":12,"bounds":{"left":0.35322472,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Conversation with Gemini","depth":15,"bounds":{"left":0.079288565,"top":0.14764565,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":16,"bounds":{"left":0.079288565,"top":0.15003991,"width":0.1200133,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":21,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;667use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;7use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;8+use Jiminny\\Component\\ES\\QueuePriorityEnum;8use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\TestCase;10use PHPUnit\\Framework\\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;667use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;7use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;8+use Jiminny\\Component\\ES\\QueuePriorityEnum;8use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\TestCase;10use PHPUnit\\Framework\\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected.","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Listen","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is a precise and concise summary of the code selection, which refactors","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionListTest","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to accommodate a shift from fixed high/normal priority properties to a more dynamic, enum-driven priority group architecture.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Refactored Priority Handling","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Refactored Priority Handling","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dynamic Priority Groups:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Replaces fixed high/normal array parameters with the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QueuePriorityEnum","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HIGH","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NORMAL","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"LOW","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"), allowing entity lists to be managed dynamically by group types.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Merged Registrations:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Validates that multiple","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"calls targeting the same priority level properly merge their data instead of overwriting it.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Group Querying:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tests new methods","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getEntityListItemsByGroup()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getEntityListGroups()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to retrieve group-specific IDs or an array of active group names (e.g.,","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"['high', 'normal']","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Updated State and Count Validations","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Updated State and Count Validations","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Instantiation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tests now instantiate","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"without initial constructor arguments, using setters and action methods instead.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Empty States:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Updates assertions (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"isEmpty()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") to verify state based on whether any entities have been dynamically added, rather than checking pre-defined constructor arrays.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Stale Flags:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Changes from passing a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"stale","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"boolean via the constructor to explicitly triggering a mutable","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$selectionList->markStale()","depth":27,"bounds":{"left":0.1512633,"top":0.0,"width":0.075465426,"height":0.014764565},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method.","depth":26,"bounds":{"left":0.2287234,"top":0.0,"width":0.02144282,"height":0.016360734},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Chunk Capacity Behavior","depth":23,"bounds":{"left":0.111369684,"top":0.0,"width":0.24734043,"height":0.01915403},"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Chunk Capacity Behavior","depth":24,"bounds":{"left":0.111369684,"top":0.0,"width":0.06615692,"height":0.016360734},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Flexible Chunk Sizes:","depth":26,"bounds":{"left":0.12400266,"top":0.0,"width":0.05435505,"height":0.016360734},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Introduces a","depth":26,"bounds":{"left":0.1783577,"top":0.0,"width":0.03274601,"height":0.016360734},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"setChunkSize()","depth":27,"bounds":{"left":0.2130984,"top":0.0,"width":0.0390625,"height":0.014764565},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method, replacing the constructor-configured chunk boundary.","depth":26,"bounds":{"left":0.12400266,"top":0.0,"width":0.21675532,"height":0.038707104},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Capacity Assertions:","depth":26,"bounds":{"left":0.12400266,"top":0.03990423,"width":0.054022606,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Retains and updates the logic for","depth":26,"bounds":{"left":0.17802526,"top":0.03990423,"width":0.08228058,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"isFullChunk()","depth":27,"bounds":{"left":0.26230052,"top":0.041101355,"width":0.036236703,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", ensuring it accurately evaluates capacity when elements span multiple dynamic priority groups or when the chunk limit is altered mid-lifecycle.","depth":26,"bounds":{"left":0.12400266,"top":0.03990423,"width":0.23404256,"height":0.061053474},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":22,"bounds":{"left":0.1100399,"top":0.12290503,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":22,"bounds":{"left":0.120678194,"top":0.12290503,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":21,"bounds":{"left":0.13131648,"top":0.12290503,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":22,"bounds":{"left":0.1419548,"top":0.12290503,"width":0.010638298,"height":0.025538707},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":21,"bounds":{"left":0.15259309,"top":0.12290503,"width":0.010638298,"height":0.025538707},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy prompt","depth":21,"bounds":{"left":0.21459441,"top":0.1867518,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit","depth":21,"bounds":{"left":0.22922207,"top":0.1867518,"width":0.013297873,"height":0.031923383},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said Are there any issues or potential bolltenecks","depth":21,"bounds":{"left":0.24916889,"top":0.19313647,"width":0.10688165,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"bounds":{"left":0.079288565,"top":0.19393456,"width":0.019946808,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Are there any issues or potential bolltenecks","depth":23,"bounds":{"left":0.24916889,"top":0.19473264,"width":0.10688165,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Listen","depth":22,"bounds":{"left":0.3480718,"top":0.2442139,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Show thinking","depth":25,"bounds":{"left":0.12666224,"top":0.24660814,"width":0.030917553,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Gemini said","depth":20,"bounds":{"left":0.1243351,"top":0.28810853,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"bounds":{"left":0.1243351,"top":0.29010376,"width":0.04105718,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Based on the test diff you provided, we can infer a few potential issues and architectural bottlenecks in the underlying","depth":24,"bounds":{"left":0.11336436,"top":0.29209897,"width":0.24401596,"height":0.038707104},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":25,"bounds":{"left":0.15724733,"top":0.31564245,"width":0.036236703,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"implementation. While the tests are well-structured, the behavior they describe hints at a few areas you might want to keep an eye on, particularly for an Elasticsearch (ES) processor queue.","depth":24,"bounds":{"left":0.11336436,"top":0.31444532,"width":0.24401596,"height":0.061053474},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here are the potential issues and bottlenecks to consider:","depth":24,"bounds":{"left":0.11336436,"top":0.39026338,"width":0.13912898,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"1. Array Merging Overhead (Performance)","depth":23,"bounds":{"left":0.11336436,"top":0.43176377,"width":0.24534574,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1. Array Merging Overhead (Performance)","depth":24,"bounds":{"left":0.11336436,"top":0.43335995,"width":0.10787899,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The","depth":24,"bounds":{"left":0.11336436,"top":0.46049482,"width":0.010472074,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"testAddEntityListMergesMultipleCallsForSamePriority","depth":25,"bounds":{"left":0.12583111,"top":0.46169195,"width":0.14245346,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test shows that calling","depth":24,"bounds":{"left":0.27027926,"top":0.46049482,"width":0.05668218,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList()","depth":25,"bounds":{"left":0.115359046,"top":0.4840383,"width":0.041888297,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"multiple times for the same priority group merges the arrays.","depth":24,"bounds":{"left":0.15924202,"top":0.4828412,"width":0.14793883,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Bottleneck:","depth":26,"bounds":{"left":0.12599733,"top":0.5139665,"width":0.041223403,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If the underlying implementation uses","depth":26,"bounds":{"left":0.16722074,"top":0.5139665,"width":0.093417555,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"array_merge()","depth":27,"bounds":{"left":0.26263297,"top":0.5151636,"width":0.036236703,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"inside a loop to append these IDs, it creates a new array in memory every time it's called. If you are processing thousands of entities and appending them in small batches, this can lead to memory bloat and CPU degradation due to constant array reallocation.","depth":26,"bounds":{"left":0.12599733,"top":0.5139665,"width":0.22922207,"height":0.08339984},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mitigation:","depth":26,"bounds":{"left":0.12599733,"top":0.6121309,"width":0.027925532,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ensure the implementation handles batch appends efficiently (e.g., using the spread operator","depth":26,"bounds":{"left":0.12599733,"top":0.6121309,"width":0.23271276,"height":0.038707104},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[...$existing, ...$new]","depth":27,"bounds":{"left":0.15026596,"top":0.63567436,"width":0.064328454,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or appending via references) or groups the arrays before doing a single merge.","depth":26,"bounds":{"left":0.12599733,"top":0.63447726,"width":0.23055187,"height":0.038707104},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"2. Lack of Uniqueness/Deduplication (Logic)","depth":23,"bounds":{"left":0.11336436,"top":0.698324,"width":0.24534574,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2. Lack of Uniqueness/Deduplication (Logic)","depth":24,"bounds":{"left":0.11336436,"top":0.6999202,"width":0.114527926,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"None of the tests explicitly verify what happens if duplicate IDs are added. For example, if you call","depth":24,"bounds":{"left":0.11336436,"top":0.7270551,"width":0.23703457,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList(QueuePriorityEnum::HIGH, [1, 2])","depth":25,"bounds":{"left":0.115359046,"top":0.75059855,"width":0.12849069,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and then","depth":24,"bounds":{"left":0.24584441,"top":0.74940145,"width":0.024268618,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList(QueuePriorityEnum::HIGH, [2, 3])","depth":25,"bounds":{"left":0.115359046,"top":0.7729449,"width":0.12849069,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":24,"bounds":{"left":0.24584441,"top":0.7717478,"width":0.0013297872,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Issue:","depth":26,"bounds":{"left":0.12599733,"top":0.8028731,"width":0.02642952,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Does the getter return","depth":26,"bounds":{"left":0.15242687,"top":0.8028731,"width":0.05668218,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[1, 2, 2, 3]","depth":27,"bounds":{"left":0.21110372,"top":0.80407023,"width":0.033410903,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or","depth":26,"bounds":{"left":0.24650931,"top":0.8028731,"width":0.0078125,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[1, 2, 3]","depth":27,"bounds":{"left":0.25631648,"top":0.80407023,"width":0.025099734,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"? If duplicates are not filtered out, your ES processor might end up indexing the same entity multiple times in a single chunk, which wastes I/O and processor cycles.","depth":26,"bounds":{"left":0.12599733,"top":0.8028731,"width":0.22955452,"height":0.061053474},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mitigation:","depth":26,"bounds":{"left":0.12599733,"top":0.87869114,"width":0.027925532,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The underlying class should ideally enforce uniqueness (e.g., using","depth":26,"bounds":{"left":0.15392287,"top":0.87869114,"width":0.16306517,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"array_unique()","depth":27,"bounds":{"left":0.12799202,"top":0.9022346,"width":0.0390625,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"before resolving the chunk, or using ID keys as associative array keys to naturally prevent duplicates).","depth":26,"bounds":{"left":0.12599733,"top":0.9010375,"width":0.21841756,"height":0.038707104},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"3. Memory Consumption with Large Chunks (Scalability)","depth":23,"bounds":{"left":0.11336436,"top":0.9648843,"width":0.24534574,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3. Memory Consumption with Large Chunks (Scalability)","depth":24,"bounds":{"left":0.11336436,"top":0.96648043,"width":0.14544548,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The tests introduce","depth":24,"bounds":{"left":0.11336436,"top":0.9936153,"width":0.048204787,"height":0.0063846707},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"setChunkSize()","depth":25,"bounds":{"left":0.16356383,"top":0.9948124,"width":0.0390625,"height":0.005187571},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":". If this chunk size is configured to be very large (e.g., tens of thousands of IDs to bulk-send to Elasticsearch).","depth":24,"bounds":{"left":0.11336436,"top":0.9936153,"width":0.23902926,"height":0.0063846707},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Bottleneck:","depth":26,"bounds":{"left":0.12599733,"top":1.0,"width":0.041223403,"height":-0.047086954},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Holding massive arrays of IDs in memory across different priority groups can quickly hit PHP memory limits, especially if this","depth":26,"bounds":{"left":0.12599733,"top":1.0,"width":0.22805852,"height":-0.047086954},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":27,"bounds":{"left":0.24202128,"top":1.0,"width":0.036402926,"height":-0.07063043},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"object is kept alive during a long-running daemon or cron job.","depth":26,"bounds":{"left":0.12599733,"top":1.0,"width":0.22290559,"height":-0.06943333},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mitigation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Monitor memory usage if","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CHUNK_SIZE","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"grows, and ensure the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"object is properly destroyed (or garbage collected) after the chunk is processed to free up memory.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"4. Type Juggling","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4. Type Juggling","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"In the original code, string IDs were used (","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"['p1', 'p2']","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"). In the refactored tests, integer IDs are used (","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[1, 2]","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Issue:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If your system handles UUIDs (strings) vs. relational DB auto-increments (integers), make sure the underlying implementation uses strict comparisons (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"===","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") where necessary, especially if deduplicating arrays, to prevent PHP from juggling","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"'1'","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"improperly.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Would you like me to draft a quick test case to check how the class currently handles duplicate IDs, or is deduplication intentionally handled further down your pipeline?","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":21,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":21,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Redo","depth":21,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Share & export","depth":20,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":20,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXTextArea","text":"Enter a prompt for Gemini\nencrypted","depth":20,"bounds":{"left":0.11469415,"top":0.83439744,"width":0.23670213,"height":0.01915403},"on_screen":true,"value":"Enter a prompt for Gemini\nencrypted","help_text":"","role_description":"text entry area","subrole":"AXUnknown","is_enabled":true,"is_focused":true,"is_selected":false},{"role":"AXStaticText","text":"Enter a prompt for Gemini","depth":21,"bounds":{"left":0.12134308,"top":0.8347965,"width":0.069980055,"height":0.018355945},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"encrypted","depth":21,"bounds":{"left":0.113696806,"top":0.83439744,"width":0.0066489363,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open upload file menu","depth":20,"bounds":{"left":0.11070479,"top":0.87031126,"width":0.013297873,"height":0.031923383},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tools","depth":18,"bounds":{"left":0.12666224,"top":0.87031126,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open mode picker","depth":20,"bounds":{"left":0.31399602,"top":0.867917,"width":0.026097074,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pro","depth":23,"bounds":{"left":0.31931517,"top":0.87669593,"width":0.007480053,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Microphone","depth":19,"bounds":{"left":0.34208778,"top":0.867917,"width":0.013297873,"height":0.031923383},"on_screen":true,"role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Send message","depth":19,"bounds":{"left":0.34840426,"top":0.8671189,"width":0.013962766,"height":0.033519555},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.","depth":17,"bounds":{"left":0.11303192,"top":0.92178774,"width":0.19996676,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Your privacy & Gemini Opens in a new window","depth":17,"bounds":{"left":0.31299868,"top":0.92178774,"width":0.040059842,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your privacy & Gemini","depth":18,"bounds":{"left":0.31299868,"top":0.92178774,"width":0.040059842,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Opens in a new window","depth":19,"bounds":{"left":0.079288565,"top":0.92098963,"width":0.043218084,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Summarize page","depth":7,"bounds":{"left":0.08494016,"top":0.95730245,"width":0.053523935,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":9,"bounds":{"left":0.09059176,"top":0.96249,"width":0.042220745,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Skip to content","depth":6,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to content","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open menu","depth":10,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Homepage (g then d)","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"jiminny","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"jiminny","depth":14,"bounds":{"left":0.4245346,"top":0.0,"width":0.014960106,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":14,"bounds":{"left":0.44847074,"top":0.0,"width":0.008477394,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Search or jump to…","depth":9,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Type","depth":12,"bounds":{"left":0.8294548,"top":0.0,"width":0.011801862,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":12,"bounds":{"left":0.84258646,"top":0.0,"width":0.002493351,"height":0.011572227},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to search","depth":12,"bounds":{"left":0.8465758,"top":0.0,"width":0.021276595,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chat with Copilot","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Open Copilot…","depth":9,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Create new...","depth":9,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"All issues(g then i)","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"All pull requests","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"All repositories","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"You have unread notifications(g then n)","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open user navigation menu","depth":9,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Repository navigation","depth":9,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Repository navigation","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":12,"bounds":{"left":0.39461437,"top":0.0,"width":0.025099734,"height":0.026336791},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":14,"bounds":{"left":0.40541887,"top":0.0,"width":0.011469414,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull requests (31)","depth":12,"bounds":{"left":0.42237368,"top":0.0,"width":0.054521278,"height":0.026336791},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull requests","depth":14,"bounds":{"left":0.43301198,"top":0.0,"width":0.02925532,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":14,"bounds":{"left":0.46492687,"top":0.0,"width":0.0029920214,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"31","depth":14,"bounds":{"left":0.46791887,"top":0.0,"width":0.004986702,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":14,"bounds":{"left":0.47290558,"top":0.0,"width":0.0016622341,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Agents","depth":12,"bounds":{"left":0.47955453,"top":0.0,"width":0.029089095,"height":0.026336791},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Agents","depth":14,"bounds":{"left":0.49052528,"top":0.0,"width":0.014960106,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":12,"bounds":{"left":0.5113032,"top":0.0,"width":0.03025266,"height":0.026336791},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":14,"bounds":{"left":0.52244014,"top":0.0,"width":0.015957447,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":12,"bounds":{"left":0.54421544,"top":0.0,"width":0.022938829,"height":0.026336791},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":14,"bounds":{"left":0.55502,"top":0.0,"width":0.009142287,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Security and quality (1)","depth":12,"bounds":{"left":0.56981385,"top":0.0,"width":0.0674867,"height":0.026336791},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Security and quality","depth":14,"bounds":{"left":0.5816157,"top":0.0,"width":0.04255319,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":14,"bounds":{"left":0.62799203,"top":0.0,"width":0.0029920214,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":14,"bounds":{"left":0.63098407,"top":0.0,"width":0.0019946808,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":14,"bounds":{"left":0.63297874,"top":0.0,"width":0.0018284575,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Insights","depth":12,"bounds":{"left":0.6399601,"top":0.0,"width":0.031083776,"height":0.026336791},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Insights","depth":14,"bounds":{"left":0.65109706,"top":0.0,"width":0.016788565,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":12,"bounds":{"left":0.67370343,"top":0.0,"width":0.032081116,"height":0.026336791},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":14,"bounds":{"left":0.68484044,"top":0.0,"width":0.017785905,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Important update","depth":10,"bounds":{"left":0.40292552,"top":0.0,"width":0.0003324468,"height":0.016759777},"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Important update","depth":11,"bounds":{"left":0.40292552,"top":0.0,"width":0.039228722,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"On April 24 we'll start using GitHub Copilot interaction data for AI model training unless you opt out.","depth":10,"bounds":{"left":0.40292552,"top":0.0,"width":0.2159242,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Review this update","depth":10,"bounds":{"left":0.61884975,"top":0.0,"width":0.04055851,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Review this update","depth":11,"bounds":{"left":0.61884975,"top":0.0,"width":0.04055851,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and manage your preferences in your","depth":10,"bounds":{"left":0.6594083,"top":0.0,"width":0.08261303,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"GitHub account settings","depth":10,"bounds":{"left":0.74202126,"top":0.0,"width":0.05219415,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub account settings","depth":11,"bounds":{"left":0.74202126,"top":0.0,"width":0.05219415,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":10,"bounds":{"left":0.79421544,"top":0.0,"width":0.0013297872,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Dismiss banner","depth":9,"bounds":{"left":0.9865359,"top":0.0,"width":0.010638298,"height":0.025538707},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"JY-20808 low priority indexing queue #12082 Edit title","depth":13,"bounds":{"left":0.39993352,"top":0.026735835,"width":0.22307181,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"JY-20808 low priority indexing queue","depth":14,"bounds":{"left":0.39993352,"top":0.027533919,"width":0.17204122,"height":0.030327214},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"#","depth":15,"bounds":{"left":0.5746343,"top":0.027533919,"width":0.0066489363,"height":0.030327214},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12082","depth":15,"bounds":{"left":0.5812833,"top":0.027533919,"width":0.029753989,"height":0.030327214},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit title","depth":14,"bounds":{"left":0.61236703,"top":0.029928172,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Preview","depth":13,"bounds":{"left":0.9584442,"top":0.03471668,"width":0.031083776,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Preview","depth":15,"bounds":{"left":0.9637633,"top":0.039505187,"width":0.01512633,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Awaiting approval","depth":13,"bounds":{"left":0.86818486,"top":0.03312051,"width":0.055352394,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Awaiting approval","depth":15,"bounds":{"left":0.88048536,"top":0.039106146,"width":0.03873005,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Code","depth":13,"bounds":{"left":0.9261968,"top":0.03312051,"width":0.02825798,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":15,"bounds":{"left":0.9305186,"top":0.039106146,"width":0.011635638,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open","depth":13,"bounds":{"left":0.4105718,"top":0.07102953,"width":0.011968086,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Vasil-Jiminny","depth":15,"bounds":{"left":0.42918882,"top":0.06783719,"width":0.03025266,"height":0.016759777},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Vasil-Jiminny","depth":16,"bounds":{"left":0.42918882,"top":0.06943336,"width":0.03025266,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-6984932710842716839
|
8166828297546202517
|
visual_change
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New chat
Gemini
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Gemini said
Gemini said
Here is a precise and concise summary of the code selection, which refactors
SelectionListTest
to accommodate a shift from fixed high/normal priority properties to a more dynamic, enum-driven priority group architecture.
Refactored Priority Handling
Refactored Priority Handling
Dynamic Priority Groups:
Replaces fixed high/normal array parameters with the
QueuePriorityEnum
(
HIGH
,
NORMAL
,
LOW
), allowing entity lists to be managed dynamically by group types.
Merged Registrations:
Validates that multiple
addEntityList()
calls targeting the same priority level properly merge their data instead of overwriting it.
Group Querying:
Tests new methods
getEntityListItemsByGroup()
and
getEntityListGroups()
to retrieve group-specific IDs or an array of active group names (e.g.,
['high', 'normal']
).
Updated State and Count Validations
Updated State and Count Validations
Instantiation:
Tests now instantiate
SelectionList
without initial constructor arguments, using setters and action methods instead.
Empty States:
Updates assertions (
isEmpty()
) to verify state based on whether any entities have been dynamically added, rather than checking pre-defined constructor arrays.
Stale Flags:
Changes from passing a
stale
boolean via the constructor to explicitly triggering a mutable
$selectionList->markStale()
method.
Chunk Capacity Behavior
Chunk Capacity Behavior
Flexible Chunk Sizes:
Introduces a
setChunkSize()
method, replacing the constructor-configured chunk boundary.
Capacity Assertions:
Retains and updates the logic for
isFullChunk()
, ensuring it accurately evaluates capacity when elements span multiple dynamic priority groups or when the chunk limit is altered mid-lifecycle.
Good response
Bad response
Share & export
Copy
Show more options
Copy prompt
Edit
You said Are there any issues or potential bolltenecks
You said
Are there any issues or potential bolltenecks
Listen
Show thinking
Gemini said
Gemini said
Based on the test diff you provided, we can infer a few potential issues and architectural bottlenecks in the underlying
SelectionList
implementation. While the tests are well-structured, the behavior they describe hints at a few areas you might want to keep an eye on, particularly for an Elasticsearch (ES) processor queue.
Here are the potential issues and bottlenecks to consider:
1. Array Merging Overhead (Performance)
1. Array Merging Overhead (Performance)
The
testAddEntityListMergesMultipleCallsForSamePriority
test shows that calling
addEntityList()
multiple times for the same priority group merges the arrays.
The Bottleneck:
If the underlying implementation uses
array_merge()
inside a loop to append these IDs, it creates a new array in memory every time it's called. If you are processing thousands of entities and appending them in small batches, this can lead to memory bloat and CPU degradation due to constant array reallocation.
Mitigation:
Ensure the implementation handles batch appends efficiently (e.g., using the spread operator
[...$existing, ...$new]
or appending via references) or groups the arrays before doing a single merge.
2. Lack of Uniqueness/Deduplication (Logic)
2. Lack of Uniqueness/Deduplication (Logic)
None of the tests explicitly verify what happens if duplicate IDs are added. For example, if you call
addEntityList(QueuePriorityEnum::HIGH, [1, 2])
and then
addEntityList(QueuePriorityEnum::HIGH, [2, 3])
.
The Issue:
Does the getter return
[1, 2, 2, 3]
or
[1, 2, 3]
? If duplicates are not filtered out, your ES processor might end up indexing the same entity multiple times in a single chunk, which wastes I/O and processor cycles.
Mitigation:
The underlying class should ideally enforce uniqueness (e.g., using
array_unique()
before resolving the chunk, or using ID keys as associative array keys to naturally prevent duplicates).
3. Memory Consumption with Large Chunks (Scalability)
3. Memory Consumption with Large Chunks (Scalability)
The tests introduce
setChunkSize()
. If this chunk size is configured to be very large (e.g., tens of thousands of IDs to bulk-send to Elasticsearch).
The Bottleneck:
Holding massive arrays of IDs in memory across different priority groups can quickly hit PHP memory limits, especially if this
SelectionList
object is kept alive during a long-running daemon or cron job.
Mitigation:
Monitor memory usage if
CHUNK_SIZE
grows, and ensure the
SelectionList
object is properly destroyed (or garbage collected) after the chunk is processed to free up memory.
4. Type Juggling
4. Type Juggling
In the original code, string IDs were used (
['p1', 'p2']
). In the refactored tests, integer IDs are used (
[1, 2]
).
The Issue:
If your system handles UUIDs (strings) vs. relational DB auto-increments (integers), make sure the underlying implementation uses strict comparisons (
===
) where necessary, especially if deduplicating arrays, to prevent PHP from juggling
'1'
and
1
improperly.
Would you like me to draft a quick test case to check how the class currently handles duplicate IDs, or is deduplication intentionally handled further down your pipeline?
Good response
Bad response
Redo
Share & export
Copy
Show more options
Enter a prompt for Gemini
encrypted
Enter a prompt for Gemini
encrypted
Open upload file menu
Tools
Open mode picker
Pro
Microphone
Send message
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Summarize page
Summarize page
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
All issues(g then i)
All pull requests
All repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code
Pull requests (31)
Pull requests
(
31
)
Agents
Agents
Actions
Actions
Wiki
Wiki
Security and quality (1)
Security and quality
(
1
)
Insights
Insights
Settings
Settings
Important update
Important update
On April 24 we'll start using GitHub Copilot interaction data for AI model training unless you opt out.
Review this update
Review this update
and manage your preferences in your
GitHub account settings
GitHub account settings
.
Dismiss banner
JY-20808 low priority indexing queue #12082 Edit title
JY-20808 low priority indexing queue
#
12082
Edit title
Preview
Preview
Awaiting approval
Awaiting approval
Code
Code
Open
Vasil-Jiminny
Vasil-Jiminny...
|
55644
|
NULL
|
NULL
|
NULL
|
|
55646
|
1930
|
8
|
2026-05-19T06:34:18.037391+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-19/1779 /Users/lukas/.screenpipe/data/data/2026-05-19/1779172458037_m1.jpg...
|
Firefox
|
JY-20808 low priority indexing queue by Vasil-Jimi JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app — Work...
|
1
|
github.com/jiminny/app/pull/12082/changes
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New chat
Gemini
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Gemini said
Gemini said
Here is a precise and concise summary of the code selection, which refactors
SelectionListTest
to accommodate a shift from fixed high/normal priority properties to a more dynamic, enum-driven priority group architecture.
Refactored Priority Handling
Refactored Priority Handling
Dynamic Priority Groups:
Replaces fixed high/normal array parameters with the
QueuePriorityEnum
(
HIGH
,
NORMAL
,
LOW
), allowing entity lists to be managed dynamically by group types.
Merged Registrations:
Validates that multiple
addEntityList()
calls targeting the same priority level properly merge their data instead of overwriting it.
Group Querying:
Tests new methods
getEntityListItemsByGroup()
and
getEntityListGroups()
to retrieve group-specific IDs or an array of active group names (e.g.,
['high', 'normal']
).
Updated State and Count Validations
Updated State and Count Validations
Instantiation:
Tests now instantiate
SelectionList
without initial constructor arguments, using setters and action methods instead.
Empty States:
Updates assertions (
isEmpty()
) to verify state based on whether any entities have been dynamically added, rather than checking pre-defined constructor arrays.
Stale Flags:
Changes from passing a
stale
boolean via the constructor to explicitly triggering a mutable
$selectionList->markStale()
method.
Chunk Capacity Behavior
Chunk Capacity Behavior
Flexible Chunk Sizes:
Introduces a
setChunkSize()
method, replacing the constructor-configured chunk boundary.
Capacity Assertions:
Retains and updates the logic for
isFullChunk()
, ensuring it accurately evaluates capacity when elements span multiple dynamic priority groups or when the chunk limit is altered mid-lifecycle.
Good response
Bad response
Share & export
Copy
Show more options
Copy prompt
Edit
You said Are there any issues or potential bolltenecks
You said
Are there any issues or potential bolltenecks
Listen
Show thinking
Gemini said
Gemini said
Based on the test diff you provided, we can infer a few potential issues and architectural bottlenecks in the underlying
SelectionList
implementation. While the tests are well-structured, the behavior they describe hints at a few areas you might want to keep an eye on, particularly for an Elasticsearch (ES) processor queue.
Here are the potential issues and bottlenecks to consider:
1. Array Merging Overhead (Performance)
1. Array Merging Overhead (Performance)
The
testAddEntityListMergesMultipleCallsForSamePriority
test shows that calling
addEntityList()
multiple times for the same priority group merges the arrays.
The Bottleneck:
If the underlying implementation uses
array_merge()
inside a loop to append these IDs, it creates a new array in memory every time it's called. If you are processing thousands of entities and appending them in small batches, this can lead to memory bloat and CPU degradation due to constant array reallocation.
Mitigation:
Ensure the implementation handles batch appends efficiently (e.g., using the spread operator
[...$existing, ...$new]
or appending via references) or groups the arrays before doing a single merge.
2. Lack of Uniqueness/Deduplication (Logic)
2. Lack of Uniqueness/Deduplication (Logic)
None of the tests explicitly verify what happens if duplicate IDs are added. For example, if you call
addEntityList(QueuePriorityEnum::HIGH, [1, 2])
and then
addEntityList(QueuePriorityEnum::HIGH, [2, 3])
.
The Issue:
Does the getter return
[1, 2, 2, 3]
or
[1, 2, 3]
? If duplicates are not filtered out, your ES processor might end up indexing the same entity multiple times in a single chunk, which wastes I/O and processor cycles.
Mitigation:
The underlying class should ideally enforce uniqueness (e.g., using
array_unique()
before resolving the chunk, or using ID keys as associative array keys to naturally prevent duplicates).
3. Memory Consumption with Large Chunks (Scalability)
3. Memory Consumption with Large Chunks (Scalability)
The tests introduce
setChunkSize()
. If this chunk size is configured to be very large (e.g., tens of thousands of IDs to bulk-send to Elasticsearch).
The Bottleneck:
Holding massive arrays of IDs in memory across different priority groups can quickly hit PHP memory limits, especially if this
SelectionList
object is kept alive during a long-running daemon or cron job.
Mitigation:
Monitor memory usage if
CHUNK_SIZE
grows, and ensure the
SelectionList
object is properly destroyed (or garbage collected) after the chunk is processed to free up memory.
4. Type Juggling
4. Type Juggling
In the original code, string IDs were used (
['p1', 'p2']
). In the refactored tests, integer IDs are used (
[1, 2]
).
The Issue:
If your system handles UUIDs (strings) vs. relational DB auto-increments (integers), make sure the underlying implementation uses strict comparisons (
===
) where necessary, especially if deduplicating arrays, to prevent PHP from juggling
'1'
and
1
improperly.
Would you like me to draft a quick test case to check how the class currently handles duplicate IDs, or is deduplication intentionally handled further down your pipeline?
Good response
Bad response
Redo
Share & export
Copy
Show more options
Enter a prompt for Gemini
encrypted
Enter a prompt for Gemini
encrypted
Open upload file menu
Tools
Open mode picker
Pro
Microphone...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"WORK, Google Account: lukas.kovalik@jiminny.com","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Main menu","depth":12,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New chat","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gemini","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Chat","depth":12,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open menu for conversation actions.","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Conversation with Gemini","depth":15,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":21,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;667use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;7use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;8+use Jiminny\\Component\\ES\\QueuePriorityEnum;8use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\TestCase;10use PHPUnit\\Framework\\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;667use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;7use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;8+use Jiminny\\Component\\ES\\QueuePriorityEnum;8use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\TestCase;10use PHPUnit\\Framework\\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected.","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Listen","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is a precise and concise summary of the code selection, which refactors","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionListTest","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to accommodate a shift from fixed high/normal priority properties to a more dynamic, enum-driven priority group architecture.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Refactored Priority Handling","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Refactored Priority Handling","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dynamic Priority Groups:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Replaces fixed high/normal array parameters with the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QueuePriorityEnum","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HIGH","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NORMAL","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"LOW","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"), allowing entity lists to be managed dynamically by group types.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Merged Registrations:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Validates that multiple","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"calls targeting the same priority level properly merge their data instead of overwriting it.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Group Querying:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tests new methods","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getEntityListItemsByGroup()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getEntityListGroups()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to retrieve group-specific IDs or an array of active group names (e.g.,","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"['high', 'normal']","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Updated State and Count Validations","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Updated State and Count Validations","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Instantiation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tests now instantiate","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"without initial constructor arguments, using setters and action methods instead.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Empty States:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Updates assertions (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"isEmpty()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") to verify state based on whether any entities have been dynamically added, rather than checking pre-defined constructor arrays.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Stale Flags:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Changes from passing a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"stale","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"boolean via the constructor to explicitly triggering a mutable","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$selectionList->markStale()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Chunk Capacity Behavior","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Chunk Capacity Behavior","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Flexible Chunk Sizes:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Introduces a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"setChunkSize()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method, replacing the constructor-configured chunk boundary.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Capacity Assertions:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Retains and updates the logic for","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"isFullChunk()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", ensuring it accurately evaluates capacity when elements span multiple dynamic priority groups or when the chunk limit is altered mid-lifecycle.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":22,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":22,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":21,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":22,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy prompt","depth":21,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said Are there any issues or potential bolltenecks","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Are there any issues or potential bolltenecks","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Listen","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Show thinking","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Based on the test diff you provided, we can infer a few potential issues and architectural bottlenecks in the underlying","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"implementation. While the tests are well-structured, the behavior they describe hints at a few areas you might want to keep an eye on, particularly for an Elasticsearch (ES) processor queue.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here are the potential issues and bottlenecks to consider:","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"1. Array Merging Overhead (Performance)","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1. Array Merging Overhead (Performance)","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"testAddEntityListMergesMultipleCallsForSamePriority","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test shows that calling","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList()","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"multiple times for the same priority group merges the arrays.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Bottleneck:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If the underlying implementation uses","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"array_merge()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"inside a loop to append these IDs, it creates a new array in memory every time it's called. If you are processing thousands of entities and appending them in small batches, this can lead to memory bloat and CPU degradation due to constant array reallocation.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mitigation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ensure the implementation handles batch appends efficiently (e.g., using the spread operator","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[...$existing, ...$new]","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or appending via references) or groups the arrays before doing a single merge.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"2. Lack of Uniqueness/Deduplication (Logic)","depth":23,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2. Lack of Uniqueness/Deduplication (Logic)","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"None of the tests explicitly verify what happens if duplicate IDs are added. For example, if you call","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList(QueuePriorityEnum::HIGH, [1, 2])","depth":25,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and then","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList(QueuePriorityEnum::HIGH, [2, 3])","depth":25,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Issue:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Does the getter return","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[1, 2, 2, 3]","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[1, 2, 3]","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"? If duplicates are not filtered out, your ES processor might end up indexing the same entity multiple times in a single chunk, which wastes I/O and processor cycles.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mitigation:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The underlying class should ideally enforce uniqueness (e.g., using","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"array_unique()","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"before resolving the chunk, or using ID keys as associative array keys to naturally prevent duplicates).","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"3. Memory Consumption with Large Chunks (Scalability)","depth":23,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3. Memory Consumption with Large Chunks (Scalability)","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The tests introduce","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"setChunkSize()","depth":25,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":". If this chunk size is configured to be very large (e.g., tens of thousands of IDs to bulk-send to Elasticsearch).","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Bottleneck:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Holding massive arrays of IDs in memory across different priority groups can quickly hit PHP memory limits, especially if this","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"object is kept alive during a long-running daemon or cron job.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mitigation:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Monitor memory usage if","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CHUNK_SIZE","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"grows, and ensure the","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"object is properly destroyed (or garbage collected) after the chunk is processed to free up memory.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"4. Type Juggling","depth":23,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4. Type Juggling","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"In the original code, string IDs were used (","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"['p1', 'p2']","depth":25,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"). In the refactored tests, integer IDs are used (","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[1, 2]","depth":25,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Issue:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If your system handles UUIDs (strings) vs. relational DB auto-increments (integers), make sure the underlying implementation uses strict comparisons (","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"===","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") where necessary, especially if deduplicating arrays, to prevent PHP from juggling","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"'1'","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"improperly.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Would you like me to draft a quick test case to check how the class currently handles duplicate IDs, or is deduplication intentionally handled further down your pipeline?","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":21,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":21,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Redo","depth":21,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Share & export","depth":20,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":21,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":20,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXTextArea","text":"Enter a prompt for Gemini\nencrypted","depth":20,"on_screen":true,"value":"Enter a prompt for Gemini\nencrypted","help_text":"","role_description":"text entry area","subrole":"AXUnknown","is_enabled":true,"is_focused":true,"is_selected":false},{"role":"AXStaticText","text":"Enter a prompt for Gemini","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"encrypted","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open upload file menu","depth":20,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tools","depth":18,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open mode picker","depth":20,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pro","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Microphone","depth":19,"on_screen":true,"role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
-8896019929687806558
|
8165702397781964183
|
click
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New chat
Gemini
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Gemini said
Gemini said
Here is a precise and concise summary of the code selection, which refactors
SelectionListTest
to accommodate a shift from fixed high/normal priority properties to a more dynamic, enum-driven priority group architecture.
Refactored Priority Handling
Refactored Priority Handling
Dynamic Priority Groups:
Replaces fixed high/normal array parameters with the
QueuePriorityEnum
(
HIGH
,
NORMAL
,
LOW
), allowing entity lists to be managed dynamically by group types.
Merged Registrations:
Validates that multiple
addEntityList()
calls targeting the same priority level properly merge their data instead of overwriting it.
Group Querying:
Tests new methods
getEntityListItemsByGroup()
and
getEntityListGroups()
to retrieve group-specific IDs or an array of active group names (e.g.,
['high', 'normal']
).
Updated State and Count Validations
Updated State and Count Validations
Instantiation:
Tests now instantiate
SelectionList
without initial constructor arguments, using setters and action methods instead.
Empty States:
Updates assertions (
isEmpty()
) to verify state based on whether any entities have been dynamically added, rather than checking pre-defined constructor arrays.
Stale Flags:
Changes from passing a
stale
boolean via the constructor to explicitly triggering a mutable
$selectionList->markStale()
method.
Chunk Capacity Behavior
Chunk Capacity Behavior
Flexible Chunk Sizes:
Introduces a
setChunkSize()
method, replacing the constructor-configured chunk boundary.
Capacity Assertions:
Retains and updates the logic for
isFullChunk()
, ensuring it accurately evaluates capacity when elements span multiple dynamic priority groups or when the chunk limit is altered mid-lifecycle.
Good response
Bad response
Share & export
Copy
Show more options
Copy prompt
Edit
You said Are there any issues or potential bolltenecks
You said
Are there any issues or potential bolltenecks
Listen
Show thinking
Gemini said
Gemini said
Based on the test diff you provided, we can infer a few potential issues and architectural bottlenecks in the underlying
SelectionList
implementation. While the tests are well-structured, the behavior they describe hints at a few areas you might want to keep an eye on, particularly for an Elasticsearch (ES) processor queue.
Here are the potential issues and bottlenecks to consider:
1. Array Merging Overhead (Performance)
1. Array Merging Overhead (Performance)
The
testAddEntityListMergesMultipleCallsForSamePriority
test shows that calling
addEntityList()
multiple times for the same priority group merges the arrays.
The Bottleneck:
If the underlying implementation uses
array_merge()
inside a loop to append these IDs, it creates a new array in memory every time it's called. If you are processing thousands of entities and appending them in small batches, this can lead to memory bloat and CPU degradation due to constant array reallocation.
Mitigation:
Ensure the implementation handles batch appends efficiently (e.g., using the spread operator
[...$existing, ...$new]
or appending via references) or groups the arrays before doing a single merge.
2. Lack of Uniqueness/Deduplication (Logic)
2. Lack of Uniqueness/Deduplication (Logic)
None of the tests explicitly verify what happens if duplicate IDs are added. For example, if you call
addEntityList(QueuePriorityEnum::HIGH, [1, 2])
and then
addEntityList(QueuePriorityEnum::HIGH, [2, 3])
.
The Issue:
Does the getter return
[1, 2, 2, 3]
or
[1, 2, 3]
? If duplicates are not filtered out, your ES processor might end up indexing the same entity multiple times in a single chunk, which wastes I/O and processor cycles.
Mitigation:
The underlying class should ideally enforce uniqueness (e.g., using
array_unique()
before resolving the chunk, or using ID keys as associative array keys to naturally prevent duplicates).
3. Memory Consumption with Large Chunks (Scalability)
3. Memory Consumption with Large Chunks (Scalability)
The tests introduce
setChunkSize()
. If this chunk size is configured to be very large (e.g., tens of thousands of IDs to bulk-send to Elasticsearch).
The Bottleneck:
Holding massive arrays of IDs in memory across different priority groups can quickly hit PHP memory limits, especially if this
SelectionList
object is kept alive during a long-running daemon or cron job.
Mitigation:
Monitor memory usage if
CHUNK_SIZE
grows, and ensure the
SelectionList
object is properly destroyed (or garbage collected) after the chunk is processed to free up memory.
4. Type Juggling
4. Type Juggling
In the original code, string IDs were used (
['p1', 'p2']
). In the refactored tests, integer IDs are used (
[1, 2]
).
The Issue:
If your system handles UUIDs (strings) vs. relational DB auto-increments (integers), make sure the underlying implementation uses strict comparisons (
===
) where necessary, especially if deduplicating arrays, to prevent PHP from juggling
'1'
and
1
improperly.
Would you like me to draft a quick test case to check how the class currently handles duplicate IDs, or is deduplication intentionally handled further down your pipeline?
Good response
Bad response
Redo
Share & export
Copy
Show more options
Enter a prompt for Gemini
encrypted
Enter a prompt for Gemini
encrypted
Open upload file menu
Tools
Open mode picker
Pro
Microphone...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
55647
|
1931
|
13
|
2026-05-19T06:34:18.022162+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-19/1779 /Users/lukas/.screenpipe/data/data/2026-05-19/1779172458022_m2.jpg...
|
Firefox
|
JY-20808 low priority indexing queue by Vasil-Jimi JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app — Work...
|
1
|
github.com/jiminny/app/pull/12082/changes
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New chat
Gemini
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Gemini said
Gemini said
Here is a precise and concise summary of the code selection, which refactors
SelectionListTest
to accommodate a shift from fixed high/normal priority properties to a more dynamic, enum-driven priority group architecture.
Refactored Priority Handling
Refactored Priority Handling
Dynamic Priority Groups:
Replaces fixed high/normal array parameters with the
QueuePriorityEnum
(
HIGH
,
NORMAL
,
LOW
), allowing entity lists to be managed dynamically by group types.
Merged Registrations:
Validates that multiple
addEntityList()
calls targeting the same priority level properly merge their data instead of overwriting it.
Group Querying:
Tests new methods
getEntityListItemsByGroup()
and
getEntityListGroups()
to retrieve group-specific IDs or an array of active group names (e.g.,
['high', 'normal']
).
Updated State and Count Validations
Updated State and Count Validations
Instantiation:
Tests now instantiate
SelectionList
without initial constructor arguments, using setters and action methods instead.
Empty States:
Updates assertions (
isEmpty()
) to verify state based on whether any entities have been dynamically added, rather than checking pre-defined constructor arrays.
Stale Flags:
Changes from passing a
stale
boolean via the constructor to explicitly triggering a mutable
$selectionList->markStale()
method.
Chunk Capacity Behavior
Chunk Capacity Behavior
Flexible Chunk Sizes:
Introduces a
setChunkSize()
method, replacing the constructor-configured chunk boundary.
Capacity Assertions:
Retains and updates the logic for
isFullChunk()
, ensuring it accurately evaluates capacity when elements span multiple dynamic priority groups or when the chunk limit is altered mid-lifecycle.
Good response
Bad response
Share & export
Copy
Show more options
Copy prompt
Edit
You said Are there any issues or potential bolltenecks
You said
Are there any issues or potential bolltenecks
Listen
Show thinking
Gemini said
Gemini said
Based on the test diff you provided, we can infer a few potential issues and architectural bottlenecks in the underlying
SelectionList
implementation. While the tests are well-structured, the behavior they describe hints at a few areas you might want to keep an eye on, particularly for an Elasticsearch (ES) processor queue.
Here are the potential issues and bottlenecks to consider:
1. Array Merging Overhead (Performance)
1. Array Merging Overhead (Performance)
The
testAddEntityListMergesMultipleCallsForSamePriority
test shows that calling
addEntityList()
multiple times for the same priority group merges the arrays.
The Bottleneck:
If the underlying implementation uses
array_merge()
inside a loop to append these IDs, it creates a new array in memory every time it's called. If you are processing thousands of entities and appending them in small batches, this can lead to memory bloat and CPU degradation due to constant array reallocation.
Mitigation:
Ensure the implementation handles batch appends efficiently (e.g., using the spread operator
[...$existing, ...$new]
or appending via references) or groups the arrays before doing a single merge.
2. Lack of Uniqueness/Deduplication (Logic)
2. Lack of Uniqueness/Deduplication (Logic)
None of the tests explicitly verify what happens if duplicate IDs are added. For example, if you call
addEntityList(QueuePriorityEnum::HIGH, [1, 2])
and then
addEntityList(QueuePriorityEnum::HIGH, [2, 3])
.
The Issue:
Does the getter return
[1, 2, 2, 3]
or
[1, 2, 3]
? If duplicates are not filtered out, your ES processor might end up indexing the same entity multiple times in a single chunk, which wastes I/O and processor cycles.
Mitigation:
The underlying class should ideally enforce uniqueness (e.g., using
array_unique()
before resolving the chunk, or using ID keys as associative array keys to naturally prevent duplicates).
3. Memory Consumption with Large Chunks (Scalability)
3. Memory Consumption with Large Chunks (Scalability)
The tests introduce
setChunkSize()
. If this chunk size is configured to be very large (e.g., tens of thousands of IDs to bulk-send to Elasticsearch).
The Bottleneck:
Holding massive arrays of IDs in memory across different priority groups can quickly hit PHP memory limits, especially if this
SelectionList
object is kept alive during a long-running daemon or cron job.
Mitigation:
Monitor memory usage if
CHUNK_SIZE
grows, and ensure the
SelectionList
object is properly destroyed (or garbage collected) after the chunk is processed to free up memory.
4. Type Juggling
4. Type Juggling
In the original code, string IDs were used (
['p1', 'p2']
). In the refactored tests, integer IDs are used (
[1, 2]
).
The Issue:
If your system handles UUIDs (strings) vs. relational DB auto-increments (integers), make sure the underlying implementation uses strict comparisons (
===
) where necessary, especially if deduplicating arrays, to prevent PHP from juggling
'1'
and
1
improperly.
Would you like me to draft a quick test case to check how the class currently handles duplicate IDs, or is deduplication intentionally handled further down your pipeline?
Good response...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.10106383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.18816489,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.15674867,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.1245012,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.15163608,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":7,"bounds":{"left":0.35854387,"top":0.055067837,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":7,"bounds":{"left":0.37051198,"top":0.055067837,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"WORK, Google Account: lukas.kovalik@jiminny.com","depth":12,"bounds":{"left":0.3678524,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Main menu","depth":12,"bounds":{"left":0.08494016,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New chat","depth":12,"bounds":{"left":0.09823803,"top":0.10454908,"width":0.028590426,"height":0.030327214},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gemini","depth":15,"bounds":{"left":0.1008976,"top":0.10973663,"width":0.021941489,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Chat","depth":12,"bounds":{"left":0.33992687,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open menu for conversation actions.","depth":12,"bounds":{"left":0.35322472,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Conversation with Gemini","depth":15,"bounds":{"left":0.079288565,"top":0.14764565,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":16,"bounds":{"left":0.079288565,"top":0.15003991,"width":0.1200133,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":21,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;667use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;7use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;8+use Jiminny\\Component\\ES\\QueuePriorityEnum;8use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\TestCase;10use PHPUnit\\Framework\\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;667use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;7use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;8+use Jiminny\\Component\\ES\\QueuePriorityEnum;8use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\TestCase;10use PHPUnit\\Framework\\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected.","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Listen","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is a precise and concise summary of the code selection, which refactors","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionListTest","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to accommodate a shift from fixed high/normal priority properties to a more dynamic, enum-driven priority group architecture.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Refactored Priority Handling","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Refactored Priority Handling","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dynamic Priority Groups:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Replaces fixed high/normal array parameters with the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QueuePriorityEnum","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HIGH","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NORMAL","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"LOW","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"), allowing entity lists to be managed dynamically by group types.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Merged Registrations:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Validates that multiple","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"calls targeting the same priority level properly merge their data instead of overwriting it.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Group Querying:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tests new methods","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getEntityListItemsByGroup()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getEntityListGroups()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to retrieve group-specific IDs or an array of active group names (e.g.,","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"['high', 'normal']","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Updated State and Count Validations","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Updated State and Count Validations","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Instantiation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tests now instantiate","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"without initial constructor arguments, using setters and action methods instead.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Empty States:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Updates assertions (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"isEmpty()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") to verify state based on whether any entities have been dynamically added, rather than checking pre-defined constructor arrays.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Stale Flags:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Changes from passing a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"stale","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"boolean via the constructor to explicitly triggering a mutable","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$selectionList->markStale()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Chunk Capacity Behavior","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Chunk Capacity Behavior","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Flexible Chunk Sizes:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Introduces a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"setChunkSize()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method, replacing the constructor-configured chunk boundary.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Capacity Assertions:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Retains and updates the logic for","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"isFullChunk()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", ensuring it accurately evaluates capacity when elements span multiple dynamic priority groups or when the chunk limit is altered mid-lifecycle.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":22,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":22,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":21,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":22,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy prompt","depth":21,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said Are there any issues or potential bolltenecks","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Are there any issues or potential bolltenecks","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Listen","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Show thinking","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Based on the test diff you provided, we can infer a few potential issues and architectural bottlenecks in the underlying","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"implementation. While the tests are well-structured, the behavior they describe hints at a few areas you might want to keep an eye on, particularly for an Elasticsearch (ES) processor queue.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here are the potential issues and bottlenecks to consider:","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"1. Array Merging Overhead (Performance)","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1. Array Merging Overhead (Performance)","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"testAddEntityListMergesMultipleCallsForSamePriority","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test shows that calling","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList()","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"multiple times for the same priority group merges the arrays.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Bottleneck:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If the underlying implementation uses","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"array_merge()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"inside a loop to append these IDs, it creates a new array in memory every time it's called. If you are processing thousands of entities and appending them in small batches, this can lead to memory bloat and CPU degradation due to constant array reallocation.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mitigation:","depth":26,"bounds":{"left":0.12599733,"top":0.0,"width":0.027925532,"height":0.016360734},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ensure the implementation handles batch appends efficiently (e.g., using the spread operator","depth":26,"bounds":{"left":0.12599733,"top":0.0,"width":0.23271276,"height":0.038707104},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[...$existing, ...$new]","depth":27,"bounds":{"left":0.15026596,"top":0.016360734,"width":0.064328454,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or appending via references) or groups the arrays before doing a single merge.","depth":26,"bounds":{"left":0.12599733,"top":0.015163607,"width":0.23055187,"height":0.038707104},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"2. Lack of Uniqueness/Deduplication (Logic)","depth":23,"bounds":{"left":0.11336436,"top":0.079010375,"width":0.24534574,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2. Lack of Uniqueness/Deduplication (Logic)","depth":24,"bounds":{"left":0.11336436,"top":0.08060654,"width":0.114527926,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"None of the tests explicitly verify what happens if duplicate IDs are added. For example, if you call","depth":24,"bounds":{"left":0.11336436,"top":0.10774142,"width":0.23703457,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList(QueuePriorityEnum::HIGH, [1, 2])","depth":25,"bounds":{"left":0.115359046,"top":0.13128492,"width":0.12849069,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and then","depth":24,"bounds":{"left":0.24584441,"top":0.1300878,"width":0.024268618,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList(QueuePriorityEnum::HIGH, [2, 3])","depth":25,"bounds":{"left":0.115359046,"top":0.15363128,"width":0.12849069,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":24,"bounds":{"left":0.24584441,"top":0.15243416,"width":0.0013297872,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Issue:","depth":26,"bounds":{"left":0.12599733,"top":0.18355946,"width":0.02642952,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Does the getter return","depth":26,"bounds":{"left":0.15242687,"top":0.18355946,"width":0.05668218,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[1, 2, 2, 3]","depth":27,"bounds":{"left":0.21110372,"top":0.18475658,"width":0.033410903,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or","depth":26,"bounds":{"left":0.24650931,"top":0.18355946,"width":0.0078125,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[1, 2, 3]","depth":27,"bounds":{"left":0.25631648,"top":0.18475658,"width":0.025099734,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"? If duplicates are not filtered out, your ES processor might end up indexing the same entity multiple times in a single chunk, which wastes I/O and processor cycles.","depth":26,"bounds":{"left":0.12599733,"top":0.18355946,"width":0.22955452,"height":0.061053474},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mitigation:","depth":26,"bounds":{"left":0.12599733,"top":0.25937748,"width":0.027925532,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The underlying class should ideally enforce uniqueness (e.g., using","depth":26,"bounds":{"left":0.15392287,"top":0.25937748,"width":0.16306517,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"array_unique()","depth":27,"bounds":{"left":0.12799202,"top":0.282921,"width":0.0390625,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"before resolving the chunk, or using ID keys as associative array keys to naturally prevent duplicates).","depth":26,"bounds":{"left":0.12599733,"top":0.28172386,"width":0.21841756,"height":0.038707104},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"3. Memory Consumption with Large Chunks (Scalability)","depth":23,"bounds":{"left":0.11336436,"top":0.34557062,"width":0.24534574,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3. Memory Consumption with Large Chunks (Scalability)","depth":24,"bounds":{"left":0.11336436,"top":0.3471668,"width":0.14544548,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The tests introduce","depth":24,"bounds":{"left":0.11336436,"top":0.37430167,"width":0.048204787,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"setChunkSize()","depth":25,"bounds":{"left":0.16356383,"top":0.3754988,"width":0.0390625,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":". If this chunk size is configured to be very large (e.g., tens of thousands of IDs to bulk-send to Elasticsearch).","depth":24,"bounds":{"left":0.11336436,"top":0.37430167,"width":0.23902926,"height":0.038707104},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Bottleneck:","depth":26,"bounds":{"left":0.12599733,"top":0.42777336,"width":0.041223403,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Holding massive arrays of IDs in memory across different priority groups can quickly hit PHP memory limits, especially if this","depth":26,"bounds":{"left":0.12599733,"top":0.42777336,"width":0.22805852,"height":0.038707104},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":27,"bounds":{"left":0.24202128,"top":0.45131683,"width":0.036402926,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"object is kept alive during a long-running daemon or cron job.","depth":26,"bounds":{"left":0.12599733,"top":0.4501197,"width":0.22290559,"height":0.038707104},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mitigation:","depth":26,"bounds":{"left":0.12599733,"top":0.50359136,"width":0.027925532,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Monitor memory usage if","depth":26,"bounds":{"left":0.15392287,"top":0.50359136,"width":0.0631649,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CHUNK_SIZE","depth":27,"bounds":{"left":0.21908244,"top":0.5047885,"width":0.027925532,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"grows, and ensure the","depth":26,"bounds":{"left":0.24900267,"top":0.50359136,"width":0.056349736,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":27,"bounds":{"left":0.3073471,"top":0.5047885,"width":0.036236703,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"object is properly destroyed (or garbage collected) after the chunk is processed to free up memory.","depth":26,"bounds":{"left":0.12599733,"top":0.50359136,"width":0.2209109,"height":0.061053474},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"4. Type Juggling","depth":23,"bounds":{"left":0.11336436,"top":0.5897845,"width":0.24534574,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4. Type Juggling","depth":24,"bounds":{"left":0.11336436,"top":0.5913807,"width":0.042054523,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"In the original code, string IDs were used (","depth":24,"bounds":{"left":0.11336436,"top":0.61851555,"width":0.10139628,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"['p1', 'p2']","depth":25,"bounds":{"left":0.21675532,"top":0.6197127,"width":0.03357713,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"). In the refactored tests, integer IDs are used (","depth":24,"bounds":{"left":0.11336436,"top":0.61851555,"width":0.2365359,"height":0.038707104},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[1, 2]","depth":25,"bounds":{"left":0.13048537,"top":0.6420591,"width":0.01662234,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":24,"bounds":{"left":0.14910239,"top":0.6408619,"width":0.0033244682,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Issue:","depth":26,"bounds":{"left":0.12599733,"top":0.67198724,"width":0.02642952,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If your system handles UUIDs (strings) vs. relational DB auto-increments (integers), make sure the underlying implementation uses strict comparisons (","depth":26,"bounds":{"left":0.12599733,"top":0.67198724,"width":0.22855718,"height":0.038707104},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"===","depth":27,"bounds":{"left":0.2897274,"top":0.6955307,"width":0.00831117,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") where necessary, especially if deduplicating arrays, to prevent PHP from juggling","depth":26,"bounds":{"left":0.12599733,"top":0.6943336,"width":0.2209109,"height":0.038707104},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"'1'","depth":27,"bounds":{"left":0.2805851,"top":0.7178771,"width":0.00831117,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":26,"bounds":{"left":0.29089096,"top":0.71668,"width":0.011968086,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":27,"bounds":{"left":0.30485374,"top":0.7178771,"width":0.0026595744,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"improperly.","depth":26,"bounds":{"left":0.30950797,"top":0.71668,"width":0.028424202,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Would you like me to draft a quick test case to check how the class currently handles duplicate IDs, or is deduplication intentionally handled further down your pipeline?","depth":24,"bounds":{"left":0.11336436,"top":0.7589784,"width":0.24534574,"height":0.038707104},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":21,"bounds":{"left":0.1100399,"top":0.8156425,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
8769563922427399973
|
8165702397781963157
|
click
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New chat
Gemini
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Gemini said
Gemini said
Here is a precise and concise summary of the code selection, which refactors
SelectionListTest
to accommodate a shift from fixed high/normal priority properties to a more dynamic, enum-driven priority group architecture.
Refactored Priority Handling
Refactored Priority Handling
Dynamic Priority Groups:
Replaces fixed high/normal array parameters with the
QueuePriorityEnum
(
HIGH
,
NORMAL
,
LOW
), allowing entity lists to be managed dynamically by group types.
Merged Registrations:
Validates that multiple
addEntityList()
calls targeting the same priority level properly merge their data instead of overwriting it.
Group Querying:
Tests new methods
getEntityListItemsByGroup()
and
getEntityListGroups()
to retrieve group-specific IDs or an array of active group names (e.g.,
['high', 'normal']
).
Updated State and Count Validations
Updated State and Count Validations
Instantiation:
Tests now instantiate
SelectionList
without initial constructor arguments, using setters and action methods instead.
Empty States:
Updates assertions (
isEmpty()
) to verify state based on whether any entities have been dynamically added, rather than checking pre-defined constructor arrays.
Stale Flags:
Changes from passing a
stale
boolean via the constructor to explicitly triggering a mutable
$selectionList->markStale()
method.
Chunk Capacity Behavior
Chunk Capacity Behavior
Flexible Chunk Sizes:
Introduces a
setChunkSize()
method, replacing the constructor-configured chunk boundary.
Capacity Assertions:
Retains and updates the logic for
isFullChunk()
, ensuring it accurately evaluates capacity when elements span multiple dynamic priority groups or when the chunk limit is altered mid-lifecycle.
Good response
Bad response
Share & export
Copy
Show more options
Copy prompt
Edit
You said Are there any issues or potential bolltenecks
You said
Are there any issues or potential bolltenecks
Listen
Show thinking
Gemini said
Gemini said
Based on the test diff you provided, we can infer a few potential issues and architectural bottlenecks in the underlying
SelectionList
implementation. While the tests are well-structured, the behavior they describe hints at a few areas you might want to keep an eye on, particularly for an Elasticsearch (ES) processor queue.
Here are the potential issues and bottlenecks to consider:
1. Array Merging Overhead (Performance)
1. Array Merging Overhead (Performance)
The
testAddEntityListMergesMultipleCallsForSamePriority
test shows that calling
addEntityList()
multiple times for the same priority group merges the arrays.
The Bottleneck:
If the underlying implementation uses
array_merge()
inside a loop to append these IDs, it creates a new array in memory every time it's called. If you are processing thousands of entities and appending them in small batches, this can lead to memory bloat and CPU degradation due to constant array reallocation.
Mitigation:
Ensure the implementation handles batch appends efficiently (e.g., using the spread operator
[...$existing, ...$new]
or appending via references) or groups the arrays before doing a single merge.
2. Lack of Uniqueness/Deduplication (Logic)
2. Lack of Uniqueness/Deduplication (Logic)
None of the tests explicitly verify what happens if duplicate IDs are added. For example, if you call
addEntityList(QueuePriorityEnum::HIGH, [1, 2])
and then
addEntityList(QueuePriorityEnum::HIGH, [2, 3])
.
The Issue:
Does the getter return
[1, 2, 2, 3]
or
[1, 2, 3]
? If duplicates are not filtered out, your ES processor might end up indexing the same entity multiple times in a single chunk, which wastes I/O and processor cycles.
Mitigation:
The underlying class should ideally enforce uniqueness (e.g., using
array_unique()
before resolving the chunk, or using ID keys as associative array keys to naturally prevent duplicates).
3. Memory Consumption with Large Chunks (Scalability)
3. Memory Consumption with Large Chunks (Scalability)
The tests introduce
setChunkSize()
. If this chunk size is configured to be very large (e.g., tens of thousands of IDs to bulk-send to Elasticsearch).
The Bottleneck:
Holding massive arrays of IDs in memory across different priority groups can quickly hit PHP memory limits, especially if this
SelectionList
object is kept alive during a long-running daemon or cron job.
Mitigation:
Monitor memory usage if
CHUNK_SIZE
grows, and ensure the
SelectionList
object is properly destroyed (or garbage collected) after the chunk is processed to free up memory.
4. Type Juggling
4. Type Juggling
In the original code, string IDs were used (
['p1', 'p2']
). In the refactored tests, integer IDs are used (
[1, 2]
).
The Issue:
If your system handles UUIDs (strings) vs. relational DB auto-increments (integers), make sure the underlying implementation uses strict comparisons (
===
) where necessary, especially if deduplicating arrays, to prevent PHP from juggling
'1'
and
1
improperly.
Would you like me to draft a quick test case to check how the class currently handles duplicate IDs, or is deduplication intentionally handled further down your pipeline?
Good response...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
55648
|
1931
|
14
|
2026-05-19T06:34:25.453436+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-19/1779 /Users/lukas/.screenpipe/data/data/2026-05-19/1779172465453_m2.jpg...
|
Firefox
|
JY-20808 low priority indexing queue by Vasil-Jimi JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app — Work...
|
1
|
github.com/jiminny/app/pull/12082/changes
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New chat
Gemini
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Gemini said
Gemini said
Here is a precise and concise summary of the code selection, which refactors
SelectionListTest
to accommodate a shift from fixed high/normal priority properties to a more dynamic, enum-driven priority group architecture.
Refactored Priority Handling
Refactored Priority Handling
Dynamic Priority Groups:
Replaces fixed high/normal array parameters with the
QueuePriorityEnum
(
HIGH
,
NORMAL
,
LOW
), allowing entity lists to be managed dynamically by group types.
Merged Registrations:
Validates that multiple
addEntityList()
calls targeting the same priority level properly merge their data instead of overwriting it.
Group Querying:
Tests new methods
getEntityListItemsByGroup()
and
getEntityListGroups()
to retrieve group-specific IDs or an array of active group names (e.g.,
['high', 'normal']
).
Updated State and Count Validations
Updated State and Count Validations
Instantiation:
Tests now instantiate
SelectionList
without initial constructor arguments, using setters and action methods instead.
Empty States:
Updates assertions (
isEmpty()
) to verify state based on whether any entities have been dynamically added, rather than checking pre-defined constructor arrays.
Stale Flags:
Changes from passing a
stale
boolean via the constructor to explicitly triggering a mutable
$selectionList->markStale()
method.
Chunk Capacity Behavior
Chunk Capacity Behavior
Flexible Chunk Sizes:
Introduces a
setChunkSize()
method, replacing the constructor-configured chunk boundary.
Capacity Assertions:
Retains and updates the logic for
isFullChunk()
, ensuring it accurately evaluates capacity when elements span multiple dynamic priority groups or when the chunk limit is altered mid-lifecycle.
Good response
Bad response
Share & export
Copy
Show more options
Copy prompt
You said Are there any issues or potential bolltenecks
You said
Are there any issues or potential bolltenecks
Listen
Show thinking
Gemini said
Gemini said
Based on the test diff you provided, we can infer a few potential issues and architectural bottlenecks in the underlying
SelectionList
implementation. While the tests are well-structured, the behavior they describe hints at a few areas you might want to keep an eye on, particularly for an Elasticsearch (ES) processor queue.
Here are the potential issues and bottlenecks to consider:
1. Array Merging Overhead (Performance)
1. Array Merging Overhead (Performance)
The
testAddEntityListMergesMultipleCallsForSamePriority
test shows that calling
addEntityList()
multiple times for the same priority group merges the arrays.
The Bottleneck:
If the underlying implementation uses
array_merge()
inside a loop to append these IDs, it creates a new array in memory every time it's called. If you are processing thousands of entities and appending them in small batches, this can lead to memory bloat and CPU degradation due to constant array reallocation.
Mitigation:
Ensure the implementation handles batch appends efficiently (e.g., using the spread operator
[...$existing, ...$new]
or appending via references) or groups the arrays before doing a single merge.
2. Lack of Uniqueness/Deduplication (Logic)
2. Lack of Uniqueness/Deduplication (Logic)
None of the tests explicitly verify what happens if duplicate IDs are added. For example, if you call
addEntityList(QueuePriorityEnum::HIGH, [1, 2])
and then
addEntityList(QueuePriorityEnum::HIGH, [2, 3])
.
The Issue:
Does the getter return
[1, 2, 2, 3]
or
[1, 2, 3]
? If duplicates are not filtered out, your ES processor might end up indexing the same entity multiple times in a single chunk, which wastes I/O and processor cycles.
Mitigation:
The underlying class should ideally enforce uniqueness (e.g., using
array_unique()
before resolving the chunk, or using ID keys as associative array keys to naturally prevent duplicates).
3. Memory Consumption with Large Chunks (Scalability)
3. Memory Consumption with Large Chunks (Scalability)
The tests introduce
setChunkSize()
. If this chunk size is configured to be very large (e.g., tens of thousands of IDs to bulk-send to Elasticsearch).
The Bottleneck:
Holding massive arrays of IDs in memory across different priority groups can quickly hit PHP memory limits, especially if this
SelectionList
object is kept alive during a long-running daemon or cron job.
Mitigation:
Monitor memory usage if
CHUNK_SIZE
grows, and ensure the
SelectionList
object is properly destroyed (or garbage collected) after the chunk is processed to free up memory.
4. Type Juggling
4. Type Juggling
In the original code, string IDs were used (
['p1', 'p2']
). In the refactored tests, integer IDs are used (
[1, 2]
).
The Issue:
If your system handles UUIDs (strings) vs. relational DB auto-increments (integers), make sure the underlying implementation uses strict comparisons (
===
) where necessary, especially if deduplicating arrays, to prevent PHP from juggling
'1'
and
1
improperly.
Would you like me to draft a quick test case to check how the class currently handles duplicate IDs, or is deduplication intentionally handled further down your pipeline?
Good response
Bad response
Share & export
Copy
Show more options
Copy prompt
Edit
You said what about non test files
You said
what about non test files
Enter a prompt for Gemini
encrypted
Enter a prompt for Gemini
encrypted
Open upload file menu
Tools
Open mode picker
Pro
Stop response
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Gemini is typing
Summarize page
Summarize page
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
All issues(g then i)
All pull requests
All repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code
Pull requests (31)
Pull requests
(
31
)
Agents
Agents
Actions
Actions
Wiki
Wiki
Security and quality (1)
Security and quality
(
1
)
Insights
Insights
Settings
Settings
Important update
Important update
On April 24 we'll start using GitHub Copilot interaction data for AI model training unless you opt out.
Review this update
Review this update
and manage your preferences in your
GitHub account settings
GitHub account settings
.
Dismiss banner...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.10106383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.18816489,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.15674867,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.1245012,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.15163608,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":7,"bounds":{"left":0.35854387,"top":0.055067837,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":7,"bounds":{"left":0.37051198,"top":0.055067837,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"WORK, Google Account: lukas.kovalik@jiminny.com","depth":12,"bounds":{"left":0.3678524,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Main menu","depth":12,"bounds":{"left":0.08494016,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New chat","depth":12,"bounds":{"left":0.09823803,"top":0.10454908,"width":0.028590426,"height":0.030327214},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gemini","depth":15,"bounds":{"left":0.1008976,"top":0.10973663,"width":0.021941489,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Chat","depth":12,"bounds":{"left":0.33992687,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open menu for conversation actions.","depth":12,"bounds":{"left":0.35322472,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Conversation with Gemini","depth":15,"bounds":{"left":0.079288565,"top":0.14764565,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":16,"bounds":{"left":0.079288565,"top":0.15003991,"width":0.1200133,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":21,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;667use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;7use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;8+use Jiminny\\Component\\ES\\QueuePriorityEnum;8use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\TestCase;10use PHPUnit\\Framework\\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;667use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;7use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;8+use Jiminny\\Component\\ES\\QueuePriorityEnum;8use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\TestCase;10use PHPUnit\\Framework\\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected.","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Listen","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is a precise and concise summary of the code selection, which refactors","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionListTest","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to accommodate a shift from fixed high/normal priority properties to a more dynamic, enum-driven priority group architecture.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Refactored Priority Handling","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Refactored Priority Handling","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dynamic Priority Groups:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Replaces fixed high/normal array parameters with the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QueuePriorityEnum","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HIGH","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NORMAL","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"LOW","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"), allowing entity lists to be managed dynamically by group types.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Merged Registrations:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Validates that multiple","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"calls targeting the same priority level properly merge their data instead of overwriting it.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Group Querying:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tests new methods","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getEntityListItemsByGroup()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getEntityListGroups()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to retrieve group-specific IDs or an array of active group names (e.g.,","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"['high', 'normal']","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Updated State and Count Validations","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Updated State and Count Validations","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Instantiation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tests now instantiate","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"without initial constructor arguments, using setters and action methods instead.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Empty States:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Updates assertions (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"isEmpty()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") to verify state based on whether any entities have been dynamically added, rather than checking pre-defined constructor arrays.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Stale Flags:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Changes from passing a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"stale","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"boolean via the constructor to explicitly triggering a mutable","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$selectionList->markStale()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Chunk Capacity Behavior","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Chunk Capacity Behavior","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Flexible Chunk Sizes:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Introduces a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"setChunkSize()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method, replacing the constructor-configured chunk boundary.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Capacity Assertions:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Retains and updates the logic for","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"isFullChunk()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", ensuring it accurately evaluates capacity when elements span multiple dynamic priority groups or when the chunk limit is altered mid-lifecycle.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":22,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":22,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":21,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":22,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy prompt","depth":21,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said Are there any issues or potential bolltenecks","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Are there any issues or potential bolltenecks","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Listen","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Show thinking","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Based on the test diff you provided, we can infer a few potential issues and architectural bottlenecks in the underlying","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"implementation. While the tests are well-structured, the behavior they describe hints at a few areas you might want to keep an eye on, particularly for an Elasticsearch (ES) processor queue.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here are the potential issues and bottlenecks to consider:","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"1. Array Merging Overhead (Performance)","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1. Array Merging Overhead (Performance)","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"testAddEntityListMergesMultipleCallsForSamePriority","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test shows that calling","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList()","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"multiple times for the same priority group merges the arrays.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Bottleneck:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If the underlying implementation uses","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"array_merge()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"inside a loop to append these IDs, it creates a new array in memory every time it's called. If you are processing thousands of entities and appending them in small batches, this can lead to memory bloat and CPU degradation due to constant array reallocation.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mitigation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ensure the implementation handles batch appends efficiently (e.g., using the spread operator","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[...$existing, ...$new]","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or appending via references) or groups the arrays before doing a single merge.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"2. Lack of Uniqueness/Deduplication (Logic)","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2. Lack of Uniqueness/Deduplication (Logic)","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"None of the tests explicitly verify what happens if duplicate IDs are added. For example, if you call","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList(QueuePriorityEnum::HIGH, [1, 2])","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and then","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList(QueuePriorityEnum::HIGH, [2, 3])","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Issue:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Does the getter return","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[1, 2, 2, 3]","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[1, 2, 3]","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"? If duplicates are not filtered out, your ES processor might end up indexing the same entity multiple times in a single chunk, which wastes I/O and processor cycles.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mitigation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The underlying class should ideally enforce uniqueness (e.g., using","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"array_unique()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"before resolving the chunk, or using ID keys as associative array keys to naturally prevent duplicates).","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"3. Memory Consumption with Large Chunks (Scalability)","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3. Memory Consumption with Large Chunks (Scalability)","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The tests introduce","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"setChunkSize()","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":". If this chunk size is configured to be very large (e.g., tens of thousands of IDs to bulk-send to Elasticsearch).","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Bottleneck:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Holding massive arrays of IDs in memory across different priority groups can quickly hit PHP memory limits, especially if this","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"object is kept alive during a long-running daemon or cron job.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mitigation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Monitor memory usage if","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CHUNK_SIZE","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"grows, and ensure the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"object is properly destroyed (or garbage collected) after the chunk is processed to free up memory.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"4. Type Juggling","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4. Type Juggling","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"In the original code, string IDs were used (","depth":24,"bounds":{"left":0.11336436,"top":0.0,"width":0.10139628,"height":0.016360734},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"['p1', 'p2']","depth":25,"bounds":{"left":0.21675532,"top":0.0,"width":0.03357713,"height":0.014764565},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"). In the refactored tests, integer IDs are used (","depth":24,"bounds":{"left":0.11336436,"top":0.0,"width":0.2365359,"height":0.038707104},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[1, 2]","depth":25,"bounds":{"left":0.13048537,"top":0.0,"width":0.01662234,"height":0.014764565},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":24,"bounds":{"left":0.14910239,"top":0.0,"width":0.0033244682,"height":0.016360734},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Issue:","depth":26,"bounds":{"left":0.12599733,"top":0.0,"width":0.02642952,"height":0.016360734},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If your system handles UUIDs (strings) vs. relational DB auto-increments (integers), make sure the underlying implementation uses strict comparisons (","depth":26,"bounds":{"left":0.12599733,"top":0.0,"width":0.22855718,"height":0.038707104},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"===","depth":27,"bounds":{"left":0.2897274,"top":0.002793296,"width":0.00831117,"height":0.014764565},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") where necessary, especially if deduplicating arrays, to prevent PHP from juggling","depth":26,"bounds":{"left":0.12599733,"top":0.0015961692,"width":0.2209109,"height":0.038707104},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"'1'","depth":27,"bounds":{"left":0.2805851,"top":0.025139665,"width":0.00831117,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":26,"bounds":{"left":0.29089096,"top":0.023942538,"width":0.011968086,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":27,"bounds":{"left":0.30485374,"top":0.025139665,"width":0.0026595744,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"improperly.","depth":26,"bounds":{"left":0.30950797,"top":0.023942538,"width":0.028424202,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Would you like me to draft a quick test case to check how the class currently handles duplicate IDs, or is deduplication intentionally handled further down your pipeline?","depth":24,"bounds":{"left":0.11336436,"top":0.06624102,"width":0.24534574,"height":0.038707104},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":22,"bounds":{"left":0.1100399,"top":0.12290503,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":22,"bounds":{"left":0.120678194,"top":0.12290503,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":21,"bounds":{"left":0.13131648,"top":0.12290503,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":22,"bounds":{"left":0.1419548,"top":0.12290503,"width":0.010638298,"height":0.025538707},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":21,"bounds":{"left":0.15259309,"top":0.12290503,"width":0.010638298,"height":0.025538707},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy prompt","depth":20,"bounds":{"left":0.26180187,"top":0.1867518,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit","depth":20,"bounds":{"left":0.27642953,"top":0.1867518,"width":0.013297873,"height":0.031923383},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said what about non test files","depth":20,"bounds":{"left":0.29637632,"top":0.19313647,"width":0.059674203,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":22,"bounds":{"left":0.079288565,"top":0.19393456,"width":0.019946808,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"what about non test files","depth":22,"bounds":{"left":0.29637632,"top":0.19473264,"width":0.059674203,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextArea","text":"Enter a prompt for Gemini\nencrypted","depth":20,"bounds":{"left":0.11469415,"top":0.83439744,"width":0.23670213,"height":0.01915403},"on_screen":true,"value":"Enter a prompt for Gemini\nencrypted","help_text":"","role_description":"text entry area","subrole":"AXUnknown","is_enabled":true,"is_focused":true,"is_selected":false},{"role":"AXStaticText","text":"Enter a prompt for Gemini","depth":21,"bounds":{"left":0.12134308,"top":0.8347965,"width":0.069980055,"height":0.018355945},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"encrypted","depth":21,"bounds":{"left":0.113696806,"top":0.83439744,"width":0.0066489363,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open upload file menu","depth":20,"bounds":{"left":0.11070479,"top":0.87031126,"width":0.013297873,"height":0.031923383},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tools","depth":18,"bounds":{"left":0.12666224,"top":0.87031126,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open mode picker","depth":20,"bounds":{"left":0.31399602,"top":0.867917,"width":0.026097074,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pro","depth":23,"bounds":{"left":0.31931517,"top":0.87669593,"width":0.007480053,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Stop response","depth":19,"bounds":{"left":0.3414229,"top":0.8671189,"width":0.013962766,"height":0.033519555},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.","depth":17,"bounds":{"left":0.11303192,"top":0.92178774,"width":0.19996676,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Your privacy & Gemini Opens in a new window","depth":17,"bounds":{"left":0.31299868,"top":0.92178774,"width":0.040059842,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your privacy & Gemini","depth":18,"bounds":{"left":0.31299868,"top":0.92178774,"width":0.040059842,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Opens in a new window","depth":19,"bounds":{"left":0.079288565,"top":0.92098963,"width":0.043218084,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini is typing","depth":9,"bounds":{"left":0.079288565,"top":0.091380686,"width":0.035738032,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Summarize page","depth":7,"bounds":{"left":0.08494016,"top":0.95730245,"width":0.053523935,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":9,"bounds":{"left":0.09059176,"top":0.96249,"width":0.042220745,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Skip to content","depth":6,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to content","depth":7,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open menu","depth":10,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Homepage (g then d)","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"jiminny","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"jiminny","depth":14,"bounds":{"left":0.4245346,"top":0.0,"width":0.014960106,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":14,"bounds":{"left":0.44847074,"top":0.0,"width":0.008477394,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Search or jump to…","depth":9,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Type","depth":12,"bounds":{"left":0.8294548,"top":0.0,"width":0.011801862,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":12,"bounds":{"left":0.84258646,"top":0.0,"width":0.002493351,"height":0.011572227},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to search","depth":12,"bounds":{"left":0.8465758,"top":0.0,"width":0.021276595,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chat with Copilot","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Open Copilot…","depth":9,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Create new...","depth":9,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"All issues(g then i)","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"All pull requests","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"All repositories","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"You have unread notifications(g then n)","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open user navigation menu","depth":9,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Repository navigation","depth":9,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Repository navigation","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":12,"bounds":{"left":0.39461437,"top":0.0,"width":0.025099734,"height":0.026336791},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":14,"bounds":{"left":0.40541887,"top":0.0,"width":0.011469414,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull requests (31)","depth":12,"bounds":{"left":0.42237368,"top":0.0,"width":0.054521278,"height":0.026336791},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull requests","depth":14,"bounds":{"left":0.43301198,"top":0.0,"width":0.02925532,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":14,"bounds":{"left":0.46492687,"top":0.0,"width":0.0029920214,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"31","depth":14,"bounds":{"left":0.46791887,"top":0.0,"width":0.004986702,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":14,"bounds":{"left":0.47290558,"top":0.0,"width":0.0016622341,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Agents","depth":12,"bounds":{"left":0.47955453,"top":0.0,"width":0.029089095,"height":0.026336791},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Agents","depth":14,"bounds":{"left":0.49052528,"top":0.0,"width":0.014960106,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":12,"bounds":{"left":0.5113032,"top":0.0,"width":0.03025266,"height":0.026336791},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":14,"bounds":{"left":0.52244014,"top":0.0,"width":0.015957447,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":12,"bounds":{"left":0.54421544,"top":0.0,"width":0.022938829,"height":0.026336791},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":14,"bounds":{"left":0.55502,"top":0.0,"width":0.009142287,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Security and quality (1)","depth":12,"bounds":{"left":0.56981385,"top":0.0,"width":0.0674867,"height":0.026336791},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Security and quality","depth":14,"bounds":{"left":0.5816157,"top":0.0,"width":0.04255319,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":14,"bounds":{"left":0.62799203,"top":0.0,"width":0.0029920214,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":14,"bounds":{"left":0.63098407,"top":0.0,"width":0.0019946808,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":14,"bounds":{"left":0.63297874,"top":0.0,"width":0.0018284575,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Insights","depth":12,"bounds":{"left":0.6399601,"top":0.0,"width":0.031083776,"height":0.026336791},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Insights","depth":14,"bounds":{"left":0.65109706,"top":0.0,"width":0.016788565,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":12,"bounds":{"left":0.67370343,"top":0.0,"width":0.032081116,"height":0.026336791},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":14,"bounds":{"left":0.68484044,"top":0.0,"width":0.017785905,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Important update","depth":10,"bounds":{"left":0.40292552,"top":0.0,"width":0.0003324468,"height":0.016759777},"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Important update","depth":11,"bounds":{"left":0.40292552,"top":0.0,"width":0.039228722,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"On April 24 we'll start using GitHub Copilot interaction data for AI model training unless you opt out.","depth":10,"bounds":{"left":0.40292552,"top":0.0,"width":0.2159242,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Review this update","depth":10,"bounds":{"left":0.61884975,"top":0.0,"width":0.04055851,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Review this update","depth":11,"bounds":{"left":0.61884975,"top":0.0,"width":0.04055851,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and manage your preferences in your","depth":10,"bounds":{"left":0.6594083,"top":0.0,"width":0.08261303,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"GitHub account settings","depth":10,"bounds":{"left":0.74202126,"top":0.0,"width":0.05219415,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub account settings","depth":11,"bounds":{"left":0.74202126,"top":0.0,"width":0.05219415,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":10,"bounds":{"left":0.79421544,"top":0.0,"width":0.0013297872,"height":0.013567438},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Dismiss banner","depth":9,"bounds":{"left":0.9865359,"top":0.0,"width":0.010638298,"height":0.025538707},"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
288556430525607057
|
8166828297554591125
|
visual_change
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New chat
Gemini
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Gemini said
Gemini said
Here is a precise and concise summary of the code selection, which refactors
SelectionListTest
to accommodate a shift from fixed high/normal priority properties to a more dynamic, enum-driven priority group architecture.
Refactored Priority Handling
Refactored Priority Handling
Dynamic Priority Groups:
Replaces fixed high/normal array parameters with the
QueuePriorityEnum
(
HIGH
,
NORMAL
,
LOW
), allowing entity lists to be managed dynamically by group types.
Merged Registrations:
Validates that multiple
addEntityList()
calls targeting the same priority level properly merge their data instead of overwriting it.
Group Querying:
Tests new methods
getEntityListItemsByGroup()
and
getEntityListGroups()
to retrieve group-specific IDs or an array of active group names (e.g.,
['high', 'normal']
).
Updated State and Count Validations
Updated State and Count Validations
Instantiation:
Tests now instantiate
SelectionList
without initial constructor arguments, using setters and action methods instead.
Empty States:
Updates assertions (
isEmpty()
) to verify state based on whether any entities have been dynamically added, rather than checking pre-defined constructor arrays.
Stale Flags:
Changes from passing a
stale
boolean via the constructor to explicitly triggering a mutable
$selectionList->markStale()
method.
Chunk Capacity Behavior
Chunk Capacity Behavior
Flexible Chunk Sizes:
Introduces a
setChunkSize()
method, replacing the constructor-configured chunk boundary.
Capacity Assertions:
Retains and updates the logic for
isFullChunk()
, ensuring it accurately evaluates capacity when elements span multiple dynamic priority groups or when the chunk limit is altered mid-lifecycle.
Good response
Bad response
Share & export
Copy
Show more options
Copy prompt
You said Are there any issues or potential bolltenecks
You said
Are there any issues or potential bolltenecks
Listen
Show thinking
Gemini said
Gemini said
Based on the test diff you provided, we can infer a few potential issues and architectural bottlenecks in the underlying
SelectionList
implementation. While the tests are well-structured, the behavior they describe hints at a few areas you might want to keep an eye on, particularly for an Elasticsearch (ES) processor queue.
Here are the potential issues and bottlenecks to consider:
1. Array Merging Overhead (Performance)
1. Array Merging Overhead (Performance)
The
testAddEntityListMergesMultipleCallsForSamePriority
test shows that calling
addEntityList()
multiple times for the same priority group merges the arrays.
The Bottleneck:
If the underlying implementation uses
array_merge()
inside a loop to append these IDs, it creates a new array in memory every time it's called. If you are processing thousands of entities and appending them in small batches, this can lead to memory bloat and CPU degradation due to constant array reallocation.
Mitigation:
Ensure the implementation handles batch appends efficiently (e.g., using the spread operator
[...$existing, ...$new]
or appending via references) or groups the arrays before doing a single merge.
2. Lack of Uniqueness/Deduplication (Logic)
2. Lack of Uniqueness/Deduplication (Logic)
None of the tests explicitly verify what happens if duplicate IDs are added. For example, if you call
addEntityList(QueuePriorityEnum::HIGH, [1, 2])
and then
addEntityList(QueuePriorityEnum::HIGH, [2, 3])
.
The Issue:
Does the getter return
[1, 2, 2, 3]
or
[1, 2, 3]
? If duplicates are not filtered out, your ES processor might end up indexing the same entity multiple times in a single chunk, which wastes I/O and processor cycles.
Mitigation:
The underlying class should ideally enforce uniqueness (e.g., using
array_unique()
before resolving the chunk, or using ID keys as associative array keys to naturally prevent duplicates).
3. Memory Consumption with Large Chunks (Scalability)
3. Memory Consumption with Large Chunks (Scalability)
The tests introduce
setChunkSize()
. If this chunk size is configured to be very large (e.g., tens of thousands of IDs to bulk-send to Elasticsearch).
The Bottleneck:
Holding massive arrays of IDs in memory across different priority groups can quickly hit PHP memory limits, especially if this
SelectionList
object is kept alive during a long-running daemon or cron job.
Mitigation:
Monitor memory usage if
CHUNK_SIZE
grows, and ensure the
SelectionList
object is properly destroyed (or garbage collected) after the chunk is processed to free up memory.
4. Type Juggling
4. Type Juggling
In the original code, string IDs were used (
['p1', 'p2']
). In the refactored tests, integer IDs are used (
[1, 2]
).
The Issue:
If your system handles UUIDs (strings) vs. relational DB auto-increments (integers), make sure the underlying implementation uses strict comparisons (
===
) where necessary, especially if deduplicating arrays, to prevent PHP from juggling
'1'
and
1
improperly.
Would you like me to draft a quick test case to check how the class currently handles duplicate IDs, or is deduplication intentionally handled further down your pipeline?
Good response
Bad response
Share & export
Copy
Show more options
Copy prompt
Edit
You said what about non test files
You said
what about non test files
Enter a prompt for Gemini
encrypted
Enter a prompt for Gemini
encrypted
Open upload file menu
Tools
Open mode picker
Pro
Stop response
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Gemini is typing
Summarize page
Summarize page
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
All issues(g then i)
All pull requests
All repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code
Pull requests (31)
Pull requests
(
31
)
Agents
Agents
Actions
Actions
Wiki
Wiki
Security and quality (1)
Security and quality
(
1
)
Insights
Insights
Settings
Settings
Important update
Important update
On April 24 we'll start using GitHub Copilot interaction data for AI model training unless you opt out.
Review this update
Review this update
and manage your preferences in your
GitHub account settings
GitHub account settings
.
Dismiss banner...
|
55647
|
NULL
|
NULL
|
NULL
|
|
55649
|
1930
|
9
|
2026-05-19T06:34:48.285727+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-19/1779 /Users/lukas/.screenpipe/data/data/2026-05-19/1779172488285_m1.jpg...
|
Firefox
|
JY-20808 low priority indexing queue by Vasil-Jimi JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app — Work...
|
1
|
github.com/jiminny/app/pull/12082/changes
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New chat
Gemini
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Gemini said
Gemini said
Here is a precise and concise summary of the code selection, which refactors
SelectionListTest
to accommodate a shift from fixed high/normal priority properties to a more dynamic, enum-driven priority group architecture.
Refactored Priority Handling
Refactored Priority Handling
Dynamic Priority Groups:
Replaces fixed high/normal array parameters with the
QueuePriorityEnum
(
HIGH
,
NORMAL
,
LOW
), allowing entity lists to be managed dynamically by group types.
Merged Registrations:
Validates that multiple
addEntityList()
calls targeting the same priority level properly merge their data instead of overwriting it.
Group Querying:
Tests new methods
getEntityListItemsByGroup()
and
getEntityListGroups()
to retrieve group-specific IDs or an array of active group names (e.g.,
['high', 'normal']
).
Updated State and Count Validations
Updated State and Count Validations
Instantiation:
Tests now instantiate
SelectionList
without initial constructor arguments, using setters and action methods instead.
Empty States:
Updates assertions (
isEmpty()
) to verify state based on whether any entities have been dynamically added, rather than checking pre-defined constructor arrays.
Stale Flags:
Changes from passing a
stale
boolean via the constructor to explicitly triggering a mutable
$selectionList->markStale()
method.
Chunk Capacity Behavior
Chunk Capacity Behavior
Flexible Chunk Sizes:
Introduces a
setChunkSize()
method, replacing the constructor-configured chunk boundary.
Capacity Assertions:
Retains and updates the logic for
isFullChunk()
, ensuring it accurately evaluates capacity when elements span multiple dynamic priority groups or when the chunk limit is altered mid-lifecycle.
Good response
Bad response
Share & export
Copy
Show more options
Copy prompt
You said Are there any issues or potential bolltenecks
You said
Are there any issues or potential bolltenecks
Listen
Show thinking
Gemini said
Gemini said
Based on the test diff you provided, we can infer a few potential issues and architectural bottlenecks in the underlying
SelectionList
implementation. While the tests are well-structured, the behavior they describe hints at a few areas you might want to keep an eye on, particularly for an Elasticsearch (ES) processor queue.
Here are the potential issues and bottlenecks to consider:
1. Array Merging Overhead (Performance)
1. Array Merging Overhead (Performance)
The
testAddEntityListMergesMultipleCallsForSamePriority
test shows that calling
addEntityList()
multiple times for the same priority group merges the arrays.
The Bottleneck:
If the underlying implementation uses
array_merge()
inside a loop to append these IDs, it creates a new array in memory every time it's called. If you are processing thousands of entities and appending them in small batches, this can lead to memory bloat and CPU degradation due to constant array reallocation.
Mitigation:
Ensure the implementation handles batch appends efficiently (e.g., using the spread operator
[...$existing, ...$new]
or appending via references) or groups the arrays before doing a single merge.
2. Lack of Uniqueness/Deduplication (Logic)
2. Lack of Uniqueness/Deduplication (Logic)
None of the tests explicitly verify what happens if duplicate IDs are added. For example, if you call
addEntityList(QueuePriorityEnum::HIGH, [1, 2])
and then
addEntityList(QueuePriorityEnum::HIGH, [2, 3])
.
The Issue:
Does the getter return
[1, 2, 2, 3]
or
[1, 2, 3]
? If duplicates are not filtered out, your ES processor might end up indexing the same entity multiple times in a single chunk, which wastes I/O and processor cycles.
Mitigation:
The underlying class should ideally enforce uniqueness (e.g., using
array_unique()
before resolving the chunk, or using ID keys as associative array keys to naturally prevent duplicates).
3. Memory Consumption with Large Chunks (Scalability)
3. Memory Consumption with Large Chunks (Scalability)
The tests introduce
setChunkSize()
. If this chunk size is configured to be very large (e.g., tens of thousands of IDs to bulk-send to Elasticsearch).
The Bottleneck:
Holding massive arrays of IDs in memory across different priority groups can quickly hit PHP memory limits, especially if this
SelectionList
object is kept alive during a long-running daemon or cron job.
Mitigation:
Monitor memory usage if
CHUNK_SIZE
grows, and ensure the
SelectionList
object is properly destroyed (or garbage collected) after the chunk is processed to free up memory.
4. Type Juggling
4. Type Juggling
In the original code, string IDs were used (
['p1', 'p2']
). In the refactored tests, integer IDs are used (
[1, 2]
).
The Issue:
If your system handles UUIDs (strings) vs. relational DB auto-increments (integers), make sure the underlying implementation uses strict comparisons (
===
) where necessary, especially if deduplicating arrays, to prevent PHP from juggling
'1'
and
1
improperly.
Would you like me to draft a quick test case to check how the class currently handles duplicate IDs, or is deduplication intentionally handled further down your pipeline?
Good response
Bad response
Share & export
Copy
Show more options
Copy prompt
Edit
You said what about non test files
You said
what about non test files
Show thinking
Gemini said
Gemini said
Since we don't have the actual
SelectionList.php
file,
we have to reverse-engineer its implementation based on the test behaviors.
Moving from a constructor-based,
fixed-property model to a dynamic,
mutable model introduces several potential pitfalls in the implementation file itself.
Here are the specific bottlenecks and issues to watch out for in the
SelectionList.php
source code:
1. The count() Method Implementation (Performance Trap)
1. The
count()
Method Implementation (Performance Trap)
The Risk:
If
count()
is implemented by calling
$this->getAllIds()
and counting the resulting merged array (e.
g.,
return count($this->getAllIds());
),
it will be highly inefficient.
It would allocate a brand-new array in memory just to determine its length.
The Fix:
count()
should mathematically sum the sizes of the underlying group arrays without merging them:
return array_sum(array_map('count', $this->entityLists));
2. Loss of Immutability (State Management)
2. Loss of Immutability (State Management)
The Risk:
The original code passed all data via the constructor,
implying the DTO (Data Transfer Object) was immutable once created.
The refactored version introduces mutability (
addEntityList()
,
setChunkSize()
,
markStale()
).
DTOs are typically passed between architectural layers; if one layer modifies the chunk size or adds entities while another is processing it,
it can cause unpredictable side effects or race conditions in your queue processor.
The Fix:
Ensure that this object is not shared across asynchronous contexts,
or consider returning cloned instances when mutating state if strict immutability is required.
3. Enum Array Key Violations (PHP Quirks)
3. Enum Array Key Violations (PHP Quirks)
The Risk:
The tests show
QueuePriorityEnum::HIGH
being passed to methods.
If the underlying code attempts to use this Enum directly as an array key (e.
g.,
$this->lists[$priority] = $ids;
),
PHP will throw an error because objects (including Enums) cannot be used as standard array keys.
The Fix:
The implementation must map the Enum to its underlying scalar value (e.
g.,
$this->lists[$priority->value]
) or use PHP's
WeakMap
or
SplObjectStorage
,
though standard arrays using
$priority->value
are much faster for simple lists.
4. Uninitialized State Defaults (Logic Errors)
4. Uninitialized State Defaults (Logic Errors)
The Risk:
The tests instantiate
new SelectionList()
without arguments,
then later call
$selectionList->setChunkSize(100)...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"WORK, Google Account: lukas.kovalik@jiminny.com","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Main menu","depth":12,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New chat","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gemini","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Chat","depth":12,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open menu for conversation actions.","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Conversation with Gemini","depth":15,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":21,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;667use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;7use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;8+use Jiminny\\Component\\ES\\QueuePriorityEnum;8use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\TestCase;10use PHPUnit\\Framework\\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;667use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;7use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;8+use Jiminny\\Component\\ES\\QueuePriorityEnum;8use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\TestCase;10use PHPUnit\\Framework\\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected.","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Listen","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is a precise and concise summary of the code selection, which refactors","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionListTest","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to accommodate a shift from fixed high/normal priority properties to a more dynamic, enum-driven priority group architecture.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Refactored Priority Handling","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Refactored Priority Handling","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dynamic Priority Groups:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Replaces fixed high/normal array parameters with the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QueuePriorityEnum","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HIGH","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NORMAL","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"LOW","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"), allowing entity lists to be managed dynamically by group types.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Merged Registrations:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Validates that multiple","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"calls targeting the same priority level properly merge their data instead of overwriting it.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Group Querying:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tests new methods","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getEntityListItemsByGroup()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getEntityListGroups()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to retrieve group-specific IDs or an array of active group names (e.g.,","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"['high', 'normal']","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Updated State and Count Validations","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Updated State and Count Validations","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Instantiation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tests now instantiate","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"without initial constructor arguments, using setters and action methods instead.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Empty States:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Updates assertions (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"isEmpty()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") to verify state based on whether any entities have been dynamically added, rather than checking pre-defined constructor arrays.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Stale Flags:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Changes from passing a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"stale","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"boolean via the constructor to explicitly triggering a mutable","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$selectionList->markStale()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Chunk Capacity Behavior","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Chunk Capacity Behavior","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Flexible Chunk Sizes:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Introduces a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"setChunkSize()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method, replacing the constructor-configured chunk boundary.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Capacity Assertions:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Retains and updates the logic for","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"isFullChunk()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", ensuring it accurately evaluates capacity when elements span multiple dynamic priority groups or when the chunk limit is altered mid-lifecycle.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":22,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":22,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":21,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":22,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy prompt","depth":21,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said Are there any issues or potential bolltenecks","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Are there any issues or potential bolltenecks","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Listen","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Show thinking","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Based on the test diff you provided, we can infer a few potential issues and architectural bottlenecks in the underlying","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"implementation. While the tests are well-structured, the behavior they describe hints at a few areas you might want to keep an eye on, particularly for an Elasticsearch (ES) processor queue.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here are the potential issues and bottlenecks to consider:","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"1. Array Merging Overhead (Performance)","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1. Array Merging Overhead (Performance)","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"testAddEntityListMergesMultipleCallsForSamePriority","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test shows that calling","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList()","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"multiple times for the same priority group merges the arrays.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Bottleneck:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If the underlying implementation uses","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"array_merge()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"inside a loop to append these IDs, it creates a new array in memory every time it's called. If you are processing thousands of entities and appending them in small batches, this can lead to memory bloat and CPU degradation due to constant array reallocation.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mitigation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ensure the implementation handles batch appends efficiently (e.g., using the spread operator","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[...$existing, ...$new]","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or appending via references) or groups the arrays before doing a single merge.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"2. Lack of Uniqueness/Deduplication (Logic)","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2. Lack of Uniqueness/Deduplication (Logic)","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"None of the tests explicitly verify what happens if duplicate IDs are added. For example, if you call","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList(QueuePriorityEnum::HIGH, [1, 2])","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and then","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList(QueuePriorityEnum::HIGH, [2, 3])","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Issue:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Does the getter return","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[1, 2, 2, 3]","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[1, 2, 3]","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"? If duplicates are not filtered out, your ES processor might end up indexing the same entity multiple times in a single chunk, which wastes I/O and processor cycles.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mitigation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The underlying class should ideally enforce uniqueness (e.g., using","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"array_unique()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"before resolving the chunk, or using ID keys as associative array keys to naturally prevent duplicates).","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"3. Memory Consumption with Large Chunks (Scalability)","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3. Memory Consumption with Large Chunks (Scalability)","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The tests introduce","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"setChunkSize()","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":". If this chunk size is configured to be very large (e.g., tens of thousands of IDs to bulk-send to Elasticsearch).","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Bottleneck:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Holding massive arrays of IDs in memory across different priority groups can quickly hit PHP memory limits, especially if this","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"object is kept alive during a long-running daemon or cron job.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mitigation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Monitor memory usage if","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CHUNK_SIZE","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"grows, and ensure the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"object is properly destroyed (or garbage collected) after the chunk is processed to free up memory.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"4. Type Juggling","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4. Type Juggling","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"In the original code, string IDs were used (","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"['p1', 'p2']","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"). In the refactored tests, integer IDs are used (","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[1, 2]","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Issue:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If your system handles UUIDs (strings) vs. relational DB auto-increments (integers), make sure the underlying implementation uses strict comparisons (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"===","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") where necessary, especially if deduplicating arrays, to prevent PHP from juggling","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"'1'","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"improperly.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Would you like me to draft a quick test case to check how the class currently handles duplicate IDs, or is deduplication intentionally handled further down your pipeline?","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":22,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":22,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":21,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":22,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":21,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy prompt","depth":21,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit","depth":21,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said what about non test files","depth":21,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"what about non test files","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Show thinking","depth":25,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Since we don't have the actual","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList.php","depth":25,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"file,","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"we have to reverse-engineer its implementation based on the test behaviors.","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Moving from a constructor-based,","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"fixed-property model to a dynamic,","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"mutable model introduces several potential pitfalls in the implementation file itself.","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here are the specific bottlenecks and issues to watch out for in the","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList.php","depth":25,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"source code:","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"1. The count() Method Implementation (Performance Trap)","depth":23,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1. The","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"count()","depth":25,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Method Implementation (Performance Trap)","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Risk:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"count()","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"is implemented by calling","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$this->getAllIds()","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and counting the resulting merged array (e.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"g.,","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"return count($this->getAllIds());","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"),","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"it will be highly inefficient.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"It would allocate a brand-new array in memory just to determine its length.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Fix:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"count()","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"should mathematically sum the sizes of the underlying group arrays without merging them:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"return array_sum(array_map('count', $this->entityLists));","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"2. Loss of Immutability (State Management)","depth":23,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2. Loss of Immutability (State Management)","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Risk:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The original code passed all data via the constructor,","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"implying the DTO (Data Transfer Object) was immutable once created.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The refactored version introduces mutability (","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList()","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"setChunkSize()","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"markStale()","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DTOs are typically passed between architectural layers; if one layer modifies the chunk size or adds entities while another is processing it,","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"it can cause unpredictable side effects or race conditions in your queue processor.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Fix:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ensure that this object is not shared across asynchronous contexts,","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or consider returning cloned instances when mutating state if strict immutability is required.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"3. Enum Array Key Violations (PHP Quirks)","depth":23,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3. Enum Array Key Violations (PHP Quirks)","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Risk:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The tests show","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QueuePriorityEnum::HIGH","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"being passed to methods.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If the underlying code attempts to use this Enum directly as an array key (e.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"g.,","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$this->lists[$priority] = $ids;","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"),","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"PHP will throw an error because objects (including Enums) cannot be used as standard array keys.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Fix:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The implementation must map the Enum to its underlying scalar value (e.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"g.,","depth":26,"bounds":{"left":0.109375,"top":0.0,"width":0.012152778,"height":0.022777777},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$this->lists[$priority->value]","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") or use PHP's","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WeakMap","depth":27,"bounds":{"left":0.0,"top":0.0,"width":0.04097222,"height":0.020555556},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or","depth":26,"bounds":{"left":0.0,"top":0.0,"width":0.016319444,"height":0.022777777},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SplObjectStorage","depth":27,"bounds":{"left":0.0,"top":0.0,"width":0.093055554,"height":0.020555556},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"bounds":{"left":0.08298611,"top":0.0,"width":0.003125,"height":0.022777777},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"though standard arrays using","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$priority->value","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"are much faster for simple lists.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"4. Uninitialized State Defaults (Logic Errors)","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4. Uninitialized State Defaults (Logic Errors)","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Risk:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The tests instantiate","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"new SelectionList()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"without arguments,","depth":26,"bounds":{"left":0.0,"top":0.107777774,"width":0.10034722,"height":0.022777777},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"then later call","depth":26,"bounds":{"left":0.07534722,"top":0.107777774,"width":0.07430556,"height":0.022777777},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$selectionList->setChunkSize(100)","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
2052373053145029875
|
8166828297688805397
|
idle
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New chat
Gemini
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Gemini said
Gemini said
Here is a precise and concise summary of the code selection, which refactors
SelectionListTest
to accommodate a shift from fixed high/normal priority properties to a more dynamic, enum-driven priority group architecture.
Refactored Priority Handling
Refactored Priority Handling
Dynamic Priority Groups:
Replaces fixed high/normal array parameters with the
QueuePriorityEnum
(
HIGH
,
NORMAL
,
LOW
), allowing entity lists to be managed dynamically by group types.
Merged Registrations:
Validates that multiple
addEntityList()
calls targeting the same priority level properly merge their data instead of overwriting it.
Group Querying:
Tests new methods
getEntityListItemsByGroup()
and
getEntityListGroups()
to retrieve group-specific IDs or an array of active group names (e.g.,
['high', 'normal']
).
Updated State and Count Validations
Updated State and Count Validations
Instantiation:
Tests now instantiate
SelectionList
without initial constructor arguments, using setters and action methods instead.
Empty States:
Updates assertions (
isEmpty()
) to verify state based on whether any entities have been dynamically added, rather than checking pre-defined constructor arrays.
Stale Flags:
Changes from passing a
stale
boolean via the constructor to explicitly triggering a mutable
$selectionList->markStale()
method.
Chunk Capacity Behavior
Chunk Capacity Behavior
Flexible Chunk Sizes:
Introduces a
setChunkSize()
method, replacing the constructor-configured chunk boundary.
Capacity Assertions:
Retains and updates the logic for
isFullChunk()
, ensuring it accurately evaluates capacity when elements span multiple dynamic priority groups or when the chunk limit is altered mid-lifecycle.
Good response
Bad response
Share & export
Copy
Show more options
Copy prompt
You said Are there any issues or potential bolltenecks
You said
Are there any issues or potential bolltenecks
Listen
Show thinking
Gemini said
Gemini said
Based on the test diff you provided, we can infer a few potential issues and architectural bottlenecks in the underlying
SelectionList
implementation. While the tests are well-structured, the behavior they describe hints at a few areas you might want to keep an eye on, particularly for an Elasticsearch (ES) processor queue.
Here are the potential issues and bottlenecks to consider:
1. Array Merging Overhead (Performance)
1. Array Merging Overhead (Performance)
The
testAddEntityListMergesMultipleCallsForSamePriority
test shows that calling
addEntityList()
multiple times for the same priority group merges the arrays.
The Bottleneck:
If the underlying implementation uses
array_merge()
inside a loop to append these IDs, it creates a new array in memory every time it's called. If you are processing thousands of entities and appending them in small batches, this can lead to memory bloat and CPU degradation due to constant array reallocation.
Mitigation:
Ensure the implementation handles batch appends efficiently (e.g., using the spread operator
[...$existing, ...$new]
or appending via references) or groups the arrays before doing a single merge.
2. Lack of Uniqueness/Deduplication (Logic)
2. Lack of Uniqueness/Deduplication (Logic)
None of the tests explicitly verify what happens if duplicate IDs are added. For example, if you call
addEntityList(QueuePriorityEnum::HIGH, [1, 2])
and then
addEntityList(QueuePriorityEnum::HIGH, [2, 3])
.
The Issue:
Does the getter return
[1, 2, 2, 3]
or
[1, 2, 3]
? If duplicates are not filtered out, your ES processor might end up indexing the same entity multiple times in a single chunk, which wastes I/O and processor cycles.
Mitigation:
The underlying class should ideally enforce uniqueness (e.g., using
array_unique()
before resolving the chunk, or using ID keys as associative array keys to naturally prevent duplicates).
3. Memory Consumption with Large Chunks (Scalability)
3. Memory Consumption with Large Chunks (Scalability)
The tests introduce
setChunkSize()
. If this chunk size is configured to be very large (e.g., tens of thousands of IDs to bulk-send to Elasticsearch).
The Bottleneck:
Holding massive arrays of IDs in memory across different priority groups can quickly hit PHP memory limits, especially if this
SelectionList
object is kept alive during a long-running daemon or cron job.
Mitigation:
Monitor memory usage if
CHUNK_SIZE
grows, and ensure the
SelectionList
object is properly destroyed (or garbage collected) after the chunk is processed to free up memory.
4. Type Juggling
4. Type Juggling
In the original code, string IDs were used (
['p1', 'p2']
). In the refactored tests, integer IDs are used (
[1, 2]
).
The Issue:
If your system handles UUIDs (strings) vs. relational DB auto-increments (integers), make sure the underlying implementation uses strict comparisons (
===
) where necessary, especially if deduplicating arrays, to prevent PHP from juggling
'1'
and
1
improperly.
Would you like me to draft a quick test case to check how the class currently handles duplicate IDs, or is deduplication intentionally handled further down your pipeline?
Good response
Bad response
Share & export
Copy
Show more options
Copy prompt
Edit
You said what about non test files
You said
what about non test files
Show thinking
Gemini said
Gemini said
Since we don't have the actual
SelectionList.php
file,
we have to reverse-engineer its implementation based on the test behaviors.
Moving from a constructor-based,
fixed-property model to a dynamic,
mutable model introduces several potential pitfalls in the implementation file itself.
Here are the specific bottlenecks and issues to watch out for in the
SelectionList.php
source code:
1. The count() Method Implementation (Performance Trap)
1. The
count()
Method Implementation (Performance Trap)
The Risk:
If
count()
is implemented by calling
$this->getAllIds()
and counting the resulting merged array (e.
g.,
return count($this->getAllIds());
),
it will be highly inefficient.
It would allocate a brand-new array in memory just to determine its length.
The Fix:
count()
should mathematically sum the sizes of the underlying group arrays without merging them:
return array_sum(array_map('count', $this->entityLists));
2. Loss of Immutability (State Management)
2. Loss of Immutability (State Management)
The Risk:
The original code passed all data via the constructor,
implying the DTO (Data Transfer Object) was immutable once created.
The refactored version introduces mutability (
addEntityList()
,
setChunkSize()
,
markStale()
).
DTOs are typically passed between architectural layers; if one layer modifies the chunk size or adds entities while another is processing it,
it can cause unpredictable side effects or race conditions in your queue processor.
The Fix:
Ensure that this object is not shared across asynchronous contexts,
or consider returning cloned instances when mutating state if strict immutability is required.
3. Enum Array Key Violations (PHP Quirks)
3. Enum Array Key Violations (PHP Quirks)
The Risk:
The tests show
QueuePriorityEnum::HIGH
being passed to methods.
If the underlying code attempts to use this Enum directly as an array key (e.
g.,
$this->lists[$priority] = $ids;
),
PHP will throw an error because objects (including Enums) cannot be used as standard array keys.
The Fix:
The implementation must map the Enum to its underlying scalar value (e.
g.,
$this->lists[$priority->value]
) or use PHP's
WeakMap
or
SplObjectStorage
,
though standard arrays using
$priority->value
are much faster for simple lists.
4. Uninitialized State Defaults (Logic Errors)
4. Uninitialized State Defaults (Logic Errors)
The Risk:
The tests instantiate
new SelectionList()
without arguments,
then later call
$selectionList->setChunkSize(100)...
|
55646
|
NULL
|
NULL
|
NULL
|
|
55650
|
1931
|
15
|
2026-05-19T06:34:58.816642+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-19/1779 /Users/lukas/.screenpipe/data/data/2026-05-19/1779172498816_m2.jpg...
|
Firefox
|
JY-20808 low priority indexing queue by Vasil-Jimi JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app — Work...
|
1
|
github.com/jiminny/app/pull/12082/changes#diff-49a github.com/jiminny/app/pull/12082/changes#diff-49a79d99c97caf7fc27ecb1dbacab5a29d871822caa0db0c71e94957c28c87af...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New chat
Gemini
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Gemini said
Gemini said
Here is a precise and concise summary of the code selection, which refactors
SelectionListTest
to accommodate a shift from fixed high/normal priority properties to a more dynamic, enum-driven priority group architecture.
Refactored Priority Handling
Refactored Priority Handling
Dynamic Priority Groups:
Replaces fixed high/normal array parameters with the
QueuePriorityEnum
(
HIGH
,
NORMAL
,
LOW
), allowing entity lists to be managed dynamically by group types.
Merged Registrations:
Validates that multiple
addEntityList()
calls targeting the same priority level properly merge their data instead of overwriting it.
Group Querying:
Tests new methods
getEntityListItemsByGroup()
and
getEntityListGroups()
to retrieve group-specific IDs or an array of active group names (e.g.,
['high', 'normal']
).
Updated State and Count Validations
Updated State and Count Validations
Instantiation:
Tests now instantiate
SelectionList
without initial constructor arguments, using setters and action methods instead.
Empty States:
Updates assertions (
isEmpty()
) to verify state based on whether any entities have been dynamically added, rather than checking pre-defined constructor arrays.
Stale Flags:
Changes from passing a
stale
boolean via the constructor to explicitly triggering a mutable
$selectionList->markStale()
method.
Chunk Capacity Behavior
Chunk Capacity Behavior
Flexible Chunk Sizes:
Introduces a
setChunkSize()
method, replacing the constructor-configured chunk boundary.
Capacity Assertions:
Retains and updates the logic for
isFullChunk()
, ensuring it accurately evaluates capacity when elements span multiple dynamic priority groups or when the chunk limit is altered mid-lifecycle.
Good response
Bad response
Share & export
Copy
Show more options
Copy prompt
You said Are there any issues or potential bolltenecks
You said
Are there any issues or potential bolltenecks
Listen
Show thinking
Gemini said
Gemini said
Based on the test diff you provided, we can infer a few potential issues and architectural bottlenecks in the underlying
SelectionList
implementation. While the tests are well-structured, the behavior they describe hints at a few areas you might want to keep an eye on, particularly for an Elasticsearch (ES) processor queue.
Here are the potential issues and bottlenecks to consider:
1. Array Merging Overhead (Performance)
1. Array Merging Overhead (Performance)
The
testAddEntityListMergesMultipleCallsForSamePriority
test shows that calling
addEntityList()
multiple times for the same priority group merges the arrays.
The Bottleneck:
If the underlying implementation uses
array_merge()
inside a loop to append these IDs, it creates a new array in memory every time it's called. If you are processing thousands of entities and appending them in small batches, this can lead to memory bloat and CPU degradation due to constant array reallocation.
Mitigation:
Ensure the implementation handles batch appends efficiently (e.g., using the spread operator
[...$existing, ...$new]
or appending via references) or groups the arrays before doing a single merge.
2. Lack of Uniqueness/Deduplication (Logic)
2. Lack of Uniqueness/Deduplication (Logic)
None of the tests explicitly verify what happens if duplicate IDs are added. For example, if you call
addEntityList(QueuePriorityEnum::HIGH, [1, 2])
and then
addEntityList(QueuePriorityEnum::HIGH, [2, 3])
.
The Issue:
Does the getter return
[1, 2, 2, 3]
or
[1, 2, 3]
? If duplicates are not filtered out, your ES processor might end up indexing the same entity multiple times in a single chunk, which wastes I/O and processor cycles.
Mitigation:
The underlying class should ideally enforce uniqueness (e.g., using
array_unique()
before resolving the chunk, or using ID keys as associative array keys to naturally prevent duplicates).
3. Memory Consumption with Large Chunks (Scalability)
3. Memory Consumption with Large Chunks (Scalability)
The tests introduce
setChunkSize()
. If this chunk size is configured to be very large (e.g., tens of thousands of IDs to bulk-send to Elasticsearch).
The Bottleneck:
Holding massive arrays of IDs in memory across different priority groups can quickly hit PHP memory limits, especially if this
SelectionList
object is kept alive during a long-running daemon or cron job.
Mitigation:
Monitor memory usage if
CHUNK_SIZE
grows, and ensure the
SelectionList
object is properly destroyed (or garbage collected) after the chunk is processed to free up memory.
4. Type Juggling
4. Type Juggling
In the original code, string IDs were used (
['p1', 'p2']
). In the refactored tests, integer IDs are used (
[1, 2]
).
The Issue:
If your system handles UUIDs (strings) vs. relational DB auto-increments (integers), make sure the underlying implementation uses strict comparisons (
===
) where necessary, especially if deduplicating arrays, to prevent PHP from juggling
'1'
and
1
improperly.
Would you like me to draft a quick test case to check how the class currently handles duplicate IDs, or is deduplication intentionally handled further down your pipeline?
Good response
Bad response
Share & export
Copy
Show more options
Copy prompt
Edit
You said what about non test files
You said
what about non test files
Listen
Show thinking
Gemini said
Gemini said
Since we don't have the actual
SelectionList.php
file, we have to reverse-engineer its implementation based on the test behaviors. Moving from a constructor-based, fixed-property model to a dynamic, mutable model introduces several potential pitfalls in the implementation file itself.
Here are the specific bottlenecks and issues to watch out for in the
SelectionList.php
source code:
1. The count() Method Implementation (Performance Trap)
1. The
count()
Method Implementation (Performance Trap)
The Risk:
If
count()
is implemented by calling
$this->getAllIds()
and counting the resulting merged array (e.g.,
return count($this->getAllIds());
), it will be highly inefficient. It would allocate a brand-new array in memory just to determine its length.
The Fix:
count()
should mathematically sum the sizes of the underlying group arrays without merging them:
return array_sum(array_map('count', $this->entityLists));
2. Loss of Immutability (State Management)
2. Loss of Immutability (State Management)
The Risk:
The original code passed all data via the constructor, implying the DTO (Data Transfer Object) was immutable once created. The refactored version introduces mutability (
addEntityList()
,
setChunkSize()
,
markStale()
). DTOs are typically passed between architectural layers; if one layer modifies the chunk size or adds entities while another is processing it, it can cause unpredictable side effects or race conditions in your queue processor.
The Fix:...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.10106383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.18816489,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.15674867,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.1245012,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.15163608,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":7,"bounds":{"left":0.35854387,"top":0.055067837,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":7,"bounds":{"left":0.37051198,"top":0.055067837,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"WORK, Google Account: lukas.kovalik@jiminny.com","depth":12,"bounds":{"left":0.3678524,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Main menu","depth":12,"bounds":{"left":0.08494016,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New chat","depth":12,"bounds":{"left":0.09823803,"top":0.10454908,"width":0.028590426,"height":0.030327214},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gemini","depth":15,"bounds":{"left":0.1008976,"top":0.10973663,"width":0.021941489,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Chat","depth":12,"bounds":{"left":0.33992687,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open menu for conversation actions.","depth":12,"bounds":{"left":0.35322472,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Conversation with Gemini","depth":15,"bounds":{"left":0.079288565,"top":0.14764565,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":16,"bounds":{"left":0.079288565,"top":0.15003991,"width":0.1200133,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":21,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;667use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;7use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;8+use Jiminny\\Component\\ES\\QueuePriorityEnum;8use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\TestCase;10use PHPUnit\\Framework\\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;667use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;7use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;8+use Jiminny\\Component\\ES\\QueuePriorityEnum;8use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\TestCase;10use PHPUnit\\Framework\\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected.","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Listen","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is a precise and concise summary of the code selection, which refactors","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionListTest","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to accommodate a shift from fixed high/normal priority properties to a more dynamic, enum-driven priority group architecture.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Refactored Priority Handling","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Refactored Priority Handling","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dynamic Priority Groups:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Replaces fixed high/normal array parameters with the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QueuePriorityEnum","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HIGH","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NORMAL","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"LOW","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"), allowing entity lists to be managed dynamically by group types.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Merged Registrations:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Validates that multiple","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"calls targeting the same priority level properly merge their data instead of overwriting it.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Group Querying:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tests new methods","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getEntityListItemsByGroup()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getEntityListGroups()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to retrieve group-specific IDs or an array of active group names (e.g.,","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"['high', 'normal']","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Updated State and Count Validations","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Updated State and Count Validations","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Instantiation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tests now instantiate","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"without initial constructor arguments, using setters and action methods instead.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Empty States:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Updates assertions (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"isEmpty()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") to verify state based on whether any entities have been dynamically added, rather than checking pre-defined constructor arrays.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Stale Flags:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Changes from passing a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"stale","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"boolean via the constructor to explicitly triggering a mutable","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$selectionList->markStale()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Chunk Capacity Behavior","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Chunk Capacity Behavior","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Flexible Chunk Sizes:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Introduces a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"setChunkSize()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method, replacing the constructor-configured chunk boundary.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Capacity Assertions:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Retains and updates the logic for","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"isFullChunk()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", ensuring it accurately evaluates capacity when elements span multiple dynamic priority groups or when the chunk limit is altered mid-lifecycle.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":22,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":22,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":21,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":22,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy prompt","depth":21,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said Are there any issues or potential bolltenecks","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Are there any issues or potential bolltenecks","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Listen","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Show thinking","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Based on the test diff you provided, we can infer a few potential issues and architectural bottlenecks in the underlying","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"implementation. While the tests are well-structured, the behavior they describe hints at a few areas you might want to keep an eye on, particularly for an Elasticsearch (ES) processor queue.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here are the potential issues and bottlenecks to consider:","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"1. Array Merging Overhead (Performance)","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1. Array Merging Overhead (Performance)","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"testAddEntityListMergesMultipleCallsForSamePriority","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test shows that calling","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList()","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"multiple times for the same priority group merges the arrays.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Bottleneck:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If the underlying implementation uses","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"array_merge()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"inside a loop to append these IDs, it creates a new array in memory every time it's called. If you are processing thousands of entities and appending them in small batches, this can lead to memory bloat and CPU degradation due to constant array reallocation.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mitigation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ensure the implementation handles batch appends efficiently (e.g., using the spread operator","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[...$existing, ...$new]","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or appending via references) or groups the arrays before doing a single merge.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"2. Lack of Uniqueness/Deduplication (Logic)","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2. Lack of Uniqueness/Deduplication (Logic)","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"None of the tests explicitly verify what happens if duplicate IDs are added. For example, if you call","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList(QueuePriorityEnum::HIGH, [1, 2])","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and then","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList(QueuePriorityEnum::HIGH, [2, 3])","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Issue:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Does the getter return","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[1, 2, 2, 3]","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[1, 2, 3]","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"? If duplicates are not filtered out, your ES processor might end up indexing the same entity multiple times in a single chunk, which wastes I/O and processor cycles.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mitigation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The underlying class should ideally enforce uniqueness (e.g., using","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"array_unique()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"before resolving the chunk, or using ID keys as associative array keys to naturally prevent duplicates).","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"3. Memory Consumption with Large Chunks (Scalability)","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3. Memory Consumption with Large Chunks (Scalability)","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The tests introduce","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"setChunkSize()","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":". If this chunk size is configured to be very large (e.g., tens of thousands of IDs to bulk-send to Elasticsearch).","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Bottleneck:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Holding massive arrays of IDs in memory across different priority groups can quickly hit PHP memory limits, especially if this","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"object is kept alive during a long-running daemon or cron job.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mitigation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Monitor memory usage if","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CHUNK_SIZE","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"grows, and ensure the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"object is properly destroyed (or garbage collected) after the chunk is processed to free up memory.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"4. Type Juggling","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4. Type Juggling","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"In the original code, string IDs were used (","depth":24,"bounds":{"left":0.11336436,"top":0.0,"width":0.10139628,"height":0.016360734},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"['p1', 'p2']","depth":25,"bounds":{"left":0.21675532,"top":0.0,"width":0.03357713,"height":0.014764565},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"). In the refactored tests, integer IDs are used (","depth":24,"bounds":{"left":0.11336436,"top":0.0,"width":0.2365359,"height":0.038707104},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[1, 2]","depth":25,"bounds":{"left":0.13048537,"top":0.0,"width":0.01662234,"height":0.014764565},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":24,"bounds":{"left":0.14910239,"top":0.0,"width":0.0033244682,"height":0.016360734},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Issue:","depth":26,"bounds":{"left":0.12599733,"top":0.0,"width":0.02642952,"height":0.016360734},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If your system handles UUIDs (strings) vs. relational DB auto-increments (integers), make sure the underlying implementation uses strict comparisons (","depth":26,"bounds":{"left":0.12599733,"top":0.0,"width":0.22855718,"height":0.038707104},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"===","depth":27,"bounds":{"left":0.2897274,"top":0.002793296,"width":0.00831117,"height":0.014764565},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") where necessary, especially if deduplicating arrays, to prevent PHP from juggling","depth":26,"bounds":{"left":0.12599733,"top":0.0015961692,"width":0.2209109,"height":0.038707104},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"'1'","depth":27,"bounds":{"left":0.2805851,"top":0.025139665,"width":0.00831117,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":26,"bounds":{"left":0.29089096,"top":0.023942538,"width":0.011968086,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":27,"bounds":{"left":0.30485374,"top":0.025139665,"width":0.0026595744,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"improperly.","depth":26,"bounds":{"left":0.30950797,"top":0.023942538,"width":0.028424202,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Would you like me to draft a quick test case to check how the class currently handles duplicate IDs, or is deduplication intentionally handled further down your pipeline?","depth":24,"bounds":{"left":0.11336436,"top":0.06624102,"width":0.24534574,"height":0.038707104},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":22,"bounds":{"left":0.1100399,"top":0.12290503,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":22,"bounds":{"left":0.120678194,"top":0.12290503,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":21,"bounds":{"left":0.13131648,"top":0.12290503,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":22,"bounds":{"left":0.1419548,"top":0.12290503,"width":0.010638298,"height":0.025538707},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":21,"bounds":{"left":0.15259309,"top":0.12290503,"width":0.010638298,"height":0.025538707},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy prompt","depth":21,"bounds":{"left":0.26180187,"top":0.1867518,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit","depth":21,"bounds":{"left":0.27642953,"top":0.1867518,"width":0.013297873,"height":0.031923383},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said what about non test files","depth":21,"bounds":{"left":0.29637632,"top":0.19313647,"width":0.059674203,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"bounds":{"left":0.079288565,"top":0.19393456,"width":0.019946808,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"what about non test files","depth":23,"bounds":{"left":0.29637632,"top":0.19473264,"width":0.059674203,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Listen","depth":22,"bounds":{"left":0.3480718,"top":0.2442139,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Show thinking","depth":25,"bounds":{"left":0.12666224,"top":0.24660814,"width":0.030917553,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Gemini said","depth":20,"bounds":{"left":0.1243351,"top":0.28810853,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"bounds":{"left":0.1243351,"top":0.29010376,"width":0.04105718,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Since we don't have the actual","depth":24,"bounds":{"left":0.11336436,"top":0.29209897,"width":0.07513298,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList.php","depth":25,"bounds":{"left":0.19049202,"top":0.2932961,"width":0.047539894,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"file, we have to reverse-engineer its implementation based on the test behaviors. Moving from a constructor-based, fixed-property model to a dynamic, mutable model introduces several potential pitfalls in the implementation file itself.","depth":24,"bounds":{"left":0.11336436,"top":0.29209897,"width":0.24534574,"height":0.061053474},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here are the specific bottlenecks and issues to watch out for in the","depth":24,"bounds":{"left":0.11336436,"top":0.367917,"width":0.16306517,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList.php","depth":25,"bounds":{"left":0.2784242,"top":0.36911413,"width":0.04737367,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"source code:","depth":24,"bounds":{"left":0.11336436,"top":0.367917,"width":0.23371011,"height":0.038707104},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"1. The count() Method Implementation (Performance Trap)","depth":23,"bounds":{"left":0.11336436,"top":0.43176377,"width":0.24534574,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1. The","depth":24,"bounds":{"left":0.11336436,"top":0.43335995,"width":0.016289894,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"count()","depth":25,"bounds":{"left":0.13164894,"top":0.43335995,"width":0.022273935,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Method Implementation (Performance Trap)","depth":24,"bounds":{"left":0.15591756,"top":0.43335995,"width":0.115192816,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Risk:","depth":26,"bounds":{"left":0.12599733,"top":0.46049482,"width":0.023603724,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If","depth":26,"bounds":{"left":0.14960106,"top":0.46049482,"width":0.005984043,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"count()","depth":27,"bounds":{"left":0.1575798,"top":0.46169195,"width":0.019614361,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"is implemented by calling","depth":26,"bounds":{"left":0.17918883,"top":0.46049482,"width":0.06333112,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$this->getAllIds()","depth":27,"bounds":{"left":0.24451463,"top":0.46169195,"width":0.05036569,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and counting the resulting merged array (e.g.,","depth":26,"bounds":{"left":0.12599733,"top":0.46049482,"width":0.21459441,"height":0.038707104},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"return count($this->getAllIds());","depth":27,"bounds":{"left":0.19780585,"top":0.4840383,"width":0.09208777,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"), it will be highly inefficient. It would allocate a brand-new array in memory just to determine its length.","depth":26,"bounds":{"left":0.12599733,"top":0.4828412,"width":0.23271276,"height":0.038707104},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Fix:","depth":26,"bounds":{"left":0.12599733,"top":0.5363129,"width":0.020279255,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"count()","depth":27,"bounds":{"left":0.14960106,"top":0.53751,"width":0.019614361,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"should mathematically sum the sizes of the underlying group arrays without merging them:","depth":26,"bounds":{"left":0.12599733,"top":0.5363129,"width":0.23055187,"height":0.038707104},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"return array_sum(array_map('count', $this->entityLists));","depth":27,"bounds":{"left":0.12799202,"top":0.58220273,"width":0.15924202,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"2. Loss of Immutability (State Management)","depth":23,"bounds":{"left":0.11336436,"top":0.62250596,"width":0.24534574,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2. Loss of Immutability (State Management)","depth":24,"bounds":{"left":0.11336436,"top":0.6241022,"width":0.11336436,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Risk:","depth":26,"bounds":{"left":0.12599733,"top":0.651237,"width":0.023603724,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The original code passed all data via the constructor, implying the DTO (Data Transfer Object) was immutable once created. The refactored version introduces mutability (","depth":26,"bounds":{"left":0.12599733,"top":0.651237,"width":0.2322141,"height":0.061053474},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList()","depth":27,"bounds":{"left":0.12982048,"top":0.6971269,"width":0.041888297,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"bounds":{"left":0.17370346,"top":0.69592977,"width":0.0028257978,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"setChunkSize()","depth":27,"bounds":{"left":0.17852394,"top":0.6971269,"width":0.0390625,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"bounds":{"left":0.21958111,"top":0.69592977,"width":0.0026595744,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"markStale()","depth":27,"bounds":{"left":0.22423537,"top":0.6971269,"width":0.030751329,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"). DTOs are typically passed between architectural layers; if one layer modifies the chunk size or adds entities while another is processing it, it can cause unpredictable side effects or race conditions in your queue processor.","depth":26,"bounds":{"left":0.12599733,"top":0.69592977,"width":0.22190824,"height":0.08339984},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Fix:","depth":26,"bounds":{"left":0.12599733,"top":0.79409415,"width":0.020279255,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
4118993213845954287
|
8165702397781962901
|
visual_change
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New chat
Gemini
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Gemini said
Gemini said
Here is a precise and concise summary of the code selection, which refactors
SelectionListTest
to accommodate a shift from fixed high/normal priority properties to a more dynamic, enum-driven priority group architecture.
Refactored Priority Handling
Refactored Priority Handling
Dynamic Priority Groups:
Replaces fixed high/normal array parameters with the
QueuePriorityEnum
(
HIGH
,
NORMAL
,
LOW
), allowing entity lists to be managed dynamically by group types.
Merged Registrations:
Validates that multiple
addEntityList()
calls targeting the same priority level properly merge their data instead of overwriting it.
Group Querying:
Tests new methods
getEntityListItemsByGroup()
and
getEntityListGroups()
to retrieve group-specific IDs or an array of active group names (e.g.,
['high', 'normal']
).
Updated State and Count Validations
Updated State and Count Validations
Instantiation:
Tests now instantiate
SelectionList
without initial constructor arguments, using setters and action methods instead.
Empty States:
Updates assertions (
isEmpty()
) to verify state based on whether any entities have been dynamically added, rather than checking pre-defined constructor arrays.
Stale Flags:
Changes from passing a
stale
boolean via the constructor to explicitly triggering a mutable
$selectionList->markStale()
method.
Chunk Capacity Behavior
Chunk Capacity Behavior
Flexible Chunk Sizes:
Introduces a
setChunkSize()
method, replacing the constructor-configured chunk boundary.
Capacity Assertions:
Retains and updates the logic for
isFullChunk()
, ensuring it accurately evaluates capacity when elements span multiple dynamic priority groups or when the chunk limit is altered mid-lifecycle.
Good response
Bad response
Share & export
Copy
Show more options
Copy prompt
You said Are there any issues or potential bolltenecks
You said
Are there any issues or potential bolltenecks
Listen
Show thinking
Gemini said
Gemini said
Based on the test diff you provided, we can infer a few potential issues and architectural bottlenecks in the underlying
SelectionList
implementation. While the tests are well-structured, the behavior they describe hints at a few areas you might want to keep an eye on, particularly for an Elasticsearch (ES) processor queue.
Here are the potential issues and bottlenecks to consider:
1. Array Merging Overhead (Performance)
1. Array Merging Overhead (Performance)
The
testAddEntityListMergesMultipleCallsForSamePriority
test shows that calling
addEntityList()
multiple times for the same priority group merges the arrays.
The Bottleneck:
If the underlying implementation uses
array_merge()
inside a loop to append these IDs, it creates a new array in memory every time it's called. If you are processing thousands of entities and appending them in small batches, this can lead to memory bloat and CPU degradation due to constant array reallocation.
Mitigation:
Ensure the implementation handles batch appends efficiently (e.g., using the spread operator
[...$existing, ...$new]
or appending via references) or groups the arrays before doing a single merge.
2. Lack of Uniqueness/Deduplication (Logic)
2. Lack of Uniqueness/Deduplication (Logic)
None of the tests explicitly verify what happens if duplicate IDs are added. For example, if you call
addEntityList(QueuePriorityEnum::HIGH, [1, 2])
and then
addEntityList(QueuePriorityEnum::HIGH, [2, 3])
.
The Issue:
Does the getter return
[1, 2, 2, 3]
or
[1, 2, 3]
? If duplicates are not filtered out, your ES processor might end up indexing the same entity multiple times in a single chunk, which wastes I/O and processor cycles.
Mitigation:
The underlying class should ideally enforce uniqueness (e.g., using
array_unique()
before resolving the chunk, or using ID keys as associative array keys to naturally prevent duplicates).
3. Memory Consumption with Large Chunks (Scalability)
3. Memory Consumption with Large Chunks (Scalability)
The tests introduce
setChunkSize()
. If this chunk size is configured to be very large (e.g., tens of thousands of IDs to bulk-send to Elasticsearch).
The Bottleneck:
Holding massive arrays of IDs in memory across different priority groups can quickly hit PHP memory limits, especially if this
SelectionList
object is kept alive during a long-running daemon or cron job.
Mitigation:
Monitor memory usage if
CHUNK_SIZE
grows, and ensure the
SelectionList
object is properly destroyed (or garbage collected) after the chunk is processed to free up memory.
4. Type Juggling
4. Type Juggling
In the original code, string IDs were used (
['p1', 'p2']
). In the refactored tests, integer IDs are used (
[1, 2]
).
The Issue:
If your system handles UUIDs (strings) vs. relational DB auto-increments (integers), make sure the underlying implementation uses strict comparisons (
===
) where necessary, especially if deduplicating arrays, to prevent PHP from juggling
'1'
and
1
improperly.
Would you like me to draft a quick test case to check how the class currently handles duplicate IDs, or is deduplication intentionally handled further down your pipeline?
Good response
Bad response
Share & export
Copy
Show more options
Copy prompt
Edit
You said what about non test files
You said
what about non test files
Listen
Show thinking
Gemini said
Gemini said
Since we don't have the actual
SelectionList.php
file, we have to reverse-engineer its implementation based on the test behaviors. Moving from a constructor-based, fixed-property model to a dynamic, mutable model introduces several potential pitfalls in the implementation file itself.
Here are the specific bottlenecks and issues to watch out for in the
SelectionList.php
source code:
1. The count() Method Implementation (Performance Trap)
1. The
count()
Method Implementation (Performance Trap)
The Risk:
If
count()
is implemented by calling
$this->getAllIds()
and counting the resulting merged array (e.g.,
return count($this->getAllIds());
), it will be highly inefficient. It would allocate a brand-new array in memory just to determine its length.
The Fix:
count()
should mathematically sum the sizes of the underlying group arrays without merging them:
return array_sum(array_map('count', $this->entityLists));
2. Loss of Immutability (State Management)
2. Loss of Immutability (State Management)
The Risk:
The original code passed all data via the constructor, implying the DTO (Data Transfer Object) was immutable once created. The refactored version introduces mutability (
addEntityList()
,
setChunkSize()
,
markStale()
). DTOs are typically passed between architectural layers; if one layer modifies the chunk size or adds entities while another is processing it, it can cause unpredictable side effects or race conditions in your queue processor.
The Fix:...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
55651
|
1930
|
10
|
2026-05-19T06:35:05.692989+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-19/1779 /Users/lukas/.screenpipe/data/data/2026-05-19/1779172505692_m1.jpg...
|
Firefox
|
JY-20808 low priority indexing queue by Vasil-Jimi JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app — Work...
|
1
|
github.com/jiminny/app/pull/12082/changes#diff-49a github.com/jiminny/app/pull/12082/changes#diff-49a79d99c97caf7fc27ecb1dbacab5a29d871822caa0db0c71e94957c28c87af...
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New chat
Gemini
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Gemini said
Gemini said
Here is a precise and concise summary of the code selection, which refactors
SelectionListTest
to accommodate a shift from fixed high/normal priority properties to a more dynamic, enum-driven priority group architecture.
Refactored Priority Handling
Refactored Priority Handling
Dynamic Priority Groups:
Replaces fixed high/normal array parameters with the
QueuePriorityEnum
(
HIGH
,
NORMAL
,
LOW
), allowing entity lists to be managed dynamically by group types.
Merged Registrations:
Validates that multiple
addEntityList()
calls targeting the same priority level properly merge their data instead of overwriting it.
Group Querying:
Tests new methods
getEntityListItemsByGroup()
and
getEntityListGroups()
to retrieve group-specific IDs or an array of active group names (e.g.,
['high', 'normal']
).
Updated State and Count Validations
Updated State and Count Validations
Instantiation:
Tests now instantiate
SelectionList
without initial constructor arguments, using setters and action methods instead.
Empty States:
Updates assertions (
isEmpty()
) to verify state based on whether any entities have been dynamically added, rather than checking pre-defined constructor arrays.
Stale Flags:
Changes from passing a
stale
boolean via the constructor to explicitly triggering a mutable
$selectionList->markStale()
method.
Chunk Capacity Behavior
Chunk Capacity Behavior
Flexible Chunk Sizes:
Introduces a
setChunkSize()
method, replacing the constructor-configured chunk boundary.
Capacity Assertions:
Retains and updates the logic for
isFullChunk()
, ensuring it accurately evaluates capacity when elements span multiple dynamic priority groups or when the chunk limit is altered mid-lifecycle.
Good response
Bad response
Share & export
Copy
Show more options
Copy prompt
You said Are there any issues or potential bolltenecks
You said
Are there any issues or potential bolltenecks
Listen
Show thinking
Gemini said
Gemini said
Based on the test diff you provided, we can infer a few potential issues and architectural bottlenecks in the underlying
SelectionList
implementation. While the tests are well-structured, the behavior they describe hints at a few areas you might want to keep an eye on, particularly for an Elasticsearch (ES) processor queue.
Here are the potential issues and bottlenecks to consider:
1. Array Merging Overhead (Performance)
1. Array Merging Overhead (Performance)
The
testAddEntityListMergesMultipleCallsForSamePriority
test shows that calling
addEntityList()
multiple times for the same priority group merges the arrays.
The Bottleneck:
If the underlying implementation uses
array_merge()
inside a loop to append these IDs, it creates a new array in memory every time it's called. If you are processing thousands of entities and appending them in small batches, this can lead to memory bloat and CPU degradation due to constant array reallocation.
Mitigation:
Ensure the implementation handles batch appends efficiently (e.g., using the spread operator
[...$existing, ...$new]
or appending via references) or groups the arrays before doing a single merge.
2. Lack of Uniqueness/Deduplication (Logic)
2. Lack of Uniqueness/Deduplication (Logic)
None of the tests explicitly verify what happens if duplicate IDs are added. For example, if you call
addEntityList(QueuePriorityEnum::HIGH, [1, 2])
and then
addEntityList(QueuePriorityEnum::HIGH, [2, 3])
.
The Issue:
Does the getter return
[1, 2, 2, 3]
or
[1, 2, 3]
? If duplicates are not filtered out, your ES processor might end up indexing the same entity multiple times in a single chunk, which wastes I/O and processor cycles.
Mitigation:
The underlying class should ideally enforce uniqueness (e.g., using
array_unique()
before resolving the chunk, or using ID keys as associative array keys to naturally prevent duplicates).
3. Memory Consumption with Large Chunks (Scalability)
3. Memory Consumption with Large Chunks (Scalability)
The tests introduce
setChunkSize()
. If this chunk size is configured to be very large (e.g., tens of thousands of IDs to bulk-send to Elasticsearch).
The Bottleneck:
Holding massive arrays of IDs in memory across different priority groups can quickly hit PHP memory limits, especially if this
SelectionList
object is kept alive during a long-running daemon or cron job.
Mitigation:
Monitor memory usage if
CHUNK_SIZE
grows, and ensure the
SelectionList
object is properly destroyed (or garbage collected) after the chunk is processed to free up memory.
4. Type Juggling
4. Type Juggling
In the original code, string IDs were used (
['p1', 'p2']
). In the refactored tests, integer IDs are used (
[1, 2]
).
The Issue:
If your system handles UUIDs (strings) vs. relational DB auto-increments (integers), make sure the underlying implementation uses strict comparisons (
===
) where necessary, especially if deduplicating arrays, to prevent PHP from juggling
'1'
and
1
improperly.
Would you like me to draft a quick test case to check how the class currently handles duplicate IDs, or is deduplication intentionally handled further down your pipeline?
Good response
Bad response
Share & export
Copy
Show more options...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"WORK, Google Account: lukas.kovalik@jiminny.com","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Main menu","depth":12,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New chat","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gemini","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Chat","depth":12,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open menu for conversation actions.","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Conversation with Gemini","depth":15,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":21,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;667use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;7use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;8+use Jiminny\\Component\\ES\\QueuePriorityEnum;8use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\TestCase;10use PHPUnit\\Framework\\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;667use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;7use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;8+use Jiminny\\Component\\ES\\QueuePriorityEnum;8use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\TestCase;10use PHPUnit\\Framework\\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected.","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Listen","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is a precise and concise summary of the code selection, which refactors","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionListTest","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to accommodate a shift from fixed high/normal priority properties to a more dynamic, enum-driven priority group architecture.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Refactored Priority Handling","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Refactored Priority Handling","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dynamic Priority Groups:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Replaces fixed high/normal array parameters with the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QueuePriorityEnum","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HIGH","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NORMAL","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"LOW","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"), allowing entity lists to be managed dynamically by group types.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Merged Registrations:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Validates that multiple","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"calls targeting the same priority level properly merge their data instead of overwriting it.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Group Querying:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tests new methods","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getEntityListItemsByGroup()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getEntityListGroups()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to retrieve group-specific IDs or an array of active group names (e.g.,","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"['high', 'normal']","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Updated State and Count Validations","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Updated State and Count Validations","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Instantiation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tests now instantiate","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"without initial constructor arguments, using setters and action methods instead.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Empty States:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Updates assertions (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"isEmpty()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") to verify state based on whether any entities have been dynamically added, rather than checking pre-defined constructor arrays.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Stale Flags:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Changes from passing a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"stale","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"boolean via the constructor to explicitly triggering a mutable","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$selectionList->markStale()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Chunk Capacity Behavior","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Chunk Capacity Behavior","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Flexible Chunk Sizes:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Introduces a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"setChunkSize()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method, replacing the constructor-configured chunk boundary.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Capacity Assertions:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Retains and updates the logic for","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"isFullChunk()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", ensuring it accurately evaluates capacity when elements span multiple dynamic priority groups or when the chunk limit is altered mid-lifecycle.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":22,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":22,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":21,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":22,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy prompt","depth":21,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said Are there any issues or potential bolltenecks","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Are there any issues or potential bolltenecks","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Listen","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Show thinking","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Based on the test diff you provided, we can infer a few potential issues and architectural bottlenecks in the underlying","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"implementation. While the tests are well-structured, the behavior they describe hints at a few areas you might want to keep an eye on, particularly for an Elasticsearch (ES) processor queue.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here are the potential issues and bottlenecks to consider:","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"1. Array Merging Overhead (Performance)","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1. Array Merging Overhead (Performance)","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"testAddEntityListMergesMultipleCallsForSamePriority","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test shows that calling","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList()","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"multiple times for the same priority group merges the arrays.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Bottleneck:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If the underlying implementation uses","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"array_merge()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"inside a loop to append these IDs, it creates a new array in memory every time it's called. If you are processing thousands of entities and appending them in small batches, this can lead to memory bloat and CPU degradation due to constant array reallocation.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mitigation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ensure the implementation handles batch appends efficiently (e.g., using the spread operator","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[...$existing, ...$new]","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or appending via references) or groups the arrays before doing a single merge.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"2. Lack of Uniqueness/Deduplication (Logic)","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2. Lack of Uniqueness/Deduplication (Logic)","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"None of the tests explicitly verify what happens if duplicate IDs are added. For example, if you call","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList(QueuePriorityEnum::HIGH, [1, 2])","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and then","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList(QueuePriorityEnum::HIGH, [2, 3])","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Issue:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Does the getter return","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[1, 2, 2, 3]","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[1, 2, 3]","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"? If duplicates are not filtered out, your ES processor might end up indexing the same entity multiple times in a single chunk, which wastes I/O and processor cycles.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mitigation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The underlying class should ideally enforce uniqueness (e.g., using","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"array_unique()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"before resolving the chunk, or using ID keys as associative array keys to naturally prevent duplicates).","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"3. Memory Consumption with Large Chunks (Scalability)","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3. Memory Consumption with Large Chunks (Scalability)","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The tests introduce","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"setChunkSize()","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":". If this chunk size is configured to be very large (e.g., tens of thousands of IDs to bulk-send to Elasticsearch).","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Bottleneck:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Holding massive arrays of IDs in memory across different priority groups can quickly hit PHP memory limits, especially if this","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"object is kept alive during a long-running daemon or cron job.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mitigation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Monitor memory usage if","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CHUNK_SIZE","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"grows, and ensure the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"object is properly destroyed (or garbage collected) after the chunk is processed to free up memory.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"4. Type Juggling","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4. Type Juggling","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"In the original code, string IDs were used (","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"['p1', 'p2']","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"). In the refactored tests, integer IDs are used (","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[1, 2]","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Issue:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If your system handles UUIDs (strings) vs. relational DB auto-increments (integers), make sure the underlying implementation uses strict comparisons (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"===","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") where necessary, especially if deduplicating arrays, to prevent PHP from juggling","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"'1'","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"improperly.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Would you like me to draft a quick test case to check how the class currently handles duplicate IDs, or is deduplication intentionally handled further down your pipeline?","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":22,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":22,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":21,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":22,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":21,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
-6919392816584860190
|
8165702397781963157
|
click
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New chat
Gemini
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Gemini said
Gemini said
Here is a precise and concise summary of the code selection, which refactors
SelectionListTest
to accommodate a shift from fixed high/normal priority properties to a more dynamic, enum-driven priority group architecture.
Refactored Priority Handling
Refactored Priority Handling
Dynamic Priority Groups:
Replaces fixed high/normal array parameters with the
QueuePriorityEnum
(
HIGH
,
NORMAL
,
LOW
), allowing entity lists to be managed dynamically by group types.
Merged Registrations:
Validates that multiple
addEntityList()
calls targeting the same priority level properly merge their data instead of overwriting it.
Group Querying:
Tests new methods
getEntityListItemsByGroup()
and
getEntityListGroups()
to retrieve group-specific IDs or an array of active group names (e.g.,
['high', 'normal']
).
Updated State and Count Validations
Updated State and Count Validations
Instantiation:
Tests now instantiate
SelectionList
without initial constructor arguments, using setters and action methods instead.
Empty States:
Updates assertions (
isEmpty()
) to verify state based on whether any entities have been dynamically added, rather than checking pre-defined constructor arrays.
Stale Flags:
Changes from passing a
stale
boolean via the constructor to explicitly triggering a mutable
$selectionList->markStale()
method.
Chunk Capacity Behavior
Chunk Capacity Behavior
Flexible Chunk Sizes:
Introduces a
setChunkSize()
method, replacing the constructor-configured chunk boundary.
Capacity Assertions:
Retains and updates the logic for
isFullChunk()
, ensuring it accurately evaluates capacity when elements span multiple dynamic priority groups or when the chunk limit is altered mid-lifecycle.
Good response
Bad response
Share & export
Copy
Show more options
Copy prompt
You said Are there any issues or potential bolltenecks
You said
Are there any issues or potential bolltenecks
Listen
Show thinking
Gemini said
Gemini said
Based on the test diff you provided, we can infer a few potential issues and architectural bottlenecks in the underlying
SelectionList
implementation. While the tests are well-structured, the behavior they describe hints at a few areas you might want to keep an eye on, particularly for an Elasticsearch (ES) processor queue.
Here are the potential issues and bottlenecks to consider:
1. Array Merging Overhead (Performance)
1. Array Merging Overhead (Performance)
The
testAddEntityListMergesMultipleCallsForSamePriority
test shows that calling
addEntityList()
multiple times for the same priority group merges the arrays.
The Bottleneck:
If the underlying implementation uses
array_merge()
inside a loop to append these IDs, it creates a new array in memory every time it's called. If you are processing thousands of entities and appending them in small batches, this can lead to memory bloat and CPU degradation due to constant array reallocation.
Mitigation:
Ensure the implementation handles batch appends efficiently (e.g., using the spread operator
[...$existing, ...$new]
or appending via references) or groups the arrays before doing a single merge.
2. Lack of Uniqueness/Deduplication (Logic)
2. Lack of Uniqueness/Deduplication (Logic)
None of the tests explicitly verify what happens if duplicate IDs are added. For example, if you call
addEntityList(QueuePriorityEnum::HIGH, [1, 2])
and then
addEntityList(QueuePriorityEnum::HIGH, [2, 3])
.
The Issue:
Does the getter return
[1, 2, 2, 3]
or
[1, 2, 3]
? If duplicates are not filtered out, your ES processor might end up indexing the same entity multiple times in a single chunk, which wastes I/O and processor cycles.
Mitigation:
The underlying class should ideally enforce uniqueness (e.g., using
array_unique()
before resolving the chunk, or using ID keys as associative array keys to naturally prevent duplicates).
3. Memory Consumption with Large Chunks (Scalability)
3. Memory Consumption with Large Chunks (Scalability)
The tests introduce
setChunkSize()
. If this chunk size is configured to be very large (e.g., tens of thousands of IDs to bulk-send to Elasticsearch).
The Bottleneck:
Holding massive arrays of IDs in memory across different priority groups can quickly hit PHP memory limits, especially if this
SelectionList
object is kept alive during a long-running daemon or cron job.
Mitigation:
Monitor memory usage if
CHUNK_SIZE
grows, and ensure the
SelectionList
object is properly destroyed (or garbage collected) after the chunk is processed to free up memory.
4. Type Juggling
4. Type Juggling
In the original code, string IDs were used (
['p1', 'p2']
). In the refactored tests, integer IDs are used (
[1, 2]
).
The Issue:
If your system handles UUIDs (strings) vs. relational DB auto-increments (integers), make sure the underlying implementation uses strict comparisons (
===
) where necessary, especially if deduplicating arrays, to prevent PHP from juggling
'1'
and
1
improperly.
Would you like me to draft a quick test case to check how the class currently handles duplicate IDs, or is deduplication intentionally handled further down your pipeline?
Good response
Bad response
Share & export
Copy
Show more options...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
55652
|
1931
|
16
|
2026-05-19T06:35:05.686160+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-19/1779 /Users/lukas/.screenpipe/data/data/2026-05-19/1779172505686_m2.jpg...
|
Firefox
|
JY-20808 low priority indexing queue by Vasil-Jimi JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app — Work...
|
1
|
github.com/jiminny/app/pull/12082/changes#diff-49a github.com/jiminny/app/pull/12082/changes#diff-49a79d99c97caf7fc27ecb1dbacab5a29d871822caa0db0c71e94957c28c87af...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New chat
Gemini
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Gemini said
Gemini said
Here is a precise and concise summary of the code selection, which refactors
SelectionListTest
to accommodate a shift from fixed high/normal priority properties to a more dynamic, enum-driven priority group architecture.
Refactored Priority Handling
Refactored Priority Handling
Dynamic Priority Groups:
Replaces fixed high/normal array parameters with the
QueuePriorityEnum
(
HIGH
,
NORMAL
,
LOW
), allowing entity lists to be managed dynamically by group types.
Merged Registrations:
Validates that multiple
addEntityList()
calls targeting the same priority level properly merge their data instead of overwriting it.
Group Querying:
Tests new methods
getEntityListItemsByGroup()
and
getEntityListGroups()
to retrieve group-specific IDs or an array of active group names (e.g.,
['high', 'normal']
).
Updated State and Count Validations
Updated State and Count Validations
Instantiation:
Tests now instantiate
SelectionList
without initial constructor arguments, using setters and action methods instead.
Empty States:
Updates assertions (
isEmpty()
) to verify state based on whether any entities have been dynamically added, rather than checking pre-defined constructor arrays.
Stale Flags:
Changes from passing a
stale
boolean via the constructor to explicitly triggering a mutable
$selectionList->markStale()
method.
Chunk Capacity Behavior
Chunk Capacity Behavior
Flexible Chunk Sizes:
Introduces a
setChunkSize()
method, replacing the constructor-configured chunk boundary.
Capacity Assertions:
Retains and updates the logic for
isFullChunk()
, ensuring it accurately evaluates capacity when elements span multiple dynamic priority groups or when the chunk limit is altered mid-lifecycle.
Good response
Bad response
Share & export
Copy
Show more options
Copy prompt
You said Are there any issues or potential bolltenecks
You said
Are there any issues or potential bolltenecks
Listen
Show thinking
Gemini said
Gemini said
Based on the test diff you provided, we can infer a few potential issues and architectural bottlenecks in the underlying
SelectionList
implementation. While the tests are well-structured, the behavior they describe hints at a few areas you might want to keep an eye on, particularly for an Elasticsearch (ES) processor queue.
Here are the potential issues and bottlenecks to consider:
1. Array Merging Overhead (Performance)
1. Array Merging Overhead (Performance)
The
testAddEntityListMergesMultipleCallsForSamePriority
test shows that calling
addEntityList()
multiple times for the same priority group merges the arrays.
The Bottleneck:
If the underlying implementation uses
array_merge()
inside a loop to append these IDs, it creates a new array in memory every time it's called. If you are processing thousands of entities and appending them in small batches, this can lead to memory bloat and CPU degradation due to constant array reallocation.
Mitigation:
Ensure the implementation handles batch appends efficiently (e.g., using the spread operator
[...$existing, ...$new]
or appending via references) or groups the arrays before doing a single merge.
2. Lack of Uniqueness/Deduplication (Logic)
2. Lack of Uniqueness/Deduplication (Logic)
None of the tests explicitly verify what happens if duplicate IDs are added. For example, if you call
addEntityList(QueuePriorityEnum::HIGH, [1, 2])
and then
addEntityList(QueuePriorityEnum::HIGH, [2, 3])
.
The Issue:
Does the getter return
[1, 2, 2, 3]
or
[1, 2, 3]
? If duplicates are not filtered out, your ES processor might end up indexing the same entity multiple times in a single chunk, which wastes I/O and processor cycles.
Mitigation:
The underlying class should ideally enforce uniqueness (e.g., using
array_unique()
before resolving the chunk, or using ID keys as associative array keys to naturally prevent duplicates).
3. Memory Consumption with Large Chunks (Scalability)
3. Memory Consumption with Large Chunks (Scalability)
The tests introduce
setChunkSize()
. If this chunk size is configured to be very large (e.g., tens of thousands of IDs to bulk-send to Elasticsearch).
The Bottleneck:
Holding massive arrays of IDs in memory across different priority groups can quickly hit PHP memory limits, especially if this
SelectionList
object is kept alive during a long-running daemon or cron job.
Mitigation:
Monitor memory usage if
CHUNK_SIZE
grows, and ensure the
SelectionList
object is properly destroyed (or garbage collected) after the chunk is processed to free up memory.
4. Type Juggling
4. Type Juggling
In the original code, string IDs were used (
['p1', 'p2']
). In the refactored tests, integer IDs are used (
[1, 2]
).
The Issue:
If your system handles UUIDs (strings) vs. relational DB auto-increments (integers), make sure the underlying implementation uses strict comparisons (
===
) where necessary, especially if deduplicating arrays, to prevent PHP from juggling
'1'
and
1
improperly.
Would you like me to draft a quick test case to check how the class currently handles duplicate IDs, or is deduplication intentionally handled further down your pipeline?
Good response
Bad response
Share & export
Copy
Show more options
Copy prompt...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.10106383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.18816489,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.15674867,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.1245012,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.15163608,"width":0.07413564,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":7,"bounds":{"left":0.35854387,"top":0.055067837,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":7,"bounds":{"left":0.37051198,"top":0.055067837,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"WORK, Google Account: lukas.kovalik@jiminny.com","depth":12,"bounds":{"left":0.3678524,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Main menu","depth":12,"bounds":{"left":0.08494016,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New chat","depth":12,"bounds":{"left":0.09823803,"top":0.10454908,"width":0.028590426,"height":0.030327214},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gemini","depth":15,"bounds":{"left":0.1008976,"top":0.10973663,"width":0.021941489,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Chat","depth":12,"bounds":{"left":0.33992687,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open menu for conversation actions.","depth":12,"bounds":{"left":0.35322472,"top":0.103751,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Conversation with Gemini","depth":15,"bounds":{"left":0.079288565,"top":0.14764565,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":16,"bounds":{"left":0.079288565,"top":0.15003991,"width":0.1200133,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":21,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;667use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;7use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;8+use Jiminny\\Component\\ES\\QueuePriorityEnum;8use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\TestCase;10use PHPUnit\\Framework\\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;667use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;7use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;8+use Jiminny\\Component\\ES\\QueuePriorityEnum;8use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\TestCase;10use PHPUnit\\Framework\\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected.","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Listen","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is a precise and concise summary of the code selection, which refactors","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionListTest","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to accommodate a shift from fixed high/normal priority properties to a more dynamic, enum-driven priority group architecture.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Refactored Priority Handling","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Refactored Priority Handling","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dynamic Priority Groups:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Replaces fixed high/normal array parameters with the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QueuePriorityEnum","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HIGH","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NORMAL","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"LOW","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"), allowing entity lists to be managed dynamically by group types.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Merged Registrations:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Validates that multiple","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"calls targeting the same priority level properly merge their data instead of overwriting it.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Group Querying:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tests new methods","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getEntityListItemsByGroup()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getEntityListGroups()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to retrieve group-specific IDs or an array of active group names (e.g.,","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"['high', 'normal']","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Updated State and Count Validations","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Updated State and Count Validations","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Instantiation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tests now instantiate","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"without initial constructor arguments, using setters and action methods instead.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Empty States:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Updates assertions (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"isEmpty()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") to verify state based on whether any entities have been dynamically added, rather than checking pre-defined constructor arrays.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Stale Flags:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Changes from passing a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"stale","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"boolean via the constructor to explicitly triggering a mutable","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$selectionList->markStale()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Chunk Capacity Behavior","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Chunk Capacity Behavior","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Flexible Chunk Sizes:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Introduces a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"setChunkSize()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method, replacing the constructor-configured chunk boundary.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Capacity Assertions:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Retains and updates the logic for","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"isFullChunk()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", ensuring it accurately evaluates capacity when elements span multiple dynamic priority groups or when the chunk limit is altered mid-lifecycle.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":22,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":22,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":21,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":22,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy prompt","depth":21,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said Are there any issues or potential bolltenecks","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Are there any issues or potential bolltenecks","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Listen","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Show thinking","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Based on the test diff you provided, we can infer a few potential issues and architectural bottlenecks in the underlying","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"implementation. While the tests are well-structured, the behavior they describe hints at a few areas you might want to keep an eye on, particularly for an Elasticsearch (ES) processor queue.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here are the potential issues and bottlenecks to consider:","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"1. Array Merging Overhead (Performance)","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1. Array Merging Overhead (Performance)","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"testAddEntityListMergesMultipleCallsForSamePriority","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test shows that calling","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList()","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"multiple times for the same priority group merges the arrays.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Bottleneck:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If the underlying implementation uses","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"array_merge()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"inside a loop to append these IDs, it creates a new array in memory every time it's called. If you are processing thousands of entities and appending them in small batches, this can lead to memory bloat and CPU degradation due to constant array reallocation.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mitigation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ensure the implementation handles batch appends efficiently (e.g., using the spread operator","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[...$existing, ...$new]","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or appending via references) or groups the arrays before doing a single merge.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"2. Lack of Uniqueness/Deduplication (Logic)","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2. Lack of Uniqueness/Deduplication (Logic)","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"None of the tests explicitly verify what happens if duplicate IDs are added. For example, if you call","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList(QueuePriorityEnum::HIGH, [1, 2])","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and then","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList(QueuePriorityEnum::HIGH, [2, 3])","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Issue:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Does the getter return","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[1, 2, 2, 3]","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[1, 2, 3]","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"? If duplicates are not filtered out, your ES processor might end up indexing the same entity multiple times in a single chunk, which wastes I/O and processor cycles.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mitigation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The underlying class should ideally enforce uniqueness (e.g., using","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"array_unique()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"before resolving the chunk, or using ID keys as associative array keys to naturally prevent duplicates).","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"3. Memory Consumption with Large Chunks (Scalability)","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3. Memory Consumption with Large Chunks (Scalability)","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The tests introduce","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"setChunkSize()","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":". If this chunk size is configured to be very large (e.g., tens of thousands of IDs to bulk-send to Elasticsearch).","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Bottleneck:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Holding massive arrays of IDs in memory across different priority groups can quickly hit PHP memory limits, especially if this","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"object is kept alive during a long-running daemon or cron job.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mitigation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Monitor memory usage if","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CHUNK_SIZE","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"grows, and ensure the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"object is properly destroyed (or garbage collected) after the chunk is processed to free up memory.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"4. Type Juggling","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4. Type Juggling","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"In the original code, string IDs were used (","depth":24,"bounds":{"left":0.11336436,"top":0.0,"width":0.10139628,"height":0.016360734},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"['p1', 'p2']","depth":25,"bounds":{"left":0.21675532,"top":0.0,"width":0.03357713,"height":0.014764565},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"). In the refactored tests, integer IDs are used (","depth":24,"bounds":{"left":0.11336436,"top":0.0,"width":0.2365359,"height":0.038707104},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[1, 2]","depth":25,"bounds":{"left":0.13048537,"top":0.0,"width":0.01662234,"height":0.014764565},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":24,"bounds":{"left":0.14910239,"top":0.0,"width":0.0033244682,"height":0.016360734},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Issue:","depth":26,"bounds":{"left":0.12599733,"top":0.0,"width":0.02642952,"height":0.016360734},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If your system handles UUIDs (strings) vs. relational DB auto-increments (integers), make sure the underlying implementation uses strict comparisons (","depth":26,"bounds":{"left":0.12599733,"top":0.0,"width":0.22855718,"height":0.038707104},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"===","depth":27,"bounds":{"left":0.2897274,"top":0.002793296,"width":0.00831117,"height":0.014764565},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") where necessary, especially if deduplicating arrays, to prevent PHP from juggling","depth":26,"bounds":{"left":0.12599733,"top":0.0015961692,"width":0.2209109,"height":0.038707104},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"'1'","depth":27,"bounds":{"left":0.2805851,"top":0.025139665,"width":0.00831117,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":26,"bounds":{"left":0.29089096,"top":0.023942538,"width":0.011968086,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":27,"bounds":{"left":0.30485374,"top":0.025139665,"width":0.0026595744,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"improperly.","depth":26,"bounds":{"left":0.30950797,"top":0.023942538,"width":0.028424202,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Would you like me to draft a quick test case to check how the class currently handles duplicate IDs, or is deduplication intentionally handled further down your pipeline?","depth":24,"bounds":{"left":0.11336436,"top":0.06624102,"width":0.24534574,"height":0.038707104},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":22,"bounds":{"left":0.1100399,"top":0.12290503,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":22,"bounds":{"left":0.120678194,"top":0.12290503,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":21,"bounds":{"left":0.13131648,"top":0.12290503,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":22,"bounds":{"left":0.1419548,"top":0.12290503,"width":0.010638298,"height":0.025538707},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":21,"bounds":{"left":0.15259309,"top":0.12290503,"width":0.010638298,"height":0.025538707},"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy prompt","depth":21,"bounds":{"left":0.26180187,"top":0.1867518,"width":0.013297873,"height":0.031923383},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
-3165168913077812118
|
8165702397781963157
|
click
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New chat
Gemini
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Gemini said
Gemini said
Here is a precise and concise summary of the code selection, which refactors
SelectionListTest
to accommodate a shift from fixed high/normal priority properties to a more dynamic, enum-driven priority group architecture.
Refactored Priority Handling
Refactored Priority Handling
Dynamic Priority Groups:
Replaces fixed high/normal array parameters with the
QueuePriorityEnum
(
HIGH
,
NORMAL
,
LOW
), allowing entity lists to be managed dynamically by group types.
Merged Registrations:
Validates that multiple
addEntityList()
calls targeting the same priority level properly merge their data instead of overwriting it.
Group Querying:
Tests new methods
getEntityListItemsByGroup()
and
getEntityListGroups()
to retrieve group-specific IDs or an array of active group names (e.g.,
['high', 'normal']
).
Updated State and Count Validations
Updated State and Count Validations
Instantiation:
Tests now instantiate
SelectionList
without initial constructor arguments, using setters and action methods instead.
Empty States:
Updates assertions (
isEmpty()
) to verify state based on whether any entities have been dynamically added, rather than checking pre-defined constructor arrays.
Stale Flags:
Changes from passing a
stale
boolean via the constructor to explicitly triggering a mutable
$selectionList->markStale()
method.
Chunk Capacity Behavior
Chunk Capacity Behavior
Flexible Chunk Sizes:
Introduces a
setChunkSize()
method, replacing the constructor-configured chunk boundary.
Capacity Assertions:
Retains and updates the logic for
isFullChunk()
, ensuring it accurately evaluates capacity when elements span multiple dynamic priority groups or when the chunk limit is altered mid-lifecycle.
Good response
Bad response
Share & export
Copy
Show more options
Copy prompt
You said Are there any issues or potential bolltenecks
You said
Are there any issues or potential bolltenecks
Listen
Show thinking
Gemini said
Gemini said
Based on the test diff you provided, we can infer a few potential issues and architectural bottlenecks in the underlying
SelectionList
implementation. While the tests are well-structured, the behavior they describe hints at a few areas you might want to keep an eye on, particularly for an Elasticsearch (ES) processor queue.
Here are the potential issues and bottlenecks to consider:
1. Array Merging Overhead (Performance)
1. Array Merging Overhead (Performance)
The
testAddEntityListMergesMultipleCallsForSamePriority
test shows that calling
addEntityList()
multiple times for the same priority group merges the arrays.
The Bottleneck:
If the underlying implementation uses
array_merge()
inside a loop to append these IDs, it creates a new array in memory every time it's called. If you are processing thousands of entities and appending them in small batches, this can lead to memory bloat and CPU degradation due to constant array reallocation.
Mitigation:
Ensure the implementation handles batch appends efficiently (e.g., using the spread operator
[...$existing, ...$new]
or appending via references) or groups the arrays before doing a single merge.
2. Lack of Uniqueness/Deduplication (Logic)
2. Lack of Uniqueness/Deduplication (Logic)
None of the tests explicitly verify what happens if duplicate IDs are added. For example, if you call
addEntityList(QueuePriorityEnum::HIGH, [1, 2])
and then
addEntityList(QueuePriorityEnum::HIGH, [2, 3])
.
The Issue:
Does the getter return
[1, 2, 2, 3]
or
[1, 2, 3]
? If duplicates are not filtered out, your ES processor might end up indexing the same entity multiple times in a single chunk, which wastes I/O and processor cycles.
Mitigation:
The underlying class should ideally enforce uniqueness (e.g., using
array_unique()
before resolving the chunk, or using ID keys as associative array keys to naturally prevent duplicates).
3. Memory Consumption with Large Chunks (Scalability)
3. Memory Consumption with Large Chunks (Scalability)
The tests introduce
setChunkSize()
. If this chunk size is configured to be very large (e.g., tens of thousands of IDs to bulk-send to Elasticsearch).
The Bottleneck:
Holding massive arrays of IDs in memory across different priority groups can quickly hit PHP memory limits, especially if this
SelectionList
object is kept alive during a long-running daemon or cron job.
Mitigation:
Monitor memory usage if
CHUNK_SIZE
grows, and ensure the
SelectionList
object is properly destroyed (or garbage collected) after the chunk is processed to free up memory.
4. Type Juggling
4. Type Juggling
In the original code, string IDs were used (
['p1', 'p2']
). In the refactored tests, integer IDs are used (
[1, 2]
).
The Issue:
If your system handles UUIDs (strings) vs. relational DB auto-increments (integers), make sure the underlying implementation uses strict comparisons (
===
) where necessary, especially if deduplicating arrays, to prevent PHP from juggling
'1'
and
1
improperly.
Would you like me to draft a quick test case to check how the class currently handles duplicate IDs, or is deduplication intentionally handled further down your pipeline?
Good response
Bad response
Share & export
Copy
Show more options
Copy prompt...
|
55650
|
NULL
|
NULL
|
NULL
|
|
55653
|
1930
|
11
|
2026-05-19T06:35:35.900813+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-19/1779 /Users/lukas/.screenpipe/data/data/2026-05-19/1779172535900_m1.jpg...
|
Firefox
|
JY-20808 low priority indexing queue by Vasil-Jimi JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app — Work...
|
1
|
github.com/jiminny/app/pull/12082/changes#diff-49a github.com/jiminny/app/pull/12082/changes#diff-49a79d99c97caf7fc27ecb1dbacab5a29d871822caa0db0c71e94957c28c87af...
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New chat
Gemini
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Gemini said
Gemini said
Here is a precise and concise summary of the code selection, which refactors
SelectionListTest
to accommodate a shift from fixed high/normal priority properties to a more dynamic, enum-driven priority group architecture.
Refactored Priority Handling
Refactored Priority Handling
Dynamic Priority Groups:
Replaces fixed high/normal array parameters with the
QueuePriorityEnum
(
HIGH
,
NORMAL
,
LOW
), allowing entity lists to be managed dynamically by group types.
Merged Registrations:
Validates that multiple
addEntityList()
calls targeting the same priority level properly merge their data instead of overwriting it.
Group Querying:
Tests new methods
getEntityListItemsByGroup()
and
getEntityListGroups()
to retrieve group-specific IDs or an array of active group names (e.g.,
['high', 'normal']
).
Updated State and Count Validations
Updated State and Count Validations
Instantiation:
Tests now instantiate
SelectionList
without initial constructor arguments, using setters and action methods instead.
Empty States:
Updates assertions (
isEmpty()
) to verify state based on whether any entities have been dynamically added, rather than checking pre-defined constructor arrays.
Stale Flags:
Changes from passing a
stale
boolean via the constructor to explicitly triggering a mutable
$selectionList->markStale()
method.
Chunk Capacity Behavior
Chunk Capacity Behavior
Flexible Chunk Sizes:
Introduces a
setChunkSize()
method, replacing the constructor-configured chunk boundary.
Capacity Assertions:
Retains and updates the logic for
isFullChunk()
, ensuring it accurately evaluates capacity when elements span multiple dynamic priority groups or when the chunk limit is altered mid-lifecycle.
Good response
Bad response
Share & export
Copy
Show more options
Copy prompt
You said Are there any issues or potential bolltenecks
You said
Are there any issues or potential bolltenecks
Listen
Show thinking
Gemini said
Gemini said
Based on the test diff you provided, we can infer a few potential issues and architectural bottlenecks in the underlying
SelectionList
implementation. While the tests are well-structured, the behavior they describe hints at a few areas you might want to keep an eye on, particularly for an Elasticsearch (ES) processor queue.
Here are the potential issues and bottlenecks to consider:
1. Array Merging Overhead (Performance)
1. Array Merging Overhead (Performance)
The
testAddEntityListMergesMultipleCallsForSamePriority
test shows that calling
addEntityList()
multiple times for the same priority group merges the arrays.
The Bottleneck:
If the underlying implementation uses
array_merge()
inside a loop to append these IDs, it creates a new array in memory every time it's called. If you are processing thousands of entities and appending them in small batches, this can lead to memory bloat and CPU degradation due to constant array reallocation.
Mitigation:
Ensure the implementation handles batch appends efficiently (e.g., using the spread operator
[...$existing, ...$new]
or appending via references) or groups the arrays before doing a single merge.
2. Lack of Uniqueness/Deduplication (Logic)
2. Lack of Uniqueness/Deduplication (Logic)
None of the tests explicitly verify what happens if duplicate IDs are added. For example, if you call
addEntityList(QueuePriorityEnum::HIGH, [1, 2])
and then
addEntityList(QueuePriorityEnum::HIGH, [2, 3])
.
The Issue:
Does the getter return
[1, 2, 2, 3]
or
[1, 2, 3]
? If duplicates are not filtered out, your ES processor might end up indexing the same entity multiple times in a single chunk, which wastes I/O and processor cycles.
Mitigation:
The underlying class should ideally enforce uniqueness (e.g., using
array_unique()
before resolving the chunk, or using ID keys as associative array keys to naturally prevent duplicates).
3. Memory Consumption with Large Chunks (Scalability)
3. Memory Consumption with Large Chunks (Scalability)
The tests introduce
setChunkSize()
. If this chunk size is configured to be very large (e.g., tens of thousands of IDs to bulk-send to Elasticsearch).
The Bottleneck:
Holding massive arrays of IDs in memory across different priority groups can quickly hit PHP memory limits, especially if this
SelectionList
object is kept alive during a long-running daemon or cron job.
Mitigation:
Monitor memory usage if
CHUNK_SIZE
grows, and ensure the
SelectionList
object is properly destroyed (or garbage collected) after the chunk is processed to free up memory.
4. Type Juggling
4. Type Juggling
In the original code, string IDs were used (
['p1', 'p2']
). In the refactored tests, integer IDs are used (
[1, 2]
).
The Issue:
If your system handles UUIDs (strings) vs. relational DB auto-increments (integers), make sure the underlying implementation uses strict comparisons (
===
) where necessary, especially if deduplicating arrays, to prevent PHP from juggling
'1'
and
1
improperly.
Would you like me to draft a quick test case to check how the class currently handles duplicate IDs, or is deduplication intentionally handled further down your pipeline?
Good response
Bad response
Share & export
Copy
Show more options...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Google Gemini (⌃X)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"WORK, Google Account: lukas.kovalik@jiminny.com","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Main menu","depth":12,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New chat","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gemini","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Chat","depth":12,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open menu for conversation actions.","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Conversation with Gemini","depth":15,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":21,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;667use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;7use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;8+use Jiminny\\Component\\ES\\QueuePriorityEnum;8use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\TestCase;10use PHPUnit\\Framework\\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;5namespace Tests\\Unit\\Component\\ES\\Processor\\DTOs;667use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;7use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;8+use Jiminny\\Component\\ES\\QueuePriorityEnum;8use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\Attributes\\CoversClass;9use PHPUnit\\Framework\\TestCase;10use PHPUnit\\Framework\\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected.","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Listen","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is a precise and concise summary of the code selection, which refactors","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionListTest","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to accommodate a shift from fixed high/normal priority properties to a more dynamic, enum-driven priority group architecture.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Refactored Priority Handling","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Refactored Priority Handling","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dynamic Priority Groups:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Replaces fixed high/normal array parameters with the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QueuePriorityEnum","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HIGH","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NORMAL","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"LOW","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"), allowing entity lists to be managed dynamically by group types.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Merged Registrations:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Validates that multiple","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"calls targeting the same priority level properly merge their data instead of overwriting it.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Group Querying:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tests new methods","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getEntityListItemsByGroup()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"getEntityListGroups()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to retrieve group-specific IDs or an array of active group names (e.g.,","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"['high', 'normal']","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Updated State and Count Validations","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Updated State and Count Validations","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Instantiation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tests now instantiate","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"without initial constructor arguments, using setters and action methods instead.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Empty States:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Updates assertions (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"isEmpty()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") to verify state based on whether any entities have been dynamically added, rather than checking pre-defined constructor arrays.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Stale Flags:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Changes from passing a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"stale","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"boolean via the constructor to explicitly triggering a mutable","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$selectionList->markStale()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Chunk Capacity Behavior","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Chunk Capacity Behavior","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Flexible Chunk Sizes:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Introduces a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"setChunkSize()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method, replacing the constructor-configured chunk boundary.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Capacity Assertions:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Retains and updates the logic for","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"isFullChunk()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", ensuring it accurately evaluates capacity when elements span multiple dynamic priority groups or when the chunk limit is altered mid-lifecycle.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":22,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":22,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":21,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":22,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy prompt","depth":21,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said Are there any issues or potential bolltenecks","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Are there any issues or potential bolltenecks","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Listen","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Show thinking","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Based on the test diff you provided, we can infer a few potential issues and architectural bottlenecks in the underlying","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"implementation. While the tests are well-structured, the behavior they describe hints at a few areas you might want to keep an eye on, particularly for an Elasticsearch (ES) processor queue.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here are the potential issues and bottlenecks to consider:","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"1. Array Merging Overhead (Performance)","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1. Array Merging Overhead (Performance)","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"testAddEntityListMergesMultipleCallsForSamePriority","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"test shows that calling","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList()","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"multiple times for the same priority group merges the arrays.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Bottleneck:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If the underlying implementation uses","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"array_merge()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"inside a loop to append these IDs, it creates a new array in memory every time it's called. If you are processing thousands of entities and appending them in small batches, this can lead to memory bloat and CPU degradation due to constant array reallocation.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mitigation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ensure the implementation handles batch appends efficiently (e.g., using the spread operator","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[...$existing, ...$new]","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or appending via references) or groups the arrays before doing a single merge.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"2. Lack of Uniqueness/Deduplication (Logic)","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2. Lack of Uniqueness/Deduplication (Logic)","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"None of the tests explicitly verify what happens if duplicate IDs are added. For example, if you call","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList(QueuePriorityEnum::HIGH, [1, 2])","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and then","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addEntityList(QueuePriorityEnum::HIGH, [2, 3])","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Issue:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Does the getter return","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[1, 2, 2, 3]","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[1, 2, 3]","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"? If duplicates are not filtered out, your ES processor might end up indexing the same entity multiple times in a single chunk, which wastes I/O and processor cycles.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mitigation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The underlying class should ideally enforce uniqueness (e.g., using","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"array_unique()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"before resolving the chunk, or using ID keys as associative array keys to naturally prevent duplicates).","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"3. Memory Consumption with Large Chunks (Scalability)","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3. Memory Consumption with Large Chunks (Scalability)","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The tests introduce","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"setChunkSize()","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":". If this chunk size is configured to be very large (e.g., tens of thousands of IDs to bulk-send to Elasticsearch).","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Bottleneck:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Holding massive arrays of IDs in memory across different priority groups can quickly hit PHP memory limits, especially if this","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"object is kept alive during a long-running daemon or cron job.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mitigation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Monitor memory usage if","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CHUNK_SIZE","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"grows, and ensure the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SelectionList","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"object is properly destroyed (or garbage collected) after the chunk is processed to free up memory.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"4. Type Juggling","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4. Type Juggling","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"In the original code, string IDs were used (","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"['p1', 'p2']","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"). In the refactored tests, integer IDs are used (","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[1, 2]","depth":25,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Issue:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If your system handles UUIDs (strings) vs. relational DB auto-increments (integers), make sure the underlying implementation uses strict comparisons (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"===","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") where necessary, especially if deduplicating arrays, to prevent PHP from juggling","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"'1'","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"improperly.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Would you like me to draft a quick test case to check how the class currently handles duplicate IDs, or is deduplication intentionally handled further down your pipeline?","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":22,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":22,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":21,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":22,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":21,"on_screen":true,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
-6919392816584860190
|
8165702397781963157
|
idle
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20725 add HS rate limit handling on activities rematching by LakyLak · Pull Request #12066 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
JY-20808 low priority indexing queue by Vasil-Jiminny · Pull Request #12082 · jiminny/app
Close tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
WORK, Google Account: [EMAIL]
Main menu
New chat
Gemini
New Chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
You said I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>JY-20808 low priority indexing queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -5,84 +5,140 @@5namespace Tests\Unit\Component\ES\Processor\DTOs;5namespace Tests\Unit\Component\ES\Processor\DTOs;667use Jiminny\Component\ES\Processor\DTOs\SelectionList;7use Jiminny\Component\ES\Processor\DTOs\SelectionList;8+use Jiminny\Component\ES\QueuePriorityEnum;8use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\Attributes\CoversClass;9use PHPUnit\Framework\TestCase;10use PHPUnit\Framework\TestCase;101111#[CoversClass(SelectionList::class)]12#[CoversClass(SelectionList::class)]12final class SelectionListTest extends TestCase13final class SelectionListTest extends TestCase13{14{14-public function testGetEntityIds(): void15+private const int CHUNK_SIZE = 100;16+17+public function testAddEntityListAndGetAllIds(): void18+ {19+$selectionList = new SelectionList();20+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);21+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);22+23+$this->assertSame([1, 2, 3, 4], $selectionList->getAllIds());24+ }25+26+public function testAddEntityListMergesMultipleCallsForSamePriority(): void27+ {28+$selectionList = new SelectionList();29+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);30+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [3, 4]);31+32+$this->assertSame([1, 2, 3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));33+ }34+35+public function testGetEntityListItemsByGroup(): void36+ {37+$selectionList = new SelectionList();38+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1, 2]);39+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [3, 4]);40+$selectionList->addEntityList(QueuePriorityEnum::LOW, [5, 6]);41+42+$this->assertSame([1, 2], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));43+$this->assertSame([3, 4], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::NORMAL));44+$this->assertSame([5, 6], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::LOW));45+ }46+47+public function testGetEntityListItemsByGroupReturnsEmptyArrayForUnknownGroup(): void15 {48 {16-$priority = ['p1', 'p2'];49+$selectionList = new SelectionList();17-$normal = ['n1', 'n2'];50+18-$selectionList = new SelectionList($priority, $normal);51+$this->assertSame([], $selectionList->getEntityListItemsByGroup(QueuePriorityEnum::HIGH));52+ }195320-$this->assertSame($priority, $selectionList->getHighPriorityEntityIds());54+public function testGetEntityListGroups(): void21-$this->assertSame($normal, $selectionList->getNormalPriorityEntityId());55+ {56+$selectionList = new SelectionList();57+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);58+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2]);225923-$this->assertSame(['p1', 'p2', 'n1', 'n2'], $selectionList->getAllIds());60+$this->assertSame(['high', 'normal'], $selectionList->getEntityListGroups());24 }61 }256226public function testCountReturnsTotalCount(): void63public function testCountReturnsTotalCount(): void27 {64 {28-$selectionList = new SelectionList(['p1'], ['n1', 'n2']);65+$selectionList = new SelectionList();66+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);67+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [2, 3]);68+29$this->assertSame(3, $selectionList->count());69$this->assertSame(3, $selectionList->count());30 }70 }317132-public function testIsEmptyReturnsTrueWhenBothListsAreEmpty(): void72+public function testIsEmptyReturnsTrueWhenNoEntitiesAdded(): void33 {73 {34-$selectionList = new SelectionList([], []);74+$selectionList = new SelectionList();75+35$this->assertTrue($selectionList->isEmpty());76$this->assertTrue($selectionList->isEmpty());36 }77 }377838-public function testIsEmptyReturnsFalseWhenAnyListIsNotEmpty(): void79+public function testIsEmptyReturnsFalseWhenEntitiesAdded(): void39 {80 {40-$selectionList = new SelectionList(['p1'], []);81+$selectionList = new SelectionList();41-$this->assertFalse($selectionList->isEmpty());82+$selectionList->addEntityList(QueuePriorityEnum::HIGH, [1]);428343-$selectionList2 = new SelectionList([], ['n1']);84+$this->assertFalse($selectionList->isEmpty());44-$this->assertFalse($selectionList2->isEmpty());45 }85 }468647-public function testIsStaleChunkSelected(): void87+public function testMarkStaleAndIsStaleChunkSelected(): void48 {88 {49-$selectionList = new SelectionList([], [], true);89+$selectionList = new SelectionList();50-$this->assertTrue($selectionList->isStaleChunkSelected());90+91+$this->assertFalse($selectionList->isStaleChunkSelected());92+93+$selectionList->markStale();519452-$selectionList2 = new SelectionList([], [], false);95+$this->assertTrue($selectionList->isStaleChunkSelected());53-$this->assertFalse($selectionList2->isStaleChunkSelected());54 }96 }559756public function testIsFullChunk(): void98public function testIsFullChunk(): void57 {99 {58-$chunkSize = 200;100+$selectionList = new SelectionList();59-101+$selectionList->setChunkSize(self::CHUNK_SIZE);60-$fullList = range(1, $chunkSize);102+61-$selectionList = new SelectionList(103+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, self::CHUNK_SIZE));62- priorityEntityIdList: $fullList,104+63- normalEntityIdList: [],105+$this->assertTrue($selectionList->isFullChunk());64- chunkSize: $chunkSize,106+ }65- );107+108+public function testIsNotFullChunkWhenBelowChunkSize(): void109+ {110+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);111+112+$selectionList = new SelectionList();113+$selectionList->setChunkSize(self::CHUNK_SIZE);114+115+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range(1, $halfRange));116+117+$this->assertFalse($selectionList->isFullChunk());118+ }119+120+public function testIsFullChunkAcrossMultiplePriorityGroups(): void121+ {122+$halfRange = (int) ceil(self::CHUNK_SIZE / 2);123+124+$selectionList = new SelectionList();125+$selectionList->setChunkSize(self::CHUNK_SIZE);126+127+$selectionList->addEntityList(QueuePriorityEnum::HIGH, range(1, $halfRange));128+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, range($halfRange + 1, self::CHUNK_SIZE));129+130+$this->assertTrue($selectionList->isFullChunk());131+ }132+133+public function testSetChunkSizeAffectsIsFullChunk(): void134+ {135+$selectionList = new SelectionList();136+$selectionList->addEntityList(QueuePriorityEnum::NORMAL, [1, 2, 3]);137+138+$selectionList->setChunkSize(3);66$this->assertTrue($selectionList->isFullChunk());139$this->assertTrue($selectionList->isFullChunk());6714068-$halfRange = (int) ceil($chunkSize / 2);141+$selectionList->setChunkSize(50);69-142+$this->assertFalse($selectionList->isFullChunk());70-$notFullList = range(1, $halfRange);71-$selectionList2 = new SelectionList(72- priorityEntityIdList: $notFullList,73- normalEntityIdList: [],74- chunkSize: $chunkSize,75- );76-$this->assertFalse($selectionList2->isFullChunk());77-78-$priorityRange = range(1, $halfRange);79-$normalRange = range($halfRange + 1, $chunkSize);80-81-$selectionList3 = new SelectionList(82- priorityEntityIdList: $priorityRange,83- normalEntityIdList: $normalRange,84- chunkSize: $chunkSize,85- );86-$this->assertTrue($selectionList3->isFullChunk());87 }143 }88}144}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Listen
Gemini said
Gemini said
Here is a precise and concise summary of the code selection, which refactors
SelectionListTest
to accommodate a shift from fixed high/normal priority properties to a more dynamic, enum-driven priority group architecture.
Refactored Priority Handling
Refactored Priority Handling
Dynamic Priority Groups:
Replaces fixed high/normal array parameters with the
QueuePriorityEnum
(
HIGH
,
NORMAL
,
LOW
), allowing entity lists to be managed dynamically by group types.
Merged Registrations:
Validates that multiple
addEntityList()
calls targeting the same priority level properly merge their data instead of overwriting it.
Group Querying:
Tests new methods
getEntityListItemsByGroup()
and
getEntityListGroups()
to retrieve group-specific IDs or an array of active group names (e.g.,
['high', 'normal']
).
Updated State and Count Validations
Updated State and Count Validations
Instantiation:
Tests now instantiate
SelectionList
without initial constructor arguments, using setters and action methods instead.
Empty States:
Updates assertions (
isEmpty()
) to verify state based on whether any entities have been dynamically added, rather than checking pre-defined constructor arrays.
Stale Flags:
Changes from passing a
stale
boolean via the constructor to explicitly triggering a mutable
$selectionList->markStale()
method.
Chunk Capacity Behavior
Chunk Capacity Behavior
Flexible Chunk Sizes:
Introduces a
setChunkSize()
method, replacing the constructor-configured chunk boundary.
Capacity Assertions:
Retains and updates the logic for
isFullChunk()
, ensuring it accurately evaluates capacity when elements span multiple dynamic priority groups or when the chunk limit is altered mid-lifecycle.
Good response
Bad response
Share & export
Copy
Show more options
Copy prompt
You said Are there any issues or potential bolltenecks
You said
Are there any issues or potential bolltenecks
Listen
Show thinking
Gemini said
Gemini said
Based on the test diff you provided, we can infer a few potential issues and architectural bottlenecks in the underlying
SelectionList
implementation. While the tests are well-structured, the behavior they describe hints at a few areas you might want to keep an eye on, particularly for an Elasticsearch (ES) processor queue.
Here are the potential issues and bottlenecks to consider:
1. Array Merging Overhead (Performance)
1. Array Merging Overhead (Performance)
The
testAddEntityListMergesMultipleCallsForSamePriority
test shows that calling
addEntityList()
multiple times for the same priority group merges the arrays.
The Bottleneck:
If the underlying implementation uses
array_merge()
inside a loop to append these IDs, it creates a new array in memory every time it's called. If you are processing thousands of entities and appending them in small batches, this can lead to memory bloat and CPU degradation due to constant array reallocation.
Mitigation:
Ensure the implementation handles batch appends efficiently (e.g., using the spread operator
[...$existing, ...$new]
or appending via references) or groups the arrays before doing a single merge.
2. Lack of Uniqueness/Deduplication (Logic)
2. Lack of Uniqueness/Deduplication (Logic)
None of the tests explicitly verify what happens if duplicate IDs are added. For example, if you call
addEntityList(QueuePriorityEnum::HIGH, [1, 2])
and then
addEntityList(QueuePriorityEnum::HIGH, [2, 3])
.
The Issue:
Does the getter return
[1, 2, 2, 3]
or
[1, 2, 3]
? If duplicates are not filtered out, your ES processor might end up indexing the same entity multiple times in a single chunk, which wastes I/O and processor cycles.
Mitigation:
The underlying class should ideally enforce uniqueness (e.g., using
array_unique()
before resolving the chunk, or using ID keys as associative array keys to naturally prevent duplicates).
3. Memory Consumption with Large Chunks (Scalability)
3. Memory Consumption with Large Chunks (Scalability)
The tests introduce
setChunkSize()
. If this chunk size is configured to be very large (e.g., tens of thousands of IDs to bulk-send to Elasticsearch).
The Bottleneck:
Holding massive arrays of IDs in memory across different priority groups can quickly hit PHP memory limits, especially if this
SelectionList
object is kept alive during a long-running daemon or cron job.
Mitigation:
Monitor memory usage if
CHUNK_SIZE
grows, and ensure the
SelectionList
object is properly destroyed (or garbage collected) after the chunk is processed to free up memory.
4. Type Juggling
4. Type Juggling
In the original code, string IDs were used (
['p1', 'p2']
). In the refactored tests, integer IDs are used (
[1, 2]
).
The Issue:
If your system handles UUIDs (strings) vs. relational DB auto-increments (integers), make sure the underlying implementation uses strict comparisons (
===
) where necessary, especially if deduplicating arrays, to prevent PHP from juggling
'1'
and
1
improperly.
Would you like me to draft a quick test case to check how the class currently handles duplicate IDs, or is deduplication intentionally handled further down your pipeline?
Good response
Bad response
Share & export
Copy
Show more options...
|
55651
|
NULL
|
NULL
|
NULL
|