Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow intent attribute on content mathml #289

Closed
davidcarlisle opened this issue Mar 13, 2022 · 53 comments
Closed

Allow intent attribute on content mathml #289

davidcarlisle opened this issue Mar 13, 2022 · 53 comments
Labels
intent Issues involving the proposed "intent" attr

Comments

@davidcarlisle
Copy link
Collaborator

In a PR comment

#286 (comment)

@brucemiller asks if intent= should be allowed in content,

I'm tempted to say it should, basically be allowed everywhere cd is allowed (including in the grammar for strict content)

In MathML2 we had inline in the spec an "openmath-light" appendix giving some kind of semantic meaning to each content element. The "Content Element Definitions" appendix: https://www.w3.org/TR/MathML2/appendixc.html

Maintaining that was a lot of work and being in the published rec meant it wasn't extensible once published.

So in MathML3 we "outsourced" this to OpenMath which was under active (funded) development at the time and provided a general framework for recording these sorts of definitions. So in MathML3 the meaning of Content MathML was expressed by rewriting to the simplified strict grammar and then linking each csymbol with an OpenMath symbol.

For intent we will need something similar: we have the basic intent grammar which ultimately requires giving meaning to the terminal literals, currently these are by reference to the spreadsheet
https://docs.google.com/spreadsheets/d/1EsWou1K5nxBdLPvQapdoA9h-s8lg_qjn8fJH64g9izQ/edit?usp=sharing
But we have a plan to set up some more structured view of these.

We could use OpenMath again to ground intent terms, but I suspect we will want a lighter weight system that is easier to update (or we could use wikipdia or whatever)

Once that system is in place I don't see any reason not to allow it on csymbol.

Taking the canonical superscript-meaning-power example:

If <msup intent="power" references whatever dictionary we have to say this means power, then it would make sense for
<apply><csymbol intent="power">power</csymbol> to reference the same thing rather than (as now) Strict content mathml requiring <apply><csymbol cd="arith1" name="power">power</csymbol> with some additional specificaion somewhere that relates the intent attribute dictionary to the core openmath cd group that covers content mathml.

So... I'd propose we allow intent wherever we allow cd to allow the use of this alternative mechanism to ground the meaning of content mathml.

We could take the further step of changing the rewrite rules to use intent rather than cd so <apply><sin/> rewrites to <apply><csymbol intent="sin">sin</csymbol> raher than <apply><csymbol cd="transc1" name="sin">sin</csymbol> which would bring things back in-house and remove the normative dependency on OpenMath, but we don't have to decide to do that before deciding whether to allow intent.

@dginev
Copy link
Contributor

dginev commented Mar 13, 2022

Unless you're asking to expose Content MathML trees to AT, so that they can be read for accessibility in a way different than the underlying tree suggests, intent is probably the wrong vehicle to use.

It is certainly not meant as an OpenMath replacement at the moment. And unless you are going for a replacement, I wouldn't introduce yet another mechanism as a parallel option - we've had objections to that in the meeting (by Moritz, and I'll join him). A big reason we got where we did with the intent work is having the group consensus to keep the Content chapter "frozen", or at least functionally frozen, while we get the accessibility considerations sorted out.

Side-note: I'm a bit confused by <csymbol cd="arith1" name="power">power</csymbol>. I think MathML 3 recommends <csymbol cd="arith1">power</csymbol> and if I am reading 4.2.3 right, name isn't allowed on csymbol? Although at least one example in 4.3.4.4 uses the name attribute at <csymbol cd="set1" name="set"/>. Or is that outdated?

All of this said, my opinion is that we should keep intent exclusively to presentation trees at the moment, and make sure accessibility works as one application. I would personally like to see the group do a lot more preparatory/exploratory work if we are to build an OpenMath replacement in-house.

@davidcarlisle
Copy link
Collaborator Author

@dginev name is allowed on csymbol so you can do <csymbol name="plus">+</csymbol> it isn't needed in the power example as it defaults to the content but I thought it would be clearer to be explicit (but perhaps not:-)

The empty case looks like a typo in mathml3 spec there is a reference

constructed using the <csymbol cd="set1" name="set"/> symbol.

with an unfortunately empty csymbol, although it is describing the usage in the immediately following mathml fragment where the content is set as expected, not empty.

As for allowing intent on csymbol, I could easily be persuaded not to (especially not in the first iteration) but I think if we don't we will eventually have to answer the question about how

<apply><sin/><ci>x</ci>

relates to

<mrow><mi intent="sin">sin</mi><mo>&af;</mo><mi>x</mi></mrow>

Maybe it's OK to say the first is sin x with sin function as described in OpenMath transc1 CD and the second is sin x with sin as described in (wherever we say intent is described) and leave it to the reader to decide if they are at all the same thing,
But I wonder if we can do more.

@dginev
Copy link
Contributor

dginev commented Mar 13, 2022

@davidcarlisle interesting about name being allowed together with direct text content in that element. I guess this comes into play for a use-case I haven't myself needed/explored namely 4.2.3.3 Rendering Symbols, where csymbol is enabled to be a fully fledged "presentation" element, on top of its content purpose.

It is difficult to word this in the way I want it to sound, but here is a try:

The mixed nature of the Presentation tree (which is polluted/enhanced with content bits) and the Content tree (which is polluted/enhanced with presentation bits) may be worth reopening at the next iteration of spec work (5th MathML) and cleaned up to a nearly unrecognizable state. The mixed responsibility/capability between the chapters makes it look as if we have two competing specs at times. So we should either integrate them into one cohesive tree, or really disentangle into two (or more) trees.

At least that's a direction of my current thinking. Which is also why I'd rather keep the Content chapter frozen until such an opportune time comes up.


Putting my pragmatic hat back on, I had offered to Moritz that we can view the intent lists in our spreadsheets as a custom "content dictionary" for now, until we have something better to do with them. So, in your example:

<mi intent="sin" id="ex1">sin</mi>

can be seen as

<csymbol cd="intent" xref="ex1">sin</csymbol>

where I added the cross-references for spice. Instead of adding a new attribute to Content MathML, we might as well try to use it as intended and add a new cd.

@davidcarlisle
Copy link
Collaborator Author

@dginev yes actually having a "virtual" CD which maps to whatever intent is mapping to would I think answer the mapping question we (at OpenMath) have had similar dynamic Cds before eg cds that meant "whatever function I just defined in gap" (or maple, as the case may be) .

I suspect this issue somehow won't go away but I'm not pushing too hard to actually change too much at this stage. Not least our current charter https://www.w3.org/Math/Documents/Charter2021.html says

1.3 Out of Scope

Significant changes to Content MathML. These will be considered at a later time after gaining experience and feedback from proposed additions to enhance accessibility and searchability in Presentation MathML.

Which probably means we shouldn't be undercutting the foundational basis for Content MathML in this iteration:-)

@brucemiller
Copy link
Contributor

I should have been more explicit in my "suggestion". I was viewing @intent as purely an accessibility feature. And I was recalling the frequent point made during various discussions that although content resolves ambiguities, the desired speech is only slightly easier to derive from the content than the presentation: In particular that it is not equivalent to the content.

If that is the case, that the accessibility information is different from the content information, then it is conceivable that someone would want to add accessibility information to content as well as presentation. Clearly that's a much less important usecase. But what could be the harm in allowing it, I thought? Little did I know :>

I definitely did not intend the suggestion as in any way replacing or superseding anything in Content MathML.

We may eventually want to develop a lighter-weight alternative to OpenMath CDs; and it may even end up desirable to use the same "dictionary" mechanisms (but likely not the same dictionaries) that we settle on for intent. But unless we're able to design intent from the start to handle both, I don't think we should be even hinting at double duty.

@davidcarlisle
Copy link
Collaborator Author

davidcarlisle commented Mar 13, 2022

@brucemiller ah I see, but even though intent is being positioned mostly for accessibility I can't see how we could allow it on content without it effectively ending up as an alternative to the CD reference mechanism. I would guess though his issue ends up being a collecting ground for ideas that come up and storing them for possible consideration in mathml.next.

@NSoiffer
Copy link
Contributor

I worry that if intent is added, then it will be viewed as an alternative or maybe even a conflict with the cd reference, especially if we ground intent in pointing off to wikidata or some other definition. Unless we are very explicit that intent is meant only for AT, I strongly suggest holding off on allowing it on content MathML until we have gained much more experience with it.

@davidcarlisle
Copy link
Collaborator Author

OK let's park this, close or invent a "defer for consideration at a future version" label?

@brucemiller
Copy link
Contributor

I agree, whatever potential benefit isn't worth the almost guaranteed confusion.

@davidcarlisle
Copy link
Collaborator Author

At the call on 2022-03-24 it was clear that there were still discussions around intent on Content, so I'm re-opening this so that any new discussion doesn't get separated from earlier comments


Support for intent in Content MathML could be imagined at several levels.

  1. Refactor strict Content to be grounded by the collection of intent values rather than OpenMath

  2. Keep the OpenMath grounding, but fully specify how intent=abc on a content element affects vocal renderings

  3. Allow intent attribute on content but don't specify its behaviour just that mappings from content to presentation may use it to influence the intent on the result

  4. Don't allow the attribute, making it valid on presentation only.


The issue was opened floating an idea around level 1, and it was agreed that for timing and charter reasons if nothing else, such a radical refactoring of Content MathML was out of scope, but re-opening to allow other options to be considered.

One issue with level 2 is that (presumably) intent on presentation will be defined to affect the accessibility tree, but (currently at least?) Content MathML is dropped from the A.T.

Level 3 may seem quite weak for a specification but possibly puts the accessibility hints on Content in the same status as the general visual presentation, being explicitly system specific, with just sample non-normative renderings given,

Level 4 is a coherent option and there was some support for it on the last call especially along the grounds that we should not experiment in the specification, just specify what has been proved to be interoperable. But I worry that making it invalid is preventing experimentation anywhere.

@dginev
Copy link
Contributor

dginev commented May 5, 2022

But I worry that making it invalid is preventing experimentation anywhere.

I don't understand this worry, because it doesn't reflect any development lifecycle I am currently aware of. Experimentation has been/is possible by using data-* attributes in HTML.

Experimentation is also possible with a validator, if one forks and modifies the official schema and allows the attribute - then validating against this modified schema. I would imagine XML-capable vendors are well-accustomed to such uses in private. And they can re-serialize as data-intent in public.

What is the role of the MathML specification here? To give room to experiments, or to standardize "best practice", production use in accessibility? I would like it to be the latter, because the former is already possible using different avenues.

If we lack confidence that we currently can standardize a good method for improving accessibility, in my mind it would be better to defer the Intent component to MathML 5, rather than to offer a solution that leads to confusing and non-standard uses. In my personal opinion, such choices will hurt adoption (noticeably) more than it will benefit experimentation.

It would also be in better sync with the charter to avoid adding new attributes to Content MathML. It sends a clearer message for us to keep Content MathML substantively frozen, until a more overarching revision becomes possible.

It is possible, inevitable even, that I am quite ignorant to expectations for using MathML by stakeholders that are not openly represented in the current working group. I would love to learn more specifics about those workflows, so that we can have an opportunity to make an informed decision.

@davidcarlisle
Copy link
Collaborator Author

What is the role of the MathML specification here? To give room to experiments, or to standardize "best practice",

Some specifications may just be standardising best practice but not I think specifications of languages. If you look at a specification of XPath or XSLT (or MathML 1) then it is defining the language from scratch and there is no practice (best or otherwise) prior to the publication of the spec.

As MathML4 is a 4th iteration there is some component of standardising best practice MathML use as observed from previous iterations but that is not the only focus. It is still the specification of a new iteration of the language and we are chartered to add something equivalent to the intent attribute for which there is no existing practice at all, so best practice is not an issue.

There are pros and cons to adding intent to content elements but lack of existing use to determine best practice is not an issue as that applies to any new feature, including adding intent to presentation.

Currently I am leaning towards "level 3" in #289 (comment) : That is allow intent on content but not mandate any behaviour, just suggest it may be used in content-to-presentation transforms. I think it certainly could be used to good effect to control transformations from content to presentation+intent which otherwise will always end up using a default intent (or equivalently no intent at all)

@polx
Copy link

polx commented May 5, 2022

I strongly agree with David's last comment: Intents do not have an existing best-practice at all. Allowing intent on content-MathML without specifying a behaviour is a reasonable agreement which will allow room to explore and create practice and then best-practices.

I vaguely imagine that content-MathML with intent may bring audio-guided interactive navigation of expressions at a more synthetic level than what can be done on presentation-MathML, for example. That's just a 2 minutes idea.

I also do not think that adding intents to content-MathML is significantly changing MathML-content.

@dginev
Copy link
Contributor

dginev commented May 5, 2022

David and Paul,

Please consider that when I wrote my original comment I was aware that we are introducing a new attribute without existing practice. And that my sentences:

What is the role of the MathML specification here? To give room to experiments, or to standardize "best practice", production use in accessibility?

were pointed to the future, implying that the WG will standardize (= create + recommend) a novel use of the intent attribute.

I believe you don't need me to point to the reasons for the creation of "MathML Core", to demonstrate the issues you encounter with undefined behavior. I also provided my current technical understanding as to why the "experimentation" argument is not a convincing one, to my reading. I was genuine in my request for further information in that vein.

I appreciate many have strong preferences here, but we'll have to resolve our disagreements by entering this question in detail rather than in passing. Maybe this is the type of discussion we can productively spend a weekly meeting slot on.

Did XSLT allow attributes on nodes "but not mandate any behaviour, just suggest it may be used in [certain] transforms"? This is also interesting and an example would help me here as well, so as to appreciate this aspect of evolving specifications.

I had a much longer statement prepared, but I think it will be better received in a meeting.

@davidcarlisle
Copy link
Collaborator Author

davidcarlisle commented May 5, 2022

@dginev  I think you are reading too much in to undefined behaviour here. The intent attribute is part of presentation, (mainly aimed at non visual presentations, but still) and Content MathML by design  has a presentation form that is system-specific and not mandated, so if intent is added to it, then more or less necessarily it will have a system-specific behaviour. This is not just a failure to specify on the part of the WG to be corrected later. Chapter 4 gives some possible renderings of Content MathML to Presentation MathML, and once we have specified intent, these sample presentations can use intent for better accessibility (#284). Showing some sample presentations using intent that take a source being content mathml using intent would be in the same spirit.

@polx
Copy link

polx commented May 6, 2022

@dginev:

Please consider that when I wrote my original comment I was aware that we are
introducing a new attribute without existing practice. And that my sentences:

What is the role of the MathML specification here? To give room to experiments,
or to standardize "best practice", production use in accessibility?

were pointed to the future, implying that the WG will standardize (= create +
recommend) a novel use of the intent attribute.

That would imply that the WG is in a position to introduce best practice. That is, I feel, a far far utopic goal. We do have expertise to carry the perspective, the language spec and early implementations but for the enabled practice to become best, we can only wait for the world to receive, taste, and evaluate.

I believe you don't need me to point to the reasons for the creation of "MathML Core", to demonstrate the issues you encounter with undefined behavior.

No you don't. The worlds are totally different.
In MathML-core, the goal is to mainstream a common ground for a single function: rendering MathML encoded in web-pages.
In MathML4, there's a whole lot more functions and many of them cannot be specified in full. This includes the computability of MathML-content or the fine-grained exchanges of clipboards. To me, it will include intents: We cannot specify them in full because we don't know yet the best practice.

As far as MathML-content goes, the low-spread of its attested use makes it also a very modest target and, as OpenMath has been, a more common carrier of research than of widespread use. Studying best practice there (or in intents) requires more practice and more research.

@davidcarlisle davidcarlisle added the intent Issues involving the proposed "intent" attr label May 7, 2022
@davidcarlisle
Copy link
Collaborator Author

@dginev you argued in the call that declaring intent to be valid on content elements would be a major change to content mathml, possibly conflicting with the charter of the group.

This really isn' t the case, the situation is very similar to aria attributes for which you took the opposite approach and demonstrated them on Content MathML. Aria was never valid MathML 3, the draft MathML4 schema allows them in MathML Core, which inherit into Presentation MathML, but don't currently make them valid on Content MathML.
Whether the aria attributes on presentation have an effect or not is unrelated to validity, adding these attributes to the Presentation, or potentially Content schema is mosly a matter of internal consistency, we should ensure any examples we use are valid.

We could decide to make aria attributes also valid on Content MathML (and probably should). If you use aria attributes on Content MathML in a browser whether they have an effect will depend on the polyfill being used to process the MathML. (my c2p xsl stylesheet and related javascript version would discard them, I'm not sure aria existed when that was originally written). The MathML spec can not constrain that polyfill, all it can do is declare whether or not an aria-label attribute is valid MathML. This is consistent with the general nature of the full spec which (unlike core) is primarily a specification of the format, not of behaviour.

The same is true of intent. If you use intent on presentation elements not in core their effect in a browser will depend on the polyfill in use, if mfenced is replaced by mrow+mo for the delimiters, the polyfill may or may not construct an intent for the mrow using an intent specified on the mfenced. How that polyfill works is not specified here, what we can specify is whether the document is valid if it has intent on mfenced. The same is true on an mrow with intent that is re-written to an mtable construct by a linebreaking polyfill.

The proposal for intent would be simply be to add it to the global attributes (rather than the common presentation attributes as now) so it is valid. We could say nothing at all about its effect on content mathml, or we could say in the spec explicitly that it is valid and may be used as input to any transformations to presentation mathml, so affecting accessibility and audio renderings of that presentation.

So the suggested change is one line of schema and a most a couple of sentences in the spec. This is not a "major change" and it is essentially just about internal spec consistency. What we say here (just as your demonstration of aria shows) depends on things that are out of scope for the mathml spec. But some things are in scope and in our control, we can ensure that any examples of aria or intent that we want to demonstrate are valid MathML 4.

@davidfarmer
Copy link
Contributor

davidfarmer commented May 13, 2022 via email

@dginev
Copy link
Contributor

dginev commented May 13, 2022

I have already offered my full perspective in the comments here and in yesterday's meeting.

For context: the last comment by @davidcarlisle addressed my gist with experimental markup for binomials, which aimed to illustrate:

  1. that experimentation is already possible
  2. that the intent attribute is largely redundant in the Content branch as it encodes the same operator tree
  3. that the missing information in the Content branch mirrors the available information in the Presentation branch (what I quickly termed a notation attribute).
  4. that narration overrides via aria-label are independently interesting to consider

In my eyes, specifying and recommending AT behavior over Content MathML is a major change to Content MathML.

The charter makes the sequence of events clear, emphasis mine:

1.3. Out of Scope
Significant changes to Content MathML. These will be considered at a later time after gaining experience and feedback from proposed additions to enhance accessibility and searchability in Presentation MathML.

For me to hold this view, I consider the attribute being allowed on the tree a very minor step towards addressing the use case of accessible narration over Content trees. So minor as to be misleading, without having done the rest of the prototyping work involved.

That said, adding a separate attribute to Content with the singular purpose of being copied into an intent attribute in a Presentation transformation is a reasonable suggestion to consider. I agree with David Farmer's remarks above. Given that these behaviors were described earlier as "system-specific", I would have thought that an application-specific use of data-intent and data-arg attributes would have been appropriate, but maybe standard names have additional utility? Examples of using these productively would be quite helpful.

@davidcarlisle
Copy link
Collaborator Author

As @davidfarmer says, if the content mathml is unambiguous, the pronunciation can probably be deduced without intent, so it's probably most useful to help with less then perfect content MathML

<apply><ci>Ai</ci><ci>z</ci></apply>

You might say it should be a csymbol pointing at a to-be-produced Airy function OpenMath CD, or you might say it should have a definitionURL attribute pointing at https://dlmf.nist.gov/9.1 either of which would be good, but may require too much domain knowledge of whoever is remediating the pronunciation of this, and (perhaps) adding

<apply><ci intent="Airy">Ai</ci><ci>z</ci>

might help (alhough I think Ai(z) gets pronounced as A-eye of z as often as not, but ignoring that for now)

data-intent is of course valid already (and I could use it in an updated ctop transformation just as easily as intent. But data- attributes should not be used in such a way: they are introduced in the HTML spec that says

Custom data attributes are intended to store custom data, state, annotations, and similar, private to the page or application, for which there are no more appropriate attributes or elements.

These attributes are not intended for use by software that is not known to the administrators of the site that uses the attributes. For generic extensions that are to be used by multiple independent tools, either this specification should be extended to provide the feature explicitly, or a technology like microdata should be used (with a standardized vocabulary).

So I can experiment with data-intent locally but I should not generate a corpus of documents using it if I do not know the consuming application. The paragraph above is saying that rather than use data-intent we should extend mathml to have a defined attribute.

Really I see no downsides to this, and I don't accept that this is a major change with charter implications.

You didn't answer my implied question about the schema allowing Aria. I didn't consider that a major change either, So I did not raise as a separate issue at time it just got done as part of a first sketch draft of schemas for mathml4 and no one objected. I would have added intent at the time as well but didn't as the attribute names were not decided back then (in the CG prior this WG). But I could of course make Aria invalid if that is the consensus of the group.

@dginev
Copy link
Contributor

dginev commented May 13, 2022

You didn't answer my implied question about the schema allowing Aria.

I would have thought it is implied as covered in my sentence:

In my eyes, specifying and recommending AT behavior over Content MathML is a major change to Content MathML.

I don't think we should spend any time working on this topic during this iteration, and already feel that we've spent too much time on whether to address it. There is explicit language in the charter to avoid this entire discussion. If I suspected it would be interpreted so freely, I would have spoken up back when the "Out of Scope" text got written.

@davidcarlisle
Copy link
Collaborator Author

I don't see that the charter is being interpreted "freely". We are not talking about any change in required behaviour of implementations, just discussing whether usage that may already be used is marked as valid or invalid. Validity is of course an important part of the specification but it makes no difference to most people and most applications. Witness the percentage of valid html pages on the web.

The charter isn't relevant to the discussion at all, it lays the broad framework for the working group, not intended to micro-manage the language design down to individual attributes.

My sense of thursday's call was that you were the only one to speak against this, alhough of course most WG members haven't said either way so we'll see what the Group consensus is.

Actually I have some more general issues about which attributes should or should not be global (specifically attributes that are global in core such as onclick) currently the schema makes them valid in some places and not valid in others, but I'm not entirely confident I made the right choices in all cases (and the spec says nothing yet) When I've done with the current section 4.3 edits I was planning to raise an issue on best way to structure attribute use, this is likely to come up there. I don't have a coherent version of that issue to post yet though.

@brucemiller
Copy link
Contributor

brucemiller commented May 13, 2022 via email

@dginev
Copy link
Contributor

dginev commented May 16, 2022

One more try for me to reach @davidcarlisle ...

data-intent is of course valid already (and I could use it in an updated ctop transformation just as easily as intent. But data- attributes should not be used in such a way: they are introduced in the HTML spec that says

Custom data attributes are intended to store custom data, state, annotations, and similar, private to the page or application, for which there are no more appropriate attributes or elements.

Exactly, which is where system-specific and not mandated presentation extraction from Content MathML falls into.

These attributes are not intended for use by software that is not known to the administrators of the site that uses the attributes.

Again, this is consistent with system-specific, the same vendor is in control of all pieces of their pipeline.

So I can experiment with data-intent locally but I should not generate a corpus of documents using it if I do not know the consuming application.

Yes. You would need a standard solution instead of a system-specific one in that case. If you owned the consuming application a system-specific behavior would be OK.

The paragraph above is saying that rather than use data-intent we should extend mathml to have a defined attribute.

The paragraph above is stating exactly what it stated - this is your added-value interpretation of it. I disagree.

Really I see no downsides to this, and I don't accept that this is a major change with charter implications.

The downsides are both technical and strategic and I see them clearly.
You are welcome to refuse to see them, but you will not be able to avoid them, irrespective. The vehemence of my protests here is the start of the coming issues for MathML 4, not the end.

  1. The clearcut definition of intent behavior on Presentation trees gets diluted with mixed messaging of a global definition that also covers content trees. This will confuse adopters and group members alike - I'm first to testify.
  2. Strategically, we violate the charter - and you flip a group member (me) from a proponent of the Intent work to a detractor.
    • side-note: had the group had serious interest in this at the onset (summer 2020) maybe the group would have considered a more generic attribute name such as a variation on alt. The intent name was clearly geared to the Presentation branch, and so was all prototyping work that followed.
    • I was there for the charter writing. I used the word "frozen" consistently in discussing Content MathML, and I recall accepting the addition of "significant" to "significant changes" with the understanding of correcting minor details. Had I known group members are capable of seeing introducing a new feature to Content MathML as an "insignificant change", I would have also protested that word.
  3. Worst of all, we lack time and available resources to properly prototype the behavior on the Content branch. Which guarantees an "afterthought" specification of intent in those cases, which will not solve any real problems. It will cause new ones.
  4. Lastly, an outcome where intent is global and ill-defined is a public relations liability to MathML 4, which will be easily exploited by MathML skeptics, additionally hurting potential adoption.

The initial closing of this issue had 4 voices that understood the underlying threats of departing on this route. What has transpired since is really unfortunate. Luckily you still have my voice trying to alert the group to what it's about to do. It's a strategic mistake. Please avoid it.

@davidcarlisle
Copy link
Collaborator Author

The paragraph above is stating exactly what it stated - this is your added-value interpretation of it. I disagree.

I was referring to "either this specification should be extended to provide the feature explicitly" which is an explicit option suggesting that the relevant specification (mathml here) be extended. Not any "value-added" addition that I had added.
You are arguing we shouldn't take that option which is a reasonable position to take, but still my quote of the HTML spec stands,

Lastly, an outcome where intent is global and ill-defined

Given that Content MathML systems should provide a presentation but that presentation is system specific and not defined, it is hard to imagine how you envisage specifying the behaviour of intent (or any other attribute) more specifically than that.

The clearcut definition of intent behavior on Presentation trees

Actually (although we do need to fix this) we don't have a clearcut definition at all yet. We don't have a grammar for intent and I think that intent on non core presentation elements have almost exactly the same issues as intent on content mathml elements, as to a browser they are the same thing: unknown elements in the mathml namespace that only have any rendering if they are converted to core mathml via javascript.

So we have to decide if intent on mfenced or mstack has an intrinsic meaning (and a polyfill to core should preserve that) or if intent has no implied meaning on non core elements and only has an effect if it is copied by the polyfill on to intent attributes on core elements that the affect the accessibility tree. (I'm not sure we can answer that until we have a clearer spec of how intent does affect the accessibility tree, certainly I have no answer currently)

@dginev
Copy link
Contributor

dginev commented May 17, 2022

I hope that we agree on all of the above and so the only point of disagreement is whether making (3) valid with system specific behaviour is better or worse than making it invalid and so undefined behaviour.

Yes, this is where we are at.

"intent on Content" is also the only discussion that is in the scope of the specific github issue ( #289 ). Discussions about intent on Presentation MathML Full, finalized grammar, etc. should be taken elsewhere. As you suggest - the design isn't finalized in any of the directions of work.

[redacted]

@davidcarlisle
Copy link
Collaborator Author

Yes, this is where we are at.

Ah good, Because I really thought I wasn't understanding your comments at all, so glad I got that far.

"intent on Content" is also the only discussion that is in the scope of the specific github issue ( #289 ). Discussions about intent on Presentation MathML Full, finalized grammar, etc. should be taken elsewhere. As you suggest - the design isn't finalized in any of the directions of work.

Yes sure, discussions for those things should be elsewhere but we can't decide each part of the specification in isolation, so happy to park this issue and come back to it later when things are clearer. If for example we decide that intent should only be specified on elements with specified rendering, so Core in a browser, and intent should be invalid on mfenced that decision would inform the decision here (and it would make sense to do the same) If on the other hand we make intent valid on non core elements with no native browser rendering, I'd say (but you not unreasonably disagree) that it's logical to do the same with Content.

How we resolve here will inform my further participation with the group's Intent work, so we might as well decide if we have a lasting disagreement as early as we can.

I certainly hope that you continue to contribute, Working Group consensus can't always mean unanimous agreement, but I don't think it makes sense to ask for consensus on this issue until the specification of intent generally is more than just a couple of sketched paragraphs. It may be that when things are clearer, the consensus will be to agree with you and not to make this valid on Content. If so, so be it.
 
To help people consider the issues I made the above example live at

https://davidcarlisle.github.io/mathml/intent.html

In a MathML-Core enabled browser that renders as three (x,y) each with an intent of pair(x,y) which will have an effect so long as intent on <mrow> has an effect (which of course it does not, currently)

That file will work in that way whatever we decide here, nothing affects the browser behaviour, the only question is whether the input is useful enough to be considered valid, or if it should be considered invalid.

@polx
Copy link

polx commented May 17, 2022

Hey @dginev, I think that making this discussion a hard case is what we disagree on: For me (and I think a few others) it is far less work to accept not prohibiting intent on content instead of resolving the question weather it can bring best or worst practice.

Does it help interpret our attitudes?
At least i hope it helps interpreting the fact that we find it ok to park this issue.

@dginev
Copy link
Contributor

dginev commented May 17, 2022

Thank you @polx . I appreciate and accept that bridge perspective. Let cooler heads prevail and park here then. I hope I can find a common path forward together with everyone.

I have cleaned up some of my previous comments in an attempt to undo undeserved provocation.

@davidcarlisle
Copy link
Collaborator Author

I can still see no rationale for not allowing intent on all of MathML. Making it valid on presentation but not content assumes I think there are two separate languages involved, but that has never been the case, it is one combined language with elements that can be mixed freely.

<mfrac intent="divide($a,$b)">
  <apply arg="a"><sin/><ci>x</ci></apply>
  <apply arg="b"><cos/><ci>x</ci></apply>
 </mfrac>

For example would be invalid, which would mean we could not describe the default intent on mfrac (or any element) as

divide($a,$b) where the children have arg=a and arg=b

as there would be valid children of mfrac that do not take arg= I see no advantage of that, or of forcing the document to have

 <mfrac intent="divide($a,$b)">
  <mrow arg="a"><apply><sin/><ci>x</ci></apply></mrow>
  <mrow arg="b"><apply><cos/><ci>x</ci></apply></mrow>
 </mfrac>

intent is mainly targeted at improving speech from a browser, and to a browser, <apply> is no different to <mfenced> or <mstack> : an unknown element in the MathML namespace. Anything a javascript polyfill can do to make intent useful on <mstack> could be done on <apply>

Allowing intent on all MathML elements makes the language more consistent and easier to document and avoids producers having to add spurious extra verbose markup to work around an arbitrary restriction.

of course the particular example above could be addressed by allowing arg but not intent but that would be an even more arbitrary constraint.

@dginev
Copy link
Contributor

dginev commented Aug 4, 2022

Please update the charter language before you vote on this.

You may have a classic perspective where there is one language involved, but the charter clearly has my perspective written into the out-of-scope text:

(will avoid repeating my comment in full) quote:

1.3. Out of Scope
Significant changes to Content MathML. These will be considered at a later time after gaining experience and feedback from proposed additions to enhance accessibility and searchability in Presentation MathML.

The additions are clearly scoped to the Presentation branch. Mixtures of Presentation and Content would appear to be covered insofar as the Content is used as-is from MathML 3.

The group may have reached consensus to not follow the chartered bounds, so please revise the charter text.

@davidcarlisle You are facing an "an arbitrary restriction", I am facing a "gratuitous extension". An extension that goes against the charter scope as I understand it and is offered with no prototyping work behind it. I am also skeptical that advertising this use of mixed presentation+content MathML is well-positioned moving forward.

Maybe my line of thinking is leaning in a direction for a "Content MathML Core" variant that is yet to be discussed, prototyped and evaluated. One I had hoped we could examine in the fifth iteration of the Math WG work rather than now. It could inch closer to enhanced support in browsers, while keeping full compatibility with MathML Core. But, considering the history of MathML Core itself, I can see how there are other paths to approach such a task.

@davidcarlisle
Copy link
Collaborator Author

davidcarlisle commented Aug 4, 2022

@dginev As discussed above, the charter has absolutely no bearing on this issue. If you want to discuss technical proposals, then fine but really I have said all that can be said about the charter here. Adding a global attribute to MathML can in no way be considered a significant change to content mathml, it wouldn't need any changes chapter four or the mathml-content schema, just chapter 2 and the common schema, which are the natural places for global attributes. But in any case legal wordsmithing around the charter is a bizarre way to attempt to shut down technical discussion.

@NSoiffer
Copy link
Contributor

NSoiffer commented Aug 7, 2022

To summarize my current feelings:

  1. I don't see adding intent to content as being a significant change to content MathML. Hence I don't see it as being out scope. Also, Brian or Bert once pointed out that charters can be modified if needed. In other words, the charter focuses the discussion but doesn't end it.
  2. I still worry about people viewing intent as an alternative to content semantics via the cd, but I think the language we have has focused on AT. Any mention of intent on content elements should also say this is for speech, not semantics.
  3. Like @dginev, I'm still concerned about possible unforeseen complications of allowing it. But @davidcarlisle points out some unforeseen complications (at least to me) of disallowing it (i.e., content is allowed inside of presentation, so how does intent interact with that?)

I think we should explore what intent on content leads us to. I thought maybe someone had discussed what intent should do when it is on the various content elements, but I didn't see it in the thread so far. My apologies if I missed it. With the caveat that my content MathML knowledge is rusty, here's an initial attempt...

I see two ways content can be used with intent:

  1. Content MathML is being consumed directly by AT (doesn't happen now, but one can imagine it might in the future)
  2. Content MathML is converted to presentation MathML and this is consumed by AT.

Dispensing with some easier(?) content element/intent interactions first:

  • cbytes is not particularly interesting for intent and likely can be treated as a leaf that speaks any intent specified on it.
  • cerror takes content elements for children and so other likely follows whatever rules there are for intent on other content. If converted to presentation MathML, it has a straightforward analog in merror.
  • share acts as a copy of the referenced id. This potentially presents a problem if intent is set on it because the rec says "When building a MathML expression tree, the share element is equivalent to a copy of the MathML expression tree referenced by the src attribute." This seems to say that share is not in any actual (or virtual) MathML tree after processing. If the share doesn't have intent set but does have args, then those would be duplicated which is likely wrong (we probably need to say what happens when there are multple args with the same value). I think the simple solution is to simply say intent on share will be ignored because of this equivalence and that args that aren't inside of an intent are illegal. Any other solution would require modification of what the spec currently says about share.
  • the content leaves (cn, cysmbol, ci, and cs) can have presentation children. Any use of intent is either going to be a string (this is the literal to say), or defer to the presentation children via an "argref". Neither case presents a problem.
  • the predefined names like plus are treated similarly to csymbol.

With the exception of share, any arg on the above elements stays on the root of whatever a transform produces (and is used as is if content is used directly by AT). Because it should be copied, putting arg on share or its children is/could be a problem.

I'm not sure what should happen with bind and bvar. My feeling is that we should think about them after discussing the above and the remaining content element apply. apply is where it seems like the distinction between direct consumption of content MathML by AT and transformation most comes into play.

From this point on, the discussion is "thinking out loud" and is just raising discussion points because I'm not sure what is right.

Thoughts/questions:

  • There seems to be a strong connection between apply and intent "hints". For example, applying plus might use an infix hint (<plus intent@infix='plus'/>) and applying sin` would avoid a hint so that it is treated as function call.
  • An example of a content speech ambiguity that could be solved with intent is applying transpose to the remaining argument. We may want to say "transpose of x" or we may want to say "x transpose". An intent hint can be used to force the speech. For example, <transpose@postfix/> would produce 'x transpose'.
  • intent is meant for AT, not content to presentation transforms. What happens when the transform doesn't match the intent "hint"? For example, suppose the transform produces the functional form of "transpose" but intent is given as postfix ("x transpose")? Speech should not be changed. This leads to the next question...
  • Does the transform need to be smart/aware of the intent value? Does it need to change the intent or arg values?
  • what does intent on apply do? Ignored?
  • what does arg on apply mean? Ignored?

@davidcarlisle
Copy link
Collaborator Author

@NSoiffer wrote

I see two ways content can be used with intent:

Content MathML is being consumed directly by AT (doesn't happen now, but one can imagine it might in the future)

Content MathML is converted to presentation MathML and this is consumed by AT.

Yes I agree with this and as I mentiond on last week's call the current draft is somewhat silent on how intent gets used.

but those ways apply equally to mfenced or mstack, the browser really doesn't distinguish elments that are not in core

So skipping to your final questions

what does arg on apply mean? Ignored?

I think this is the easiest to answer and it should be allowed and not ignored.

in <mrow intent="myfun($a,$b)">....
we should be able to put arg="a" on any valid child of the mrow. and <apply> is perhaps the most likely content elment to appear there,

(The XML sources for the nag library have 5,154 instances of <apply> that have parent or sibling being a presentation element)

what does intent on apply do? Ignored?

as for mfenced, if it is passed to AT it will inform the voice rendering of that subterm, if instead the expression is passed through a transform to MathML Core then that transform should generate suitable intent values on the generated elments but exactly which Core elements it generates and what attributes they have is out of scope for the spec. But again this exactly the same as elementary math elements.

@davidcarlisle
Copy link
Collaborator Author

davidcarlisle commented Aug 7, 2022

@NSoiffer as for presentation mathml we only need to consider individual elments if we want to specify default intent values, something we have not addressed so far.

chapter 5 doesn't need to say how intent acts on each element, but if we want <mfrac> to have a default intent of divides($a,$b) the we do need some per-element description (either in chapter 3 or 5)

content elements are the same. The existing description covers all elements (controls the voice rendering for the subterm) we only need to consider individual elements if we want to define defaults so <set> has default intent set(...)

@NSoiffer
Copy link
Contributor

NSoiffer commented Aug 8, 2022

@davidcarlisle wrote:

as for mfenced, if it is passed to AT it will inform the voice rendering of that subterm, if instead the expression is passed through a transform to MathML Core then that transform should generate suitable intent values on the generated elments but exactly which Core elements it generates and what attributes they have is out of scope for the spec. But again this exactly the same as elementary math elements.

There maybe is a difference... If I could write the transforms properly, they would make use of the Shadow DOM and so AT wouldn't see the results of the transform, whether for mfenced or mlongdiv. I don't remember if the problem (not being able to shadow mfenced, etc) applies to all elements in the MathML namespace or just the ones in presentation MathML. Do you know? (I suppose it is not too hard to test...)

@davidcarlisle also wrote:

in <mrow intent="myfun($a,$b)">....
we should be able to put arg="a" on any valid child of the mrow. and is perhaps the most likely content elment to appear there,

That made me think about the potential problem case:

<mrow intent="myfun($a,$b)">
    <mi arg="a">foo</mi>
    <apply> <plus arg="b"/> <ci>x</ci><ci>y</ci><ci>z</ci> </apply>
</mrow>

If the apply is transformed to be <mo arg="b>+</mo>, then the "arg b" is repeated and likely not legal. Is this a case of having to be smart about a transform to presentation MathML? Is this something for the notes but out of scope for the spec?

@davidcarlisle
Copy link
Collaborator Author

@NSoiffer

I don't remember if the problem (not being able to shadow mfenced, etc) applies to all elements in the MathML namespace or just the ones in presentation MathML

To an implementation there is no "Presentation MathML" other than Core, so you could not make such a distinction. <mstack>, <apply> and <rabbit> all have the same status, unknown element in the MathML namespace,

Note unknown elements don't have undefined behaviour they lay out like mrow and global attributes mostly have their defined behaviour.

in

<!DOCTYPE html>
<html>
 <head>
 </head>
 <body>
  <h1>Unknown MathML</h1>
  
  <p>a <a href="#mr1">link to mrow</a></p>
  
  <p>a <a href="#r1">link to rabbit</a></p>

  <math id="m1">
   <mrow id="mr1" mathvariant="bold"><mn>1</mn><mo>+</mo><mn>2</mn></mrow>
   <mo>→</mo>
   <rabbit id="r1" mathvariant="double-struck"><mn>1</mn><mo>+</mo><mn>2</mn></rabbit>
  </math>
 
</html>

the id and mathvariant attributes on <rabbit> have their global definitions:

image

Where <rabbit> is the target of the link as id worked and its children are double struck as mathvariant worked.

As a global attribute I would expect to be able to use intent as well <rabbit intent="furry-animal"> to control speech for an unknown element.

If the apply is transformed to be <mo arg="b>+, then the "arg b" is repeated and likely not legal. Is this a case of having to be smart about a transform to presentation MathML? Is this something for the notes but out of scope for the spec?

Sure but that is already true with id attributes, a transform has to take care not to repeat them, but that is a quality of implementation issue, mathml generators shouldn't generate invalid markup.

@brucemiller
Copy link
Contributor

I see two ways content can be used with intent:
1. Content MathML is being consumed directly by AT (doesn't happen now, but one can imagine it might in the future)
2. Content MathML is converted to presentation MathML and this is consumed by AT.

For a specification, (1) seems to me the only valid point of view, as we cannot specify the use of intent on content in terms of some unknown transformation.

If you are writing a content to presentation transform and want to preserve intent, you'll need to transform the content's intent values as well. With luck, it may only be necessary to copy the @intent from the content to the Right Place in the presentation, but only the transform writer will know what that Right Place is.
However, since we no longer have relative arg references, this process may actually be manageable,
and there may be less difference between the two points of view (1) and (2).

Dispensing with some easier(?) content element/intent interactions first:

I've been viewing @intent as mostly a "tree" attribution, rather than a "presentation MathML" attribution. In particular, we're saying that if there is an @intent attribute, use it to render the node (it says what to say, or how to assemble the pieces), otherwise "do whatever you would have done". Thus, we haven't yet said much about how an un-attributed mfrac is spoken, and likely don't (yet) need to say much about content elements. (How does AT handle Surprise?). Of course, we can say more about these things if we choose.

@brucemiller
Copy link
Contributor

That made me think about the potential problem case:

<mrow intent="myfun($a,$b)">
    <mi arg="a">foo</mi>
    <apply> <plus arg="b"/> <ci>x</ci><ci>y</ci><ci>z</ci> </apply>
</mrow>

If you think of this as an annotated MathML tree, then speaking it is no problem (other than what the AT will do with <plus/>); it's equivalent to intent="myfun(foo,plus)", and the AT never sees the apply (or cis).

If the apply is transformed to be <mo arg="b>+</mo>, then the "arg b" is repeated and likely not legal. Is this a case of having to be smart about a transform to presentation MathML? Is this something for the notes but out of scope for the spec?

Exactly! (from my POV). If you want to transform to presentation, you'll need to migrate the intent attributes appropriately, but where they end up will depend on the transform.

@davidcarlisle
Copy link
Collaborator Author

@brucemiller

For a specification, (1) seems to me the only valid point of view, as we cannot specify the use of intent on content in terms of some unknown transformation.

We should not specify the transformation but we have to specify whether the input is valid or not. The question of whether it is allowed is separate from saying what happens if you use it. (As in MathMlL Core where we are saying intent is valid but not saying a system has to pass it to AT or do anything at all with it)

So I think we should make it valid. To also have (1) , that is, it gets passed to AT, I think we'd have to specify that intent works that way for all unknown elements in the MathML namespace, as content elements are not in Core, so are Unknown. (as I commented above with <rabbit intent=.. I think that is a natural outcome)

@brucemiller
Copy link
Contributor

If we're talking about Core, then you're right: none of this matters; whether intent, which we don't say what it does, is valid on invalid elements?
But for Full, I'm expecting that we're gradually going to say something about how intent should be used, right? Otherwise, there's no need to bother with all this syntax stuff, just say @intent is allowed and we're done! :>
And IF the two cases (1) & (2) imply different ways that intent on content elements should be formulated, and we haven't made a choice between the two views, then both forms are going to find their way into the wild, with incompatible results.

@davidcarlisle
Copy link
Collaborator Author

@brucemiller
we can say what is valid content mathml but web platform implementations will implement core so Content MathML will have a javascript/IDL of an unknown element, so while we can say anything about how an implementation of MathmL full behaves, in browser we have mathml core + any user level javascript: the native implemention is not going to distinguish <apply> from <rabbit> so if intent works on any element in the mathml namespace intent will work on content mathml, otherwise it will only work if the javascript places suitable intent on core elements.

@brucemiller
Copy link
Contributor

@davidcarlisle , right, I think I understand what you're saying, but not necessarily the implication.

I'm beginning to suspect that we're actually debating different questions. I was thinking about how intent on Content elements should be structured, such as the guidance we would provide to a document author about how to formulate such intent attributes. For me, the only approach that makes sense is case (1) where the intent is written as if the content elements were being processed by the AT. Without knowing the c2p transformation, I don't see how case (2) specifies anything at all about what I should put into the intent value.

Maybe that was obvious to everyone else, all along, but some comments had me wondering.

Of course, how the intent actually finds its way into the AT is another question to resolve.

@NSoiffer
Copy link
Contributor

NSoiffer commented Aug 9, 2022

With the above discussion, I reluctantly agree that case '2' (while the more likely method AT will see intent coming from the very small amount of content MathML) is out of scope because we have never said anything about the c2p transforms. This doesn't seem like a time to start doing so.

That leaves the question of whether intent/arg make sense on all elements. As I mentioned in the original response, share is problematic given its current description. Not sure about bind and bvar (again, likely because my content MathML is rusty).

@NSoiffer
Copy link
Contributor

NSoiffer commented Aug 9, 2022

@davidcarlisle wrote about rabbit elements (a clever way to say we are going down a rabbit hole with this discussion?)

Because any element in the MathML namespace that is not in core is treated as an unknown element, including those that are defined in MathML Full, that's a strong reason why we need to say something about all elements in the MathML namespace need to get into an accessibility tree. Throwing out the elementary math elements would destroy elementary school accessibility.

This part of the discussion probably belongs in a different issue though.

@davidcarlisle
Copy link
Collaborator Author

I actually don't think (for the spec) there is any difference betwen (1) and (2) it is just an implementation detail.

For MathML3 implementation report each specific browser+javascript+xslt was considered "an implementation" and it is same here.

I'd note first that this issue (289) is not about how intent affects anything simply whether it shoud be allowed.
But we can specify (if we want) in MathML-Full that intent on <apply> affects the audio rendering of that subterm.
In practice that is a constraint on any JavaScript implementation of a Content MathML polyfill that it either puts a suitable intent on generated Core elements or it constructs some shadow dom construct that enables the original attribute to be passed to AT but we don't need to specify that any more than we need to specify how visual rendering gets implemented.

But this issue is asking for less: it is just asking that intent is not declared invalid, so that you are allowed to have javascript that uses it in any way.

@davidcarlisle
Copy link
Collaborator Author

davidcarlisle commented Aug 9, 2022

Neil wrote

This part of the discussion probably belongs in a different issue though.

acrually I think it is the fundamental part of this issue, if we want unknown elements including their intent attributes to be passed to AT then we are saying we want to specify that intent works on Content MathML.

@brucemiller
Copy link
Contributor

Generally, I like the symmetry of allowing @intent everywhere. Nevertheless, it would be interesting to know if there are compelling use cases where Content MathML would find it's way into AT, and whether the intent attribute (as currently formulated) would add any value over what's already encoded in the Content.

Alternatively, for the case where the Content is transformed (somehow) into Presentation before AT sees it, I would think that the transformer would already have most information that it needs to annotate the presentation with intent. Are there compelling cases where a better result would be obtained by carrying intent from the Content over to the Presentation?

@davidcarlisle
Copy link
Collaborator Author

Are there compelling cases where a better result would be obtained by carrying intent from the Content over to the Presentation?

Basically any example where intent is being used to customise the audio rendering rather than give mathematical meaning.
We have bounced around enough of those while looking at intent on Presentation:-)

But really the logic for the suggested change in his issue is much simpler, You will be able to use intent on content mathml and a browser will do what it does, applying a javascript transform or passing it or not passing it to AT depending on what ends up being the specified behaviour for unknown elements.

So really the more natural question is, What is the compelling use case for declaring implemented behaviour as invalid?

The whole discussion has zero impact on implementations, it only concerns validity and most implementaions don't check
validity so It is just artificially forcing validators to give an error on a construct that is most naturally global, we haven't had to define intent for each element: it just naturally applies to its subterm. MathML subterms are a free mix of Content and Presentation elements so It would be most natural to define it as a global attribute, not just an attribute allowed on elements defined in chapters 2, 3 and 5 but not 4.

@NSoiffer
Copy link
Contributor

Nevertheless, it would be interesting to know if there are compelling use cases where Content MathML would find it's way into AT, and whether the intent attribute (as currently formulated) would add any value over what's already encoded in the Content.

Something as simply as <apply> <plus/> ... </apply> needs to somehow be translated to speech or mapped to something in the core list if appropriate. Perhaps that is done by a some defaults. However one can certainly imagine that the names used in an OpenMath CD don't match the names in core list. Or that for those names that don't map to core, the names were not chosen based on how they were meant to be spoken.

@brucemiller
Copy link
Contributor

So, part of the rationale is that for intent to be usable on out-of-core elements like mstack, we have to assert that intent should be visible on "unknown MathML" elements, and thus pretty much anywhere? OK.

@davidcarlisle
Copy link
Collaborator Author

davidcarlisle commented Aug 11, 2022

On the call on 2022-08-11 the working group resolved with no objections to make the change suggested by this issue. It was noted that Deyan may have spoken against had he been there but we went through the comments here and there was a clear consenus to apply this change for the FPWD.

github-actions bot added a commit that referenced this issue Aug 11, 2022
SHA: 6c3a019
Reason: push, by @davidcarlisle

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
intent Issues involving the proposed "intent" attr
Projects
None yet
Development

No branches or pull requests

6 participants