Aman-Mittal opened a new issue, #514:
URL: https://github.com/apache/fineract-backoffice-ui/issues/514

   ## What is being suppressed
   
   `e2e/accessibility.spec.ts` carries three `aria-allowed-attr` entries for 
what is a single upstream defect:
   
   ```ts
   const CLIENT_FORM_BASELINE = new Set([
     'aria-allowed-attr|.has-value >> #ion-sel-*',
     'aria-allowed-attr|.has-placeholder >> #ion-sel-*',
     'aria-allowed-attr|ion-select[name="officeId"] >> #ion-sel-*',
     ...
   ```
   
   plus a fourth in `CREATE_OFFICE_DIALOG_BASELINE`.
   
   They read as four problems. They are one: `ion-select` renders its trigger 
inside the shadow root as a `button` and reflects the host's `required` onto it 
as `aria-required`, which ARIA does not permit on that role. Three fingerprints 
exist only because axe picks the shortest unique selector for the host, and the 
host's state classes move with its value.
   
   Confirmed on `main` at `3c6d7479` with `@ionic/core` 8.8.19, reading the 
shadow root directly on `/clients/create`:
   
   ```json
   [
    { "name": "legalFormId", "required": true, "innerRole": "button",
      "innerAriaRequired": "true", "hostClasses": "... has-value ..." },
    { "name": "officeId",    "required": true, "innerRole": "button",
      "innerAriaRequired": "true", "hostClasses": "... has-placeholder ..." }
   ]
   ```
   
   Same element, same attribute, two different host classes — hence two 
different baseline keys for one bug, and a third for the state where neither 
class applies.
   
   ## Why this is worth tracking rather than leaving
   
   The entries are correct today: this is Ionic's markup, not ours, and there 
is no way to remove the attribute from a shadow root we do not own. But a 
suppression with no ticket behind it becomes permanent by default. Three of 
them for one defect also make the baseline look worse than the app is, which 
pushes the next person to skim the list rather than read it.
   
   More practically: the keys are pinned to axe's selector output, which shifts 
with the host's state classes. A future change to when a placeholder is set — 
or an Ionic change to those class names — silently turns a suppression into 
dead weight while the violation reappears under a fourth fingerprint.
   
   ## What to do
   
   1. Report it upstream against `ionic-team/ionic-framework` if it is not 
already open, and link the issue here. The fix belongs there: either drop 
`aria-required` from the inner button, or give that element a role that permits 
it (`combobox` is what the trigger actually behaves as).
   2. Once it is fixed and the version is bumped, delete all four entries 
together and confirm the suite still passes.
   
   Until then, collapsing the three client-form keys behind one shared constant 
with a single comment would at least make the count honest about how many 
defects there are.
   
   ## Environment
   
   `main` at `3c6d7479`, `@ionic/angular` / `@ionic/core` 8.8.19, Chromium via 
Playwright, against the local docker stack.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to