Simon,
Great question.
Our first motivation was creating a custom element (with shadow DOM) version of
<input type="date"> and give it a tab order. If you give tabindex=N (N >= 0)
you get the expected behavior (tabbing will focus to its first element), but if you give the
same to your custom element version, the outer frame (shadow host) gets focus first when tabbed,
then goes into the inner focusable nodes second.
Then we noticed "tabindex" attribute has multiplexed meanings in it, one for declaring
the tabbing order and the other for "tab stoppiness" (in HTML spec's terminology,
"tabindex focusable flag"[1]).
Especially for shadow hosts, the decoupling is useful to separately declare the tabbing order
in the document global space while delegating the focusing into its inner focusable nodes.
And yes, the proposed spec does not add/remove anything to/from "tabindex", to keep the
compatibility of the existing web. We expose a fraction of "tabindex" as "tabstop" to
give web authors control which was not available before.
And for <a href>, as you mentioned, it is platform-dependent (e.g. it isn't tab focusable
by default on Safari for Mac, while many others is tab focusable).
For now let's assume <a name=""> is not focusable while <a href=""> is focusable.
In case you consider creating your own anchor element <my-anchor>, which mimics the
behavior, depending on the attribute the element becomes tab focusable or not tab focusable.
Yes, you can control by adding tabindex=0 or tabindex=-1 attribute, but then why <a>
changes the tab focusability without tabindex attribute? This is where tabstop helps.
But as Domenic pointed out in the thread, if "tabStop" *property* (of DOM object) is
reflected to "tabstop" *attribute*, it breaks... I have to consider this case more.
Hope this clarifies your question.
I'll work on making the doc more clearer on these (Domenic's, your, or everyone else's)
questions as well as implementations.