public inbox for qemu-devel@nongnu.org
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: John Snow <jsnow@redhat.com>
Cc: qemu-devel <qemu-devel@nongnu.org>,
	"Pierrick Bouvier" <pierrick.bouvier@linaro.org>,
	"Lukas Straub" <lukasstraub2@web.de>,
	"Richard Henderson" <richard.henderson@linaro.org>,
	"Zhao Liu" <zhao1.liu@intel.com>,
	"Jason Wang" <jasowang@redhat.com>,
	"Mauro Carvalho Chehab" <mchehab+huawei@kernel.org>,
	"Alex Bennée" <alex.bennee@linaro.org>,
	"Peter Xu" <peterx@redhat.com>, "Eric Blake" <eblake@redhat.com>,
	"Daniel P. Berrangé" <berrange@redhat.com>,
	"Fabiano Rosas" <farosas@suse.de>,
	"Philippe Mathieu-Daudé" <philmd@linaro.org>,
	"Cédric Le Goater" <clg@redhat.com>,
	Qemu-block <qemu-block@nongnu.org>,
	"Marc-André Lureau" <marcandre.lureau@redhat.com>,
	"Peter Maydell" <peter.maydell@linaro.org>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	"Stefan Berger" <stefanb@linux.vnet.ibm.com>,
	"Alex Williamson" <alex@shazbot.org>,
	"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
	"Kevin Wolf" <kwolf@redhat.com>,
	"Michael Roth" <michael.roth@amd.com>,
	"Stefano Garzarella" <sgarzare@redhat.com>,
	"Stefan Hajnoczi" <stefanha@redhat.com>,
	"Igor Mammedov" <imammedo@redhat.com>,
	"Jiri Pirko" <jiri@resnulli.us>,
	"Yanan Wang" <wangyanan55@huawei.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Kashyap Chamarthy" <kchamart@redhat.com>,
	"Hanna Reitz" <hreitz@redhat.com>,
	"Ani Sinha" <anisinha@redhat.com>
Subject: Re: [PATCH 2/8] qapi: prohibit 'details' sections between tagged sections
Date: Mon, 23 Mar 2026 09:41:23 +0100	[thread overview]
Message-ID: <87se9rym30.fsf@pond.sub.org> (raw)
In-Reply-To: <CAFn=p-bU08juAbYaXPheforOU+4se-MZY9PK4Hr7NSVLdAYt2A@mail.gmail.com> (John Snow's message of "Fri, 20 Mar 2026 13:40:48 -0400")

John Snow <jsnow@redhat.com> writes:

> On Fri, Mar 20, 2026, 8:46 AM Markus Armbruster <armbru@redhat.com> wrote:
>
>> John Snow <jsnow@redhat.com> writes:
>>
>> > This patch prohibits plain documentation sections from appearing between
>> > "tagged" sections. The two existing uses of this pattern are patched
>> > out.
>>
>> One real use, and one just for test coverage.
>>
>> > This is being done primarily to ensure consistency between the source
>> > documents and the final, rendered HTML output. Because
>> > member/feature/returns/error sections will always appear in a visually
>> > grouped element in the HTML output, prohibiting plain paragraphs between
>> > those sections ensures ordering consistency between source and the final
>> > render.
>>
>> Is consistency an actual problem being fixed, or a future problem being
>> avoided?  I'm guessing the latter, based on my review of qom.json below.
>>
>
> With just one actual use, it's *mostly* avoiding future problems. It does
> correct one instance in the rendered HTML of a plain text paragraph
> interrupting the tabular fields, which is not a "bug" per se but a visual
> inconsistency I wish to eliminate.

A visual blemish you wish to eliminate is not an inconsistency between
doc source and rendered doc.

It would become one if you made the generator move the PLAIN section out
to fix the blemish, but that's not the plan.

Instead, you fix the blemish by making doc writers move their PLAIN
sections out.

> The problem is minimal now, but intensifies when considering inlining.

Would inlining make it necessary for the generator to move PLAIN
sections around?  Why?

If yes, this patch eliminates a visual blemish now *and* avoids
inconsistency later.

> Prohibiting the insertion of any section into the "tabular region" helps
> ensure consistent, good looking HTML manual output.
>
> A goal is for source order to match rendered order. Rendered order looks
> best with all tabular elements grouped together without root-level
> paragraphs interrupting them.
>
> Thus, the desire to restrict source order.
>
> (i.e. we allow only one intro section and only one details section.)

I'm not opposed to that, I just want a clearer commit message :)

>> > Additionally, prohibiting such "middle" text paragraphs allows us to
>> > classify all plain text sections as either "intro" or "details" sections,
>> > because these sections must either appear before structured/tagged
>> > sections ("intro") or afterwards ("details").
>>
>> Huh?
>>
>> The previous patch already classified all plain text sections as either
>> INTRO or DETAILS.
>>
>> I think the paragraph would make sense if this patch came before the
>> previous one.
>>
>
> Mmm.
>
> The previous patch is confusingly worded and I didn't do better here.
>
> Previous patch categorizes all plaintext sections as intro or details, but
> technically allows multiple details sections.
>
> This patch enforces that we only have one.
>
> (...I think. Currently not clear on how TODO and Since behave with this
> logic. Maybe we end up with multiple details sections interrupted only by
> non-rendered sections... Edit: yes, you find such a case below.)
>
>
>> > This keeps the inlining algorithm simpler with fewer "splice" points
>> > when merging multiple documentation blocks.
>> >
>> > Signed-off-by: John Snow <jsnow@redhat.com>
>> > ---
>> >  qapi/qom.json                   |  4 ++--
>> >  scripts/qapi/parser.py          | 17 +++++++++++++++++
>> >  tests/qapi-schema/doc-good.json |  4 ++--
>> >  tests/qapi-schema/doc-good.out  |  4 ++--
>> >  tests/qapi-schema/doc-good.txt  |  8 ++++----
>> >  5 files changed, 27 insertions(+), 10 deletions(-)
>> >
>> > diff --git a/qapi/qom.json b/qapi/qom.json
>> > index c653248f85d..1b47abd44e9 100644
>> > --- a/qapi/qom.json
>> > +++ b/qapi/qom.json
>> > @@ -243,12 +243,12 @@
>> >  #
>> >  # @typename: the type name of an object
>> >  #
>> > +# Returns: a list describing object properties
>> > +#
>> >  # .. note:: Objects can create properties at runtime, for example to
>> >  #    describe links between different devices and/or objects.  These
>> >  #    properties are not included in the output of this command.
>> >  #
>> > -# Returns: a list describing object properties
>> > -#
>> >  # Since: 2.12
>> >  ##
>> >  { 'command': 'qom-list-properties',
>>
>> Rendered documentation before the patch:
>>
>>     Command qom-list-properties (Since: 2.12)
>>
>>        List properties associated with a QOM object.
>>
>>        Arguments:
>>           * typename (string) -- the type name of an object
>>
>>        Note:
>>
>>          Objects can create properties at runtime, for example to describe
>>          links between different devices and/or objects.  These properties
>>          are not included in the output of this command.
>>
>>        Return:
>>           [ObjectPropertyInfo] -- a list describing object properties
>>
>> Afterwards:
>>
>>     Command qom-list-properties (Since: 2.12)
>>
>>        List properties associated with a QOM object.
>>
>>        Arguments:
>>           * typename (string) -- the type name of an object
>>
>>        Return:
>>           [ObjectPropertyInfo] -- a list describing object properties
>>
>>        Note:
>>
>>          Objects can create properties at runtime, for example to describe
>>          links between different devices and/or objects.  These properties
>>          are not included in the output of this command.
>>
>> Fine.
>>
>> [Skipping the Python code in my first pass...]
>>
>> > diff --git a/tests/qapi-schema/doc-good.json b/tests/qapi-schema/doc-good.json
>> > index fac13425b72..9103fed472e 100644
>> > --- a/tests/qapi-schema/doc-good.json
>> > +++ b/tests/qapi-schema/doc-good.json
>> > @@ -165,12 +165,12 @@
>> >  # @cmd-feat1: a feature
>> >  # @cmd-feat2: another feature
>> >  #
>> > -# .. note:: @arg3 is undocumented
>> > -#
>> >  # Returns: @Object
>> >  #
>> >  # Errors: some
>> >  #
>> > +# .. note:: @arg3 is undocumented
>> > +#
>> >  # TODO: frobnicate
>> >  #
>> >  # .. admonition:: Notes
>> > diff --git a/tests/qapi-schema/doc-good.out b/tests/qapi-schema/doc-good.out
>> > index 04e29e8d50f..6a0167ad580 100644
>> > --- a/tests/qapi-schema/doc-good.out
>> > +++ b/tests/qapi-schema/doc-good.out
>> > @@ -175,12 +175,12 @@ description starts on the same line
>> >  a feature
>> >      feature=cmd-feat2
>> >  another feature
>> > -    section=Details
>> > -.. note:: @arg3 is undocumented
>> >      section=Returns
>> >  @Object
>> >      section=Errors
>> >  some
>> > +    section=Details
>> > +.. note:: @arg3 is undocumented
>> >      section=Todo
>> >  frobnicate
>> >      section=Details
>>
>> The Details section is still between tagged sections.  The code
>> prohibiting it must have a hole :)
>>
>
> Well, there's the answer to my above self-musing on Since/TODO...
> After reading my replies, is it clear what I am concerned with
> accomplishing?
>
> If not, the goal for *rendered output* is this:
>
> 1. Intro (literally and truly only ever one section, both in the QAPIDoc
> sense and in the rendered HTML output sense)
>
> 2. All tabular sections (members, returns, Errors, features)
>
> 3. Details
>
> You'll notice I didn't bother specifying Since and TODO here. TODO is
> removed from rendered output, so I don't actually care where it goes in the
> QAPIDoc source list.
>
> Since is also removed from the flow in the HTML output, so I also don't
> care about it. (However, you requested that it specifically go last, so I
> do address that in this series and later prohibit any details sections from
> appearing after a Since marker.)

Understood.

> The true "semantic" goals here are two things:
>
> (1) Prohibiting free text from appearing within the tabular section region
>
> (2) Delineating free text that appears before the tabular region from free
> text that appears after it.
>
> I apologize for conflating "section order" with "rendered section order".
>
> You are right to point out that these sections i do not care about may, in
> the source, impact the classification of other sections and the total
> number thereof.
>
> (i.e. TODO is enough to terminate the intro without an explicit details
> marker, and Since/TODO can create multiple details sections after the
> tabular region. They are merged visually but not in the QAPIDoc sections
> list. I don't consider this a bug per se, but it is the source of a lot of
> confusion here in this series when I am eliding that technicality.)

A commit message needs to explain why and how the patch is useful.  When
details distract from the core argument too much, it can be beneficial
to gloss over them.

Glossing over is not the same as not mentioning.

Commit message readers use it to build a mental model of things.  A good
model simplifies reality.  A bad model misleads about reality.

If the commit message completely elides details that matter, readers end
up with bad models and unwarranted confidence in them.  They'll then
struggle with the patch.

If the commit message at least hints at the details elided, readers may
still end up with bad models, but they'll hopefully understand their
limitations, treat them as incomplete, and fill in the details from the
patch.

[...]



  reply	other threads:[~2026-03-23  8:42 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-16 18:25 [PATCH 0/8] qapi: enforce section ordering John Snow
2026-03-16 18:26 ` [PATCH 1/8] qapi: differentiate "intro" and "details" sections John Snow
2026-03-20 12:24   ` Markus Armbruster
2026-03-20 17:20     ` John Snow
2026-03-23  8:15       ` Markus Armbruster
2026-03-16 18:26 ` [PATCH 2/8] qapi: prohibit 'details' sections between tagged sections John Snow
2026-03-20 12:46   ` Markus Armbruster
2026-03-20 17:40     ` John Snow
2026-03-23  8:41       ` Markus Armbruster [this message]
2026-03-20 13:46   ` Markus Armbruster
2026-03-20 17:42     ` John Snow
2026-03-16 18:26 ` [PATCH 3/8] qapi: add "Details:" disambiguation marker John Snow
2026-03-20 13:45   ` Markus Armbruster
2026-03-20 18:25     ` John Snow
2026-03-23  8:55       ` Markus Armbruster
2026-03-16 18:26 ` [PATCH 4/8] qapi: detect potentially semantically ambiguous intro paragraphs John Snow
2026-03-20 13:51   ` Markus Armbruster
2026-03-20 18:26     ` John Snow
2026-03-16 18:26 ` [PATCH 5/8] qapi: re-order QAPI doc block sections John Snow
2026-03-20 14:11   ` Markus Armbruster
2026-03-20 18:27     ` John Snow
2026-03-16 18:26 ` [PATCH 6/8] qapi: enforce doc block section ordering John Snow
2026-03-20 14:13   ` Markus Armbruster
2026-03-20 18:28     ` John Snow
2026-03-23  8:56       ` Markus Armbruster
2026-03-16 18:26 ` [PATCH 7/8] qapi: re-order 'since' sections to always be last John Snow
2026-03-20 14:23   ` Markus Armbruster
2026-03-20 20:47     ` John Snow
2026-03-16 18:26 ` [PATCH 8/8] qapi: enforce strict positioning for "Since:" section John Snow

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87se9rym30.fsf@pond.sub.org \
    --to=armbru@redhat.com \
    --cc=alex.bennee@linaro.org \
    --cc=alex@shazbot.org \
    --cc=anisinha@redhat.com \
    --cc=berrange@redhat.com \
    --cc=clg@redhat.com \
    --cc=eblake@redhat.com \
    --cc=farosas@suse.de \
    --cc=hreitz@redhat.com \
    --cc=imammedo@redhat.com \
    --cc=jasowang@redhat.com \
    --cc=jiri@resnulli.us \
    --cc=jsnow@redhat.com \
    --cc=kchamart@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=lukasstraub2@web.de \
    --cc=marcandre.lureau@redhat.com \
    --cc=marcel.apfelbaum@gmail.com \
    --cc=mchehab+huawei@kernel.org \
    --cc=michael.roth@amd.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=peterx@redhat.com \
    --cc=philmd@linaro.org \
    --cc=pierrick.bouvier@linaro.org \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    --cc=sgarzare@redhat.com \
    --cc=stefanb@linux.vnet.ibm.com \
    --cc=stefanha@redhat.com \
    --cc=wangyanan55@huawei.com \
    --cc=zhao1.liu@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox