What was wrongThe product read aria-label, then placeholder, then text, then title, alt or value. It implemented neither aria-labelledby, which is the highest-priority source, nor any host-language label association. So every form field name was the empty string — which killed the form matcher and made the planner tell an agent that a field it can see on the page does not exist. The file that reads those forms opens by saying the rules were in the markup the whole time and nobody was reading them. They were, and it was not. It also took a prefilled input’s value as its name, turning a user’s own text into an affordance, and answered queries from display:none menus and disabled buttons that the measured sweep could never have produced.
What we didThe spec order, with aria-labelledby, label[for], ancestor labels, child recursion so an image-only link takes its name from the alt text, aria-hidden subtrees pruned, value restricted to the input types the spec allows, and presentational elements excluded.
What remainsThis is a parser working on served HTML, not a browser computing a real accessibility tree. It will disagree with one, and the direction of disagreement is not knowable in advance.