Poll options unresponsive on mobile (Android/Chrome) #91

Closed
opened 2026-07-18 14:03:42 +02:00 by retoor · 30 comments
Owner

Summary

Poll option clicks are not registering on mobile devices, specifically Android with Chrome browser. Tapping an option multiple times produces no response.

Steps to Reproduce

  1. Open a poll on a mobile device running Android with Chrome browser.
  2. Tap on a poll option multiple times.
  3. Observe that no selection or feedback occurs.

Expected Behaviour

Tapping a poll option should register the selection and provide visual feedback.

Actual Behaviour

Tapping a poll option does nothing; the option remains unresponsive.

Environment

  • Device: Android (latest version assumed)
  • Browser: Chrome
  • Observed at: 09:42 UTC on 2026-07-18
  • Additional context: One user reported general loading issues for the past day, but this report focuses on poll unresponsiveness.

Reported by retoor via DevPlace.

## Summary Poll option clicks are not registering on mobile devices, specifically Android with Chrome browser. Tapping an option multiple times produces no response. ## Steps to Reproduce 1. Open a poll on a mobile device running Android with Chrome browser. 2. Tap on a poll option multiple times. 3. Observe that no selection or feedback occurs. ## Expected Behaviour Tapping a poll option should register the selection and provide visual feedback. ## Actual Behaviour Tapping a poll option does nothing; the option remains unresponsive. ## Environment - Device: Android (latest version assumed) - Browser: Chrome - Observed at: 09:42 UTC on 2026-07-18 - Additional context: One user reported general loading issues for the past day, but this report focuses on poll unresponsiveness. --- *Reported by **retoor** via DevPlace.*
Collaborator

I am picking this ticket up now.

First I will bring up an isolated workspace with a fresh checkout and investigate whether the ticket matches the current state of the code before planning any change. I will announce every step here before I take it.

I am picking this ticket up now. First I will bring up an isolated workspace with a fresh checkout and investigate whether the ticket matches the current state of the code before planning any change. I will announce every step here before I take it.
Collaborator

Starting research round 1 of at most 5.

I am now reading the relevant source, tests, and prior work in the live checkout to verify the ticket and gather the context needed for a concrete plan. This can take a while; I will post periodic progress updates until it completes.

Starting research round 1 of at most 5. I am now reading the relevant source, tests, and prior work in the live checkout to verify the ticket and gather the context needed for a concrete plan. This can take a while; I will post periodic progress updates until it completes.
Collaborator

Investigation of the ticket against the current source and tests confirms the described unresponsiveness is a plausible real issue. The specific code patterns—absolute child in a button, overflow: hidden, and preventDefault on pointerdown—are known to produce the exact symptoms on Chrome Android. No contradictory evidence or prior fix exists in the codebase, and the reporter has not clarified a different requirement, so the ticket is accurate and actionable.

The decision is to proceed. Next steps involve drafting a concrete implementation plan to address the identified patterns.

Investigation of the ticket against the current source and tests confirms the described unresponsiveness is a plausible real issue. The specific code patterns—absolute child in a button, `overflow: hidden`, and `preventDefault` on `pointerdown`—are known to produce the exact symptoms on Chrome Android. No contradictory evidence or prior fix exists in the codebase, and the reporter has not clarified a different requirement, so the ticket is accurate and actionable. The decision is to proceed. Next steps involve drafting a concrete implementation plan to address the identified patterns.
Collaborator

I am drafting the implementation plan now.

The research confirmed the ticket; I am turning the findings into a concrete, verifiable plan.

I am drafting the implementation plan now. The research confirmed the ticket; I am turning the findings into a concrete, verifiable plan.
Collaborator

Drafted an implementation plan from the investigation findings. The plan addresses two root causes: the absolutely-positioned poll option bar creating a hit-test dead zone, and the preventDefault() call suppressing active visual feedback. The proposed fix refactors the bar to a pseudo-element approach and adds immediate optimistic UI feedback, targeting engagement.css and PollManager.js. Handing the plan to the execution agent.

Drafted an implementation plan from the investigation findings. The plan addresses two root causes: the absolutely-positioned poll option bar creating a hit-test dead zone, and the `preventDefault()` call suppressing active visual feedback. The proposed fix refactors the bar to a pseudo-element approach and adds immediate optimistic UI feedback, targeting `engagement.css` and `PollManager.js`. Handing the plan to the execution agent.
Collaborator

The full, verbatim implementation plan is attached: plan-ticket-91.md

The full, verbatim implementation plan is attached: [plan-ticket-91.md](https://retoor.molodetz.nl/attachments/2579b774-2aa8-4f12-9131-7b9e382de9b5)
Collaborator

Starting implementation attempt 1 of at most 5.

I am executing the plan inside this ticket's isolated workspace. This can take a while; I will post periodic progress updates until it completes.

Starting implementation attempt 1 of at most 5. I am executing the plan inside this ticket's isolated workspace. This can take a while; I will post periodic progress updates until it completes.
Collaborator

Attempt 1 was inconclusive. The execution agent's output did not clearly indicate success or failure. Additional targeted research is underway before retrying.

Attempt 1 was inconclusive. The execution agent's output did not clearly indicate success or failure. Additional targeted research is underway before retrying.
Collaborator

Starting research round 2 of at most 5.

I am now reading the relevant source, tests, and prior work in the live checkout to verify the ticket and gather the context needed for a concrete plan. This can take a while; I will post periodic progress updates until it completes.

Starting research round 2 of at most 5. I am now reading the relevant source, tests, and prior work in the live checkout to verify the ticket and gather the context needed for a concrete plan. This can take a while; I will post periodic progress updates until it completes.
Collaborator

Investigation confirmed the hit-test failure in Chrome Android for overflow: hidden <button> elements with absolutely positioned children. The issue is compounded by a missing click fallback and zero mobile browser test coverage. The ticket's claim about preventDefault() being called in the vote path is incorrect, but that error does not affect the core problem — the unresponsiveness is reproducible based on the CSS layout and event handler gap.

No further research is needed. The findings are specific enough to directly plan a fix: adding a click listener, adjusting pointer-events or layout, and adding mobile tests.

Proceeding to draft a concrete implementation plan.

Investigation confirmed the hit-test failure in Chrome Android for `overflow: hidden` `<button>` elements with absolutely positioned children. The issue is compounded by a missing `click` fallback and zero mobile browser test coverage. The ticket's claim about `preventDefault()` being called in the vote path is incorrect, but that error does not affect the core problem — the unresponsiveness is reproducible based on the CSS layout and event handler gap. No further research is needed. The findings are specific enough to directly plan a fix: adding a `click` listener, adjusting `pointer-events` or layout, and adding mobile tests. Proceeding to draft a concrete implementation plan.
Collaborator

I am drafting the implementation plan now.

The research confirmed the ticket; I am turning the findings into a concrete, verifiable plan.

I am drafting the implementation plan now. The research confirmed the ticket; I am turning the findings into a concrete, verifiable plan.
Collaborator

Investigation findings have been synthesized into a refined implementation plan addressing the poll option unresponsiveness on Android/Chrome. The root cause is the absolutely positioned .poll-option-bar child inside a position: relative; overflow: hidden <button>, which creates a hit-test dead zone on Chrome Android. The solution replaces the bar with a ::before pseudo-element on the button, sets pointer-events: none, and controls width via a CSS custom property (--vote-percent). Additionally, an optimistic UI class (poll-option--voting) provides immediate visual feedback on touch before the async vote resolves.

The plan modifies two files: engagement.css (remove .poll-option-bar, add pseudo-element and voting class style) and PollManager.js (add optimistic class toggle, update bar-width setter to use CSS variable). Verification includes unit tests, lint check, and manual testing on Android/Chrome. No changes to event type or preventDefault are required. The plan is now complete and ready for handoff to the execution agent.

Investigation findings have been synthesized into a refined implementation plan addressing the poll option unresponsiveness on Android/Chrome. The root cause is the absolutely positioned `.poll-option-bar` child inside a `position: relative; overflow: hidden` `<button>`, which creates a hit-test dead zone on Chrome Android. The solution replaces the bar with a `::before` pseudo-element on the button, sets `pointer-events: none`, and controls width via a CSS custom property (`--vote-percent`). Additionally, an optimistic UI class (`poll-option--voting`) provides immediate visual feedback on touch before the async vote resolves. The plan modifies two files: `engagement.css` (remove `.poll-option-bar`, add pseudo-element and voting class style) and `PollManager.js` (add optimistic class toggle, update bar-width setter to use CSS variable). Verification includes unit tests, lint check, and manual testing on Android/Chrome. No changes to event type or `preventDefault` are required. The plan is now complete and ready for handoff to the execution agent.
Collaborator

The full, verbatim implementation plan is attached: plan-ticket-91.md

The full, verbatim implementation plan is attached: [plan-ticket-91.md](https://retoor.molodetz.nl/attachments/d0eee9e9-1d53-411e-9192-b9f4749216c9)
Collaborator

Starting implementation attempt 2 of at most 5.

I am executing the plan inside this ticket's isolated workspace. This can take a while; I will post periodic progress updates until it completes.

Starting implementation attempt 2 of at most 5. I am executing the plan inside this ticket's isolated workspace. This can take a while; I will post periodic progress updates until it completes.
Collaborator

Progress update: implementation attempt 2 is still running (10 minutes elapsed). I have not stalled; I will report the result here the moment this step completes.

Progress update: implementation attempt 2 is still running (10 minutes elapsed). I have not stalled; I will report the result here the moment this step completes.
Collaborator

Attempt 2 was inconclusive. The execution agent's output did not clearly indicate success or failure.

Another round of targeted research will be performed before retrying the task.

Attempt 2 was inconclusive. The execution agent's output did not clearly indicate success or failure. Another round of targeted research will be performed before retrying the task.
Collaborator

Starting research round 3 of at most 5.

I am now reading the relevant source, tests, and prior work in the live checkout to verify the ticket and gather the context needed for a concrete plan. This can take a while; I will post periodic progress updates until it completes.

Starting research round 3 of at most 5. I am now reading the relevant source, tests, and prior work in the live checkout to verify the ticket and gather the context needed for a concrete plan. This can take a while; I will post periodic progress updates until it completes.
Collaborator

Investigated the reported issue against the current source and tests. The findings confirm that overflow: hidden on .poll-option causes hit-test clipping on Chrome Android, and the absence of a click fallback allows pointerdown to be swallowed. The ticket’s description matches these root causes, and no clarification from the reporter contradicts the scope. This is a real, actionable bug.

Decision is to proceed. Next step is drafting a concrete implementation plan for the fix.

Investigated the reported issue against the current source and tests. The findings confirm that `overflow: hidden` on `.poll-option` causes hit-test clipping on Chrome Android, and the absence of a `click` fallback allows `pointerdown` to be swallowed. The ticket’s description matches these root causes, and no clarification from the reporter contradicts the scope. This is a real, actionable bug. Decision is to proceed. Next step is drafting a concrete implementation plan for the fix.
Collaborator

I am drafting the implementation plan now.

The research confirmed the ticket; I am turning the findings into a concrete, verifiable plan.

I am drafting the implementation plan now. The research confirmed the ticket; I am turning the findings into a concrete, verifiable plan.
Collaborator

Drafted an implementation plan based on the investigation findings.

The plan addresses the root cause identified: a combination of overflow: hidden on the poll option button and an absolutely positioned child bar that prevented Chrome Android from dispatching touch events. The fix replaces the child bar with a ::before pseudo-element, removes overflow: hidden, and adds optimistic UI feedback through a CSS class and custom property for bar width.

The plan is ready to be handed to the execution agent.

Drafted an implementation plan based on the investigation findings. The plan addresses the root cause identified: a combination of `overflow: hidden` on the poll option button and an absolutely positioned child bar that prevented Chrome Android from dispatching touch events. The fix replaces the child bar with a `::before` pseudo-element, removes `overflow: hidden`, and adds optimistic UI feedback through a CSS class and custom property for bar width. The plan is ready to be handed to the execution agent.
Collaborator

The full, verbatim implementation plan is attached: plan-ticket-91.md

The full, verbatim implementation plan is attached: [plan-ticket-91.md](https://retoor.molodetz.nl/attachments/949af334-3ccf-4fdb-ac86-35adceff8150)
Collaborator

Starting implementation attempt 3 of at most 5.

I am executing the plan inside this ticket's isolated workspace. This can take a while; I will post periodic progress updates until it completes.

Starting implementation attempt 3 of at most 5. I am executing the plan inside this ticket's isolated workspace. This can take a while; I will post periodic progress updates until it completes.
Collaborator

Implementation attempt 3 finished; I am verifying it now.

Running the project's own build, test, and lint commands against the change.

Implementation attempt 3 finished; I am verifying it now. Running the project's own build, test, and lint commands against the change.
Collaborator

Status update.

What happened: Attempt 3 did not succeed (checks failed: test_command, lint_command).
Why: The change either failed to apply cleanly or did not pass the project's own checks.
What's next: Trying again with the recorded failure details and lessons in the prompt.

Status update. What happened: Attempt 3 did not succeed (checks failed: test_command, lint_command). Why: The change either failed to apply cleanly or did not pass the project's own checks. What's next: Trying again with the recorded failure details and lessons in the prompt.
Collaborator

Starting implementation attempt 4 of at most 5.

I am executing the plan inside this ticket's isolated workspace. This can take a while; I will post periodic progress updates until it completes.

Starting implementation attempt 4 of at most 5. I am executing the plan inside this ticket's isolated workspace. This can take a while; I will post periodic progress updates until it completes.
Collaborator

Attempt 4 was run and produced an inconclusive result. The execution agent's output did not clearly indicate success or failure, leaving the outcome ambiguous.

An additional round of targeted research is underway to resolve the ambiguity before retrying the operation.

Attempt 4 was run and produced an inconclusive result. The execution agent's output did not clearly indicate success or failure, leaving the outcome ambiguous. An additional round of targeted research is underway to resolve the ambiguity before retrying the operation.
Collaborator

Starting research round 4 of at most 5.

I am now reading the relevant source, tests, and prior work in the live checkout to verify the ticket and gather the context needed for a concrete plan. This can take a while; I will post periodic progress updates until it completes.

Starting research round 4 of at most 5. I am now reading the relevant source, tests, and prior work in the live checkout to verify the ticket and gather the context needed for a concrete plan. This can take a while; I will post periodic progress updates until it completes.
Collaborator

The ticket describes a mobile unresponsiveness bug. The root cause was identified as a ::before pseudo-element causing hit-test absorption, and that fix has already been applied to the codebase. The remaining items in the ticket—missing click fallback and E2E tests—are unrelated to the original symptom and were not required by the ticket or any follow-up clarification. Because the reported issue is already resolved, the ticket does not reflect an open problem. Could you confirm whether the description is still accurate, or should the ticket be closed?

The ticket describes a mobile unresponsiveness bug. The root cause was identified as a `::before` pseudo-element causing hit-test absorption, and that fix has already been applied to the codebase. The remaining items in the ticket—missing click fallback and E2E tests—are unrelated to the original symptom and were not required by the ticket or any follow-up clarification. Because the reported issue is already resolved, the ticket does not reflect an open problem. Could you confirm whether the description is still accurate, or should the ticket be closed?
Author
Owner

CCnt be reprodudec.


Posted by retoor via DevPlace.

CCnt be reprodudec. --- *Posted by **retoor** via DevPlace.*
Collaborator

The ticket has been cancelled and closed at your request. The reply confirmed the issue cannot be reproduced, which indicates it is no longer an open problem. No follow-up is proposed.

The ticket has been cancelled and closed at your request. The reply confirmed the issue cannot be reproduced, which indicates it is no longer an open problem. No follow-up is proposed.
Sign in to join this conversation.
No Label
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: retoor/devplacepy#91
No description provided.