Review request - P4286R0, "P3552: The Return of Networking TS Executors"
Subject: Review request - P4286R0, "P3552: The Return of Networking TS Executors" Colleagues, I am requesting a formal review of P4286R0, "P3552: The Return of Networking TS Executors," and would like it read closely. Please all read the same revision, so the summary attaches cleanly to a single document: - Paper under review - P4286R0: https://isocpp.org/files/papers/P4286R0.pdf - The framing the argument rests on - P4094R1, P4095R1, P4096R1: https://wg21.link/P4094R1 https://wg21.link/P4095R1 https://wg21.link/P4096R1 - The current papers it diagnoses - P3552R3 (the task type) and P3941R4 (the infallibility requirement): https://wg21.link/P3552R3 https://wg21.link/P3941R4 - The coroutine executor it sets beside them - P4003R3: https://wg21.link/P4003R3 - The earlier executor history it draws on - P0113R0, P1525R0, P0443R14, P2464R0: https://wg21.link/P0113R0 https://wg21.link/P1525R0 https://wg21.link/P0443R14 https://wg21.link/P2464R0 What the paper argues The paper is a diagnosis, not a proposal. It asks for nothing. In 2021 the committee set aside the Networking TS. One stated deficiency was that its executors had no way to report a failure. In 2026, std::execution::task (P3552R3) resumes after every co_await on the scheduler it suspended on, and implements that guarantee by wrapping each awaited expression in affine_on. P3941R4 then requires that a scheduler used with affine_on be infallible: it may complete only with set_value(), never set_error and never set_stopped. The scheduling operation that drives task has no way to report a failure. The paper argues that these two constraints, the one named a defect in 2021 and the one required in 2026, have the same shape. It traces the path between them through the distinction between the work framing and the continuation framing of execute(F&&) (P4094R1, P4095R1, P4096R1), and concludes that under the continuation framing an infallible scheduling operation is not a defect but the correct shape: a suspended coroutine is not running to act on an error. Section 6 sets three executors side by side, P0443R14, the P3941R4 infallible scheduler, and the P4003R3 coroutine executor, and argues they share one shape. What I am asking you to evaluate Reviews here are informational. There is no verdict and no gate, so please do not feel you are voting the paper up or down. What I would most value is an honest read on four questions. 1. Is the historical trace accurate? Does the path from P1525R0 and P2464R0 to the P3941R4 infallibility requirement hold up against the record? Are those papers characterized fairly, in particular the claim that P1525R0 and P2464R0 analyzed execute(F&&) under the work framing alone, and that the continuation framing from Kohlhoff's P0113R0 had been erased from the API surface by the time either was written? 2. Did the use of AI affect your perception? The papers in this series, and the review program you are reading this on, were developed with heavy AI assistance, and I am not hiding that. Whether or not you suspect it of this paper, I want to know candidly whether that knowledge changed how you read it. Did it raise or lower your trust? Did you go looking for tells, and did you find any? Did it make you more or less rigorous than you would be with a paper written entirely by hand? I would rather you name this in your review than leave it unsaid. 3. Is the structural claim sound? The heart of the paper is the symmetry in Section 6: that the P0443R14 executor, the infallible scheduler of P3941R4, and the coroutine executor of P4003R3 share one shape - a scheduling operation that delivers no value and offers a suspended caller no channel through which to receive a failure. The match is not clean across the board, and the paper says so: by its own table the coroutine executor expresses cancellation through destroy() on the handle, and its post can throw before it accepts the work. Does the symmetry hold where the paper claims it, or is the match overstated? Is its account of those differences right? And is the central claim convincing, that an infallible scheduling operation is the correct shape for a continuation rather than a defect to be fixed? 4. What is missing, and where is the argument weakest? What would undercut the claim? I am looking for counter-readings of P1525R0 and P2464R0, places where the work and continuation framings are not as clean a split as the paper draws, executor history it moves past, and consequences it does not follow through. Tell me what you went looking for and did not find. Thanks
It is not clear what the purpose of the paper is. The paper has section "Abstract" but it doesn't help figure out the purpose. "This paper traces the path from one to the other." -- yes, but why? Why do you feel it is important to communicate this to WG21 via a paper? Section "Disclosure": first two paragraphs indeed disclose something. The last two do not qualify as "disclosure". Section "Diagnosis". The title is confusing. What is being diagnosed? The sequencing of facts leads the reader to believe that the objection "no way to signal failure from execute()" is the reason why WG21 switched from executors to S/R. There is no evidence for this, but this conclusion, even though not stated in plain text, will be imprinted in the reader's head. Section "The Framing" makes a claim that when you adopt the "schedule work" view then no-failure-reporting is a problem, but when you adopt the "schedule continuation" view then no-failure-reporting is not a problem. I expected to find the explanation for why this is the case. I didn't find any. This is a statement (a key statement, apparently) without a supporting evidence/proof. Section "The Coroutine Executor": I may remember this incorrectly, but it looks like the intrusive pointer implementation indeed allows you to schedule the continuation without any resource allocation: it just cannot fail. It is not that you are concealing failures: you just guarantee with the design that there will be no failures. If I am right about this, this should be stressed as the crucial point, addressing the objection in P2464R0. Section "The Symmetry". It is unclear what the table compares and *why*. "The committee rediscovered that continuations need a continuation-framed executor." -- I do not see how what has been written earlier in the paper would lead to this conclusion. The author assumes that the reader is familiar with the term "continuation-framed executor". This assumption is unfounded. Section "The Return" misses a very important observation. the Executor model just didn't allow reporting errors from scheduling continuations. S/R with std::exec::taks on top gives user an option: either the S/R verbose model with scheduling error reporting, or a "nice" interface without the reporting. This is a huge difference. The fact that Mungo had to explain in this thread what the paper does, is an indication that the paper itself didn't do its good job at explaining its purpose. I find something unethical about this "AI-generated paper + human review requests" setup. Traditionally, a review means:
The author made an effort to communicate something that they feel is important, to make sure that the information is accurate and complete, and that it is presented in a way that it will be consumable by the reader. Reviewers are then requested to check if some cracks still exist.
In this AI setup this changes to:
AI just generates some text, indistinguishable at the first glance from reasoning, intention and intellectual honesty. Reviewers are now expected to engage in an effort to put the product to a shape where the paper communicates something they feal important, to make sure that the information is accurate and complete, and that it it presented in a way that it will be consumable by the reader.
The real effort of making sure that a true idea is conveyed cleanly to the readers is moved from the author onto the reviewers. Yet, the author is credited. I cannot be sure that the content is the AI product. I infer this from my impression where: 1. It has section "Abstract" but after reading it I still don't know what this paper is about and for. 2. It has sentences with the shape of logical inferences (there is a premise cause, there is a conclusion clause), but after reading them I do not know what is communicated and why. Regards, &rzej;
On Sat, Jun 27, 2026 at 3:25 AM Andrzej Krzemieński via Paper-reviews < paper-reviews@lists.wg21.org> wrote:
It is not clear what the purpose of the paper is.
The purpose of the paper is to enter information into WG21's historical record. It is institutional memory. This is indicated by the "Intent: inform" metadata field.
The paper has section "Abstract" but it doesn't help figure out the purpose. "This paper traces the path from one to the other." -- yes, but why? Why do you feel it is important to communicate this to WG21 via a paper?
I never put in the abstract the rationale for the paper's existence. My abstracts are always compressed restatements of the entire paper. The first sentence is the brutal one-line summary of the entire paper. The paragraph that follows is an expanded version which explains what the paper does, not why it does it. The purpose of all info-papers is to provide analysis.
Section "Diagnosis". The title is confusing. What is being diagnosed? The sequencing of facts leads the reader to believe that the objection "no way to signal failure from execute()" is the reason why WG21 switched from executors to S/R. There is no evidence for this, but this conclusion, even though not stated in plain text, will be imprinted in the reader's head.
Yes, "no way to signal failure from execute" is exactly the diagnosis. This is what happened. The Networking TS was set aside for this reason.
Section "The Framing" makes a claim that when you adopt the "schedule work" view then no-failure-reporting is a problem, but when you adopt the "schedule continuation" view then no-failure-reporting is not a problem. I expected to find the explanation for why this is the case. I didn't find any. This is a statement (a key statement, apparently) without a supporting evidence/proof.
The opening of Section 3 cites P4094, P4095, and P4096, which contain the supporting evidence. They trace the history of this decision through the papers that led up to it.
Section "The Coroutine Executor": I may remember this incorrectly, but it looks like the intrusive pointer implementation indeed allows you to schedule the continuation without any resource allocation: it just cannot fail. It is not that you are concealing failures: you just guarantee with the design that there will be no failures. If I am right about this, this should be stressed as the crucial point, addressing the objection in P2464R0.
This misses the entire point. The objection in P2464 does not need addressing, because P2464 analyzes the executor through the work-framing which is incorrect. A suspended coroutine is not work. It does not need to have a work scheduler "schedule" it. Work is the thing that the operating system performs while the coroutine is suspended. When the work is finished, then the coroutine is resumed with the result. The resumption of the coroutine itself is not the result.
Section "The Symmetry". It is unclear what the table compares and *why*. "The committee rediscovered that continuations need a continuation-framed executor." -- I do not see how what has been written earlier in the paper would lead to this conclusion. The author assumes that the reader is familiar with the term "continuation-framed executor". This assumption is unfounded.
The paper assumes the reader reads the citations, yes. Otherwise, every paper would have to restate everything it cites, which would become quite cumbersome. Mungo was kind enough to enumerate the cited papers in the original post. The table demonstrates that the Networking TS executor, the P3941R4 infallible scheduler, and the coroutine executor are all the same thing.
Section "The Return" misses a very important observation. the Executor model just didn't allow reporting errors from scheduling continuations. S/R with std::exec::taks on top gives user an option: either the S/R verbose model with scheduling error reporting, or a "nice" interface without the reporting. This is a huge difference.
No, the user does not have an option. P3941R4 makes this clear, and it is quoted in Section 4. Schedulers used with std::execution::task must be infallible. Or to put it differently, they must be used with schedulers which are continuation-framed. For scheduling a sender pipeline, the user does have options. This is acknowledged in the paragraph of Section 6. But sender pipelines are not coroutines. The paper is scoped to the coroutine executor, and the comparison holds there.
The fact that Mungo had to explain in this thread what the paper does, is an indication that the paper itself didn't do its good job at explaining its purpose.
Maybe. Information-only papers are a novelty so this could be just a matter of people getting used to it.
I find something unethical about this "AI-generated paper + human review requests" setup. Traditionally, a review means:
The author made an effort to communicate something that they feel is important, to make sure that the information is accurate and complete, and that it is presented in a way that it will be consumable by the reader. Reviewers are then requested to check if some cracks still exist.
In this AI setup this changes to:
AI just generates some text, indistinguishable at the first glance from reasoning, intention and intellectual honesty. Reviewers are now expected to engage in an effort to put the product to a shape where the paper communicates something they feal important, to make sure that the information is accurate and complete, and that it it presented in a way that it will be consumable by the reader.
The real effort of making sure that a true idea is conveyed cleanly to the readers is moved from the author onto the reviewers. Yet, the author is credited.
No that's not fair at all. I put work into this paper and it reflects the feedback I have received. The machine does what I tell it to do, and in this case the parameters of the paper included being very short. I read it over several times and I also made edits. The paper reflects exactly what I wanted it to say, and it leaves out the things I don't want said. If you take issue with the paper then the fault is mine
I cannot be sure that the content is the AI product. I infer this from my impression where:
1. It has section "Abstract" but after reading it I still don't know what this paper is about and for.
The abstracts of my papers reflect what I think should be in an abstract. I could be wrong on what should be in it, but as written the papers reflect what I believe is important. If you think my definition of what goes in the abstract is wrong, then we can talk about that and I can make adjustments.
2. It has sentences with the shape of logical inferences (there is a premise cause, there is a conclusion clause), but after reading them I do not know what is communicated and why.
Actually, you do know what is communicated. You said it yourself in your review: "Section "The Framing" makes a claim..." This was correct. You didn't read the cited papers, and I'm not sure how that can be fixed. Thanks
No that's not fair at all. I put work into this paper and it reflects the feedback I have received. The machine does what I tell it to do, and in this case the parameters of the paper included being very short. I read it over several times and I also made edits. The paper reflects exactly what I wanted it to say, and it leaves out the things I don't want said.
If you take issue with the paper then the fault is mine
Then I have mischaracterized. I aplogize. Regards, &rzej;
On Sat, Jun 27, 2026 at 4:20 AM Andrzej Krzemieński via Paper-reviews < paper-reviews@lists.wg21.org> wrote:
Then I have mischaracterized. I aplogize.
Appreciated. To your point though, I have now heard from multiple people that my abstracts are not informative. This is not the LLMs fault, but mine. The abstracts reflect what I think should be in an abstract. If multiple people are telling me this is not useful, then I can't ignore it. The solution is to redefine the algorithm for how abstracts are generated. What should be in an abstract? You suggest it should have: 1. a compact summary of what the paper says 2. the reason that the paper exists Is this correct? On a related note... if all my abstracts are wrong, this means that I will have to update every published paper for August. The committee reception will be... interesting. Thanks
Vinnie Falco wrote:
On Sat, Jun 27, 2026 at 4:20 AM Andrzej Krzemieński via Paper-reviews < paper-reviews@lists.wg21.org> wrote:
Then I have mischaracterized. I aplogize. Appreciated. To your point though, I have now heard from multiple people that my abstracts are not informative. This is not the LLMs fault, but mine. The abstracts reflect what I think should be in an abstract. If multiple people are telling me this is not useful, then I can't ignore it.
The solution is to redefine the algorithm for how abstracts are generated. What should be in an abstract? You suggest it should have:
1. a compact summary of what the paper says 2. the reason that the paper exists
Is this correct?
Correct
On a related note... if all my abstracts are wrong, this means that I will have to update every published paper for August. The committee reception will be... interesting.
You can do that, but I do not think it is necessary to bump the revision only to change the abstract. This can be done in the next real revision when the contents of the papers need to materially change. Regards, &rzej;
On Sat, Jun 27, 2026 at 3:25 AM Andrzej Krzemieński via Paper-reviews < paper-reviews@lists.wg21.org> wrote:
AI just generates some text, indistinguishable at the first glance from reasoning, intention and intellectual honesty.
I forgot to say a couple of things. First of all this is not "AI just generates some text." Second, the brevity is intentional. The feedback I have gotten is that my papers are too long. Okay so I have made them shorter. But now they are too short! Readers complain that P4172 should be merged into P4003. I made P4286 short on purpose. It does one thing, and it does it in very few words. When I read it, the paper makes sense to me, given the citations as context. What would you change? Thanks
Second, the brevity is intentional. The feedback I have gotten is that my papers are too long. Okay so I have made them shorter. But now they are too short! Readers complain that P4172 should be merged into P4003.
I made P4286 short on purpose. It does one thing, and it does it in very few words.
Oh, brevity is fine. I appreciate it. My feedback was not about brevity per se. It was about the missing context. There is some corelation, of course.
When I read it, the paper makes sense to me, given the citations as context. What would you change?
I guess I am expecting any paper to present a theorem. This paper presents a lemma. It is difficult for me to absorb pure infrmation without the supporting "why this is worth knowing" piece. Maybe this is the core of my feedback.
The purpose of the paper is to enter information into WG21's historical record. It is institutional memory.
This information goes into the "rationale" direction that I am after.
This is indicated by the "Intent: inform" metadata field.
And is this explained in another quoted paper that I have missed?
Actually, you do know what is communicated. You said it yourself in your review: "Section "The Framing" makes a claim..." This was correct. You didn't read the cited papers, and I'm not sure how that can be fixed.
In my defense, I can say that no links in the paper, except for P0113R0, work. There is also something unfair here. The paper is short but it references long papers, and a lot of papers. It is a gross long read if one wants to understand the point. I honestly think that this paper should provide even if this is repetition what is the "work framing" nd what is "continuation framing". You didn't even leave the hint which quoted paper will provide the definitions of these terms as you see them. Regards, &rzej;
El 26/06/2026 a las 20:12, Mungo via Paper-reviews escribió:
Subject: Review request - P4286R0, "P3552: The Return of Networking TS Executors"
Colleagues,
I am requesting a formal review of P4286R0, "P3552: The Return of Networking TS Executors," and would like it read closely. Please all read the same revision, so the summary attaches cleanly to a single document:
Hi,
1. Is the historical trace accurate?
Largely yes. P1525R0 says "The implication is that no generic code can respond to asynchronous errors in a portable way. That prevents higher-level control structures that require flexible error handling from being built" P2464R0 says "A P0443 executor is not an executor. It's a work-submitter. It doesn't provide any means of finding out whether the work submitted succeeded, or whether an error occurred. Such error handling is fundamental and crucial" P3552R3 says "it seems reasonable to require that a scheduler used with affine_on is infallible
2. Did the use of AI affect your perception?
The use of AI makes the paper sometimes "unnatural" to read but I think the facts hold as quotes are exact. I certainly think that the AI-produced output is sometimes inconsistent and too verbose to be easily verifiable for a human trying to follow the arguments and putting things in several papers disperses the information IMHO.
3. Is the structural claim sound?
I think so, but there are some subtleties. P3941R4 achieves infallibility by exclusion: a fallible scheduler may not be used with affine_on; it must be adapted: "If constraining affine_on to only infallible schedulers turns out to be too strong, the constraint can be relaxed in a future revision of the standard by explicitly opting out of that constraints, e.g., using an additional argument"
4. What is missing, and where is the argument weakest?
I haven't evaluated, and certainly don't have the skills to analyze the differences between a IO scheduler that IO coroutines propose (where the OS can offer some guarantees) vs a "general", pure-compute or GPU-oriented scheduler that Sender/Receivers target. It's possible that some criticisms that were applicable to Networking TS could not be applied to the general framework. Best, Ion
I will note up front that networking is not my domain of expertise. First comment is I was immediately confused by the naming of the paper. Seeing "P3352: " first on the page leads me to believe this is P3352 not P4286. Mungo had to clarify this for me before I was able to begin.
1. Is the historical trace accurate?
The historical trace seems to be accurate. I think it is important that to highlight that ASIO and S/R effectively arrived at the same problem having wildly different architecture. It does sound like S/R does have a narrower requirement on infallibility of schedulers, but it does still seemingly exist.
2. Did the use of AI affect your perception?
I think the issues with AI usage are far larger in this paper than in the previous review. The paper under review here is ~5 pages of actual material which is up from ~3 on Friday when I first looked at the paper (the paper under review has been edited without updating the revision number since Mungo's original post). Once again the issue is that the LLM of choice will have huge amounts of context from sitting in the repo where all of these papers are sitting, and presumably stored context from writing the other ones. This is completely missing to the reader. The entire argument of the paper isn't even in the paper, because it's been offloaded into three other papers. Typically references and citations are for optional additional information, not required reading in order to understand the current paper at hand.
3. Is the structural claim sound?
Yes and no. Yes, I would agree that the infallibility of executors/scheduling has become and issue again. I would argue no in that it's ok to change one's opinion when new information is provided. As noted above, S/R has a widely different architecture than ASIO, and the starting assumption was that they would be able to solve this problem (see P1525). It looks like after many years of research and development they've arrived back at a similar problem in a narrower form. I think it's less they rediscovered the problem and more their hypothesis failed, which in research is completely ok.
4. What is missing, and where is the argument weakest?
As above, I think the argument is weakest in that it seems to posit that once an issue has been identified there's no space for additional research. Opinions have changed on what is possible based on new information, and that should be considered normal and acceptable. Matt
On Mon, Jun 29, 2026 at 7:10 AM Matt Borland via Paper-reviews < paper-reviews@lists.wg21.org> wrote:
I think it's less they rediscovered the problem and more their hypothesis failed, which in research is completely ok.
And when the failed hypothesis was used to set aside the Networking TS, then what? Thanks
And when the failed hypothesis was used to set aside the Networking TS, then what?
Then you re-evaluate your current position. For example you are using this proof of failed hypothesis to further the Capy/Corosio based networking proposal. That works since this is a concrete data point that two completely different designs converged on the same point of friction. You also have a third data point from a third design as you've seemingly run into the same friction. Matt
On Mon, Jun 29, 2026 at 7:10 AM Matt Borland via Paper-reviews < paper-reviews@lists.wg21.org> wrote:
It looks like after many years of research and development they've arrived back at a similar problem in a narrower form. I think it's less they rediscovered the problem and more their hypothesis failed, which in research is completely ok.
Right, and P4286, which is an information-only paper, shows this does it not?
As above, I think the argument is weakest in that it seems to posit that once an issue has been identified there's no space for additional research.
What argument do you think the paper makes? And what issue do you think it identifies? Thanks
On Monday, June 29th, 2026 at 10:50 AM, Vinnie Falco <vinnie.falco@gmail.com> wrote:
On Mon, Jun 29, 2026 at 7:10 AM Matt Borland via Paper-reviews <paper-reviews@lists.wg21.org> wrote:
It looks like after many years of research and development they've arrived back at a similar problem in a narrower form. I think it's less they rediscovered the problem and more their hypothesis failed, which in research is completely ok.
Right, and P4286, which is an information-only paper, shows this does it not?
Rediscover means that the information was lost and then found again. The S/R authors clearly knew about this information since they wrote about it. I would say that it's not rediscovery and should be framed more as convergence.
What argument do you think the paper makes? And what issue do you think it identifies?
The paper's argument is the rediscovery of the shape of the executor in the form of infallible scheduler from S/R. The core issue is that the networking TS was blocked over the same problem. Matt
On Mon, Jun 29, 2026 at 8:02 AM Matt Borland <matt@mattborland.com> wrote:
Rediscover means that the information was lost and then found again. The S/R authors clearly knew about this information since they wrote about it. I would say that it's not rediscovery and should be framed more as convergence.
The information was lost. That is what the earlier papers in this series establish. * P4094R1 shows that the executor unification in P0443 collapsed the three continuation primitives dispatch, post, and defer, into a single execute(F&&). * P4095R1 shows that P1525R0 analyzed that unified operation under the work framing alone: "eagerly submits" a callable "on an execution agent that the executor creates for it." The continuation primitives do not appear. * P4096R1 shows P2464R0 did the same. The continuation framing from Kohlhoff's P0113R0 was erased from the API surface and absent from both analyses. I coined the term Rationale Loss to describe the phenomenon when tacit knowledge which informed a paper is lost in subsequent papers from different authors on the same subject. Those three papers predate P3941R4. They identified the framing distinction and showed that the continuation framing had been lost. P3941R4 then required infallibility for schedulers used with affine_on: exactly the shape the continuation framing predicts! P4286 connects the two: the prediction held. The committee arrived back at the shape that was already there in P0113R0. That is rediscovery, not convergence. You converge on something new. You rediscover something that was already known and lost from the analysis.
The paper's argument is the rediscovery of the shape of the executor in the form of infallible scheduler from S/R. The core issue is that the networking TS was blocked over the same problem.
The paper's argument is that the framing analysis from P4094, P4095, and P4096 is validated by P3941R4. Those papers identified two readings of execute(F&&) - work framing and continuation framing - and showed that P1525R0 and P2464R0 used only the work framing. Under the work framing, infallibility is a defect. Under the continuation framing, it is the correct shape. P3941R4 requires infallibility for the exact role - scheduling a continuation - where the continuation framing says it belongs. The core issue is not that the Networking TS was blocked over "the same problem." It is that the constraint called a defect in 2021 was analyzed under the wrong framing, and the committee re-derived the same constraint when it needed to schedule continuations in task. It is not the same problem because under the continuation framing it is not a problem. The paper could probably be reworded to make this crystal clear, since the point obviously did not land. Thank you for your feedback! Best
Thank you for giving us this opportunity to review this work. As previously discussed, I am: - not a coroutine expert - not a networking expert - but I know how to write papers and pedagogical material Disclosure: I am compensated by the C++ Alliance, which authored this paper. All paragraphs written in this review aim at showcasing pedagogy/structure rather than making technical points. Overall this work is rather impressive and interesting, but the paper's current form dilutes the message to the point where reviewers had to question its usefulness. This is a shame because I believe the message is interesting and important. The work accomplished is impressive and important: it draws on a decade of technical debates to identify a pattern that previous discussions missed, informing future design discussions. The core information being surfaced by this work exists but is diluted across papers, making it likely to be rediscovered multiple times (or not at all) and causing progress in standardization to be more erratic. Making this explicit in a single paper has merit. That being said, in its current shape, the paper asks reviewers and readers to perform not a review, but a meta-analysis, which is not acceptable. That is, to understand and guarantee the paper's claims, one has to read the paper trail: | Document | words | read at 100 wpm | |---|---|---| | P4286R0 under review | ~2,000 | ~20 min | | P4094R1 | ~8,000 | ~80 min | | P4095R1 | ~4,000 | ~40 min | | P4096R1 | ~4,500 | ~45 min | | P3552R3 | ~19,000 | ~190 min | | P3941R4 | ~8,500 | ~85 min | | P4003R3 | ~5,500 | ~55 min | | P0113R0| ~20,000 | ~200 min | | P1525R0 | ~4,000 | ~40 min | | P0443R14 | ~16,000 | ~160 min | | P2464R0 | ~3,500 | ~35 min | | **Total (10 papers)** | **~93,000** | **~15.5 h** | This poses an ethical problem and a strategic problem. The ethical problem emerges when unpaid reviewers try to review/read this paper: they are likely to skim through or not complete the review. This biases the review process towards paid work and C++ Alliance affiliation. It's better than nothing but the bias is worth understanding and its consequences on the C++ open source communities must be also appreciated (we want community volunteers to jump in such process, not jump out). The strategic problem is the most critical: the purpose of this paper is to get reviewed by a committee that will likely 1) not have the sufficient background to assess the paper's merit based on pre-existing knowledge of the field, and 2) not have the time to build the required knowledge. IMO the solution to these two issues is, as mentioned by previous reviewers, to make the paper self-contained. I hope to present some ideas below on how to achieve this better. ## Abstract The first place to begin with is, like the previous paper, the abstract. To increase the chances of being read, understood and accepted, any abstract must follow the same pedagogical pattern. Following the structure from the previous review, it could look something like this (again, I'm no expert here, so forgive technical mistakes):
(broadest context) Designs are governed by invariants that often go unstated as principles. When an invariant is left implicit, the question it governs can be answered one way in one place and the opposite way in another, and the contradiction goes unnoticed because there is no stated principle to check either answer against. This paper surfaces one such invariant in C++'s asynchronous execution model. Asynchronous C++ is built on executors: the objects that decide where a suspended computation resumes, whether it should stop, and how its result is delivered. A recurring design question is whether the operation that schedules a resumption should itself be able to report a failure.
(narrowing) The committee has answered this differently at different times. In 2021 it set aside the Networking TS partly because its executors had no way to report such a failure, and stated this as a design deficiency. In 2026, std::execution::task requires (through affine_on, P3941R4) that the scheduler driving it be infallible, stating as a requirement it may not report a failure at all. The same property is, six years apart, a defect and a requirement.
(narrowing to the method) This paper asks whether that is a contradiction or a consequence. It examines the question across three executor designs spanning a decade, using one distinction: whether the thing handed to the executor is a task to run, with the caller still alive and able to act on a failure; or a handle that resumes a caller which has already suspended and is therefore unable to act on one.
(specific contribution, evidence, take-home) We show that the three designs converge on the same shape: a scheduling step that returns no value and reports no failure. The paper argues this follows from the caller's state, not from any one design, concedes where the correspondence is inexact, and draws a forward conclusion: an infallible scheduling step is the correct form for resuming a suspended caller, which bears on how a coroutine-native execution model (P4003R3) should sit alongside std::execution.
1) Disclosure
1) Disclosure
## Abstraction Layering Overall the abstraction layering is a mess. You want papers layered by abstraction level, similar to how a library is structured: present high level concepts first for easy entry, followed by progressive dives into details. You should isolate concepts at the same abstraction level in similar paragraphs, much like organizing details in a namespace within a library. The abstract, introduction, and transition paragraphs between sections MUST document this structure so the reader understands why they need to understand the details. ## ToC The clearest signal for information layering is the table of contents, but currently it reads like the beats of a blog post: 2) The Diagnosis 3) The Framing 4) The Return 5) The Coroutine Executor 6) The Symmetry 7) A Possible Objection 8) The Shape There is no intelligible message in the ToC, and it's degrading both human and automated capacity to extract high-level signals from the paper's body. They do not signal content or progress, they carry rhetorical/political arcs rather than structure: "The Diagnosis" frames the committee as terminally-ill patients, "The Symmetry" and "The Shape" frame the paper as a revelation. Although amusing to me (I get the intention), this may be felt negatively by others, which endangers the paper for no gain. In an automated pipeline for paper analysis, the first thing you will want to do is extract ToCs for mapping context to pages numbers, which is currently pessimized. So in any dimension considered, this is not an efficient way to convey your message. I suggest something like: 2) Background: the error-channel deficiency (P1525R0, P2464R0) 3) Two framings of execute(F&&) 4) The infallibility requirement (P3941R4) 5) The coroutine executor (P4003R3) 6) Comparison: a shared shape across three executors 7) Anticipated objection: incapability versus selective constraint 8) Conclusion: the shape follows from the caller's state ## Introducing and justifying the paper's structure This ToC will allow you to layer concepts and definitions in a more efficient manner in e.g. an Introduction or Method (keep the abstract, it answers a different problem). You could write something like:
The paper builds its case step by step. It first establishes the premise that the absent error channel was treated as a deficiency (Section 2), then introduces the distinction the whole analysis rests on, between scheduling work and scheduling a continuation (Section 3). With that definition lens in place, it turns to the other half of the apparent contradiction, the 2026 requirement that such schedulers be infallible (Section 4), and adds a third case that reaches the same constraint with no reference to the committee's history, the coroutine executor (Section 5). With three instances in hand, it compares them and draws out their common shape (Section 6), answers the strongest objection to that reading (Section 7), and closes by locating the cause of that shape in the caller's state rather than in any one design (Section 8)
## Make your definitions clear and explicit
Under the work framing ...
Under the continuation framing ...
This is confusing, as it's hard to understand that you are actually defining terms that are quintessential to the paper. I suggest:
The signature void execute(F&& f) admits two interpretations, here termed the **work framing** and the **continuation framing**. The two differ in what the callable `f` denotes and, consequently, in the state of the caller.
Under the work framing, f denotes a unit of work that the executor runs. The caller has delegated that work and continues to execute; it remains live and expects to observe the outcome. The absence of an error channel is then a defect, since a failure has no path back to a caller that is still running.
Under the continuation framing, f denotes a resumption handle: the mechanism by which a caller that has already suspended, or returned, is later resumed. The work is performed elsewhere, typically by the operating system, and the suspended caller is resumed with the result once it is available. The absence of an error channel is then not a defect, since no caller remains to receive one.
Whether the absent channel constitutes a defect or the correct form therefore depends on the framing, and in particular on whether the caller is running or suspended.
After this is stated, you can then feel free to drop particular paper references and quotes and more details, now that the reader has a high-level conceptual net where to land those bits of knowledge. ## The conclusion does not land well
The committee rediscovered that continuations need a continuation-framed executor.
This is almost circular and fails to provide a clear takeaway for the reader. If anything it weakens the paper's conclusion and diminishes its chances of being understood. Consider instead closing with something that provides value to the reader:
To decide whether a missing error channel is a defect or the correct form, the criterion is the caller's state, not which model of asynchrony is used (sender/receiver, coroutine, completion token): a step that resumes an already-suspended caller rightly has no error channel (in any model where it occurs) because there is no running caller left to receive one. Stating this once, as a model-independent principle, would spare C++ from re-deriving it design by design. Among those models, coroutines are where this is not one option but the default, since every co_await suspends the caller, so a coroutine-native execution vocabulary could be its most natural home. P4003R3 develops one such model.
## Other
This paper asks for nothing.
I am uncomfortable with this line. A paper always asks for something, and in this specific case it asks for something considerable: that the reader adopts a particular framing of the executor history and accepts an interpretation under which an established constraint is recast as correct, and maybe even read your other paper p4003R3. Maybe you meant "This paper does not ask for direct committee action". ## Did AI impact your perception Since I am being asked, I will answer truthfully. I do believe (personal interpretation) that authors have passed the threshold of AI usefulness in the writing process. There is a point where edition must become manual, paragraph by paragraph, sentence by sentence, word by word, in order to reconstruct a knowledge landscape that can be efficiently walked by a human reader. Humans at the end are reading the paper for understanding, so humans must construct this understanding. Correct but incorrectly structured information is not knowledge, to a reader it will be interepreted as noise. Knowledge is what you get when you arrange the information so that another human can absorb it: that rearranging is an act of intuition about what the reader already holds, what they maybe forgot, what they need next, and in what order. This is precisely what AI is poor at. I don't believe the problem of human pedagogy (i.e. making complex and diluted information intuitive and accessible) is solved by more tokens or more tooling. It is solved by a human doing that work. This connects to the ethical point made earlier. When the manual, intuitive reconstruction is not done (or not enough), it does not disappear: it is transferred to the reader and reviewers, who must rebuild the knowledge the paper should have presented. That goes uncredited, and unpaid for those not paid to do it. The issue is not that AI was used. It is that, in its current form, the final human pass that turns aggregated data into something a reader can learn from does not come through, even where it may in fact have been done. That is not only an ethical concern but a strategic one: you want reviewers, readers, and committee members to come away with the intuition that the work was carefully and manually crafted, and the current form does not convey that. ## Overall assessment Impressive underlying work, undercut by a form that asks the reader to reconstruct it from a very large paper trail. I enjoyed understanding the problem but the irony is that the paper did not really help me do so - I had to reconstruct my own understanding (probably off and/or incomplete), which is not the state you want any paper to be in. If made self-contained (with a pedagogical abstract, a descriptive ToC presented in a dedicated paragraph, concepts defined before they are used, and references used to support rather than carry the rationale), this could become a paper a committee can actually act on and that a reader can enjoy reading, and the message deserves that effort. Thank you again for the opportunity, I'm keen to see where it goes. Best wishes, Arnaud Becheler
Hi all, On Fri, 26 Jun 2026 at 20:12, Mungo via Paper-reviews <paper-reviews@lists.wg21.org> wrote:
Subject: Review request - P4286R0, "P3552: The Return of Networking TS Executors"
This is my review of P3552. Thanks Mungo for your submission. Affiliation disclosure: I'm currently affiliated with the C++ Alliance. Before diving into the specific questions, I'd like to say that I mostly agree with the feedback provided by my colleagues Arnaud and Matt about the structure of the paper. A hierarchical structure (more generic to more specific) would have helped me grasp the paper more easily. As with P4003R3, I would advise making the paper more self-contained. In particular, I'd suggest providing more context in point 5 (The Coroutine Executor). I think that a gentle introduction to any concepts that are part of the Network Endeavor would be helpful for readers that are not part of the Alliance. Since both Arnaud and Matt provided excellent feedback on the points about structure, I won't go into more details here. Some of the sentences sounded me reprobative towards the committee, rather than neutral ("The committee rediscovered that continuations need a continuation-framed executor.", "The infallible scheduling constraint that P3941R4 now imposes... applies to the exact domain where the same constraint was called a deficiency."). I think that these could be perceived negatively by some readers. English is however not my main language, and I have very little knowledge of committee politics, so I might be wrong, or these may be intentional/desirable. I just wanted to point out my honest reaction on reading these.
1. Is the historical trace accurate?
Does the path from P1525R0 and P2464R0 to the P3941R4 infallibility requirement hold up against the record? Are those papers characterized fairly, in particular the claim that P1525R0 and P2464R0 analyzed execute(F&&) under the work framing alone, and that the continuation framing from Kohlhoff's P0113R0 had been erased from the API surface by the time either was written?
To a certain point. The historical trail is explained well. P1525R0 does give a definition of execute(F&&) framed as work submission. Yet it also uses the term "continuation" in section 3.3 when arguing on why "no error reporting" is considered a deficiency. I don't think P2464R0 treats execute(F&&) under the work framing at all. The word "continuation" appears 38 times. It talks about submitting continuations to the executor and why the author considers it problematic that these executors don't have a way to report back errors that may happen between continuation submission and actual continuation invocation. I may just be being candid and missing the point, but I'd be cautious about making the claim regarding P2464R0.
2. Did the use of AI affect your perception?
The papers in this series, and the review program you are reading this on, were developed with heavy AI assistance, and I am not hiding that. Whether or not you suspect it of this paper, I want to know candidly whether that knowledge changed how you read it. Did it raise or lower your trust? Did you go looking for tells, and did you find any? Did it make you more or less rigorous than you would be with a paper written entirely by hand? I would rather you name this in your review than leave it unsaid.
Yes, negatively. I mostly agree with what other reviewers have said about assuming available context, so I won't repeat it here. Some LLM'isms: * "P1525R0's own definition confirms the framing it assumed" * "Eagerly submits." "Execution agent that the executor creates." The language is work submission throughout. * "A scheduler used with affine_on may complete only with set_value(). No set_error. No set_stopped."
3. Is the structural claim sound?
The heart of the paper is the symmetry in Section 6: that the P0443R14 executor, the infallible scheduler of P3941R4, and the coroutine executor of P4003R3 share one shape - a scheduling operation that delivers no value and offers a suspended caller no channel through which to receive a failure. The match is not clean across the board, and the paper says so: by its own table the coroutine executor expresses cancellation through destroy() on the handle, and its post can throw before it accepts the work. Does the symmetry hold where the paper claims it, or is the match overstated? Is its account of those differences right? And is the central claim convincing, that an infallible scheduling operation is the correct shape for a continuation rather than a defect to be fixed?
To a point. If I understood P3941R4 correctly, the infallibility requirement applies only when using affine_on. execution::task defaults to using affine_on, so it can be argued that the infallibility requirement will apply in many cases. But executor affinity AFAIK can be disabled, and the infallibility requirement wouldn't apply, yet you would be submitting continuations rather than work. Note however that I'm not an expert in senders/receivers. The table looks correct and the comparisons look sound, but I don't know if the conclusion "an infallible scheduling operation is the correct shape for a continuation rather than a defect to be fixed" follows immediately from it.
4. What is missing, and where is the argument weakest?
What would undercut the claim? I am looking for counter-readings of P1525R0 and P2464R0, places where the work and continuation framings are not as clean a split as the paper draws, executor history it moves past, and consequences it does not follow through. Tell me what you went looking for and did not find.
See my comments above. Regards, Ruben.
On Tue, Jun 30, 2026 at 10:51 AM Ruben Perez via Paper-reviews < paper-reviews@lists.wg21.org> wrote:
I don't think P2464R0 treats execute(F&&) under the work framing at all. The word "continuation" appears 38 times.
From P2464: "A P0443 executor does not facilitate generic error handling. It doesn't allow writing generic code that can realize that some sort of an error occurred, and it provides no way to report errors that occur after work submission but before invoking a continuation." Note the phrasing: "after work submission." And then "before invoking a continuation." P2464 is explicit: it says it is a defect that errors cannot be reported after submission but before the continuation is invoked. The retrospective papers ask: who would receive this error? The continuation is suspended, it can't be invoked. There is no one to receive it. That is continuation-framing. But P2464 treats it as work-framing. It presumes that the work-submitter is still going. It is not. It is suspended. Thanks
This is my review of the paper. 1. Is the historical trace accurate? Yes, but there are two things I would flag, one overstatement and one factual slip. The overstatement. Kohlhoff's own model treats `post` and `defer` differently. In P0113R0, the distinguishing property of `defer`, the one that carries the "continuation" semantics, is explicit: `defer` signals that this scheduling is a continuation of the current call context; `post` does not make that claim. P4286 treats `dispatch`/`post`/`defer` as a uniform "continuation-scheduling" trio, and that seems wrong. Only `defer` maps cleanly onto the continuation framing in Kohlhoff's own terminology. The factual slip. Par. 3 says "three of the four [P1525R0 authors] co-authored P2300." All four, Niebler, Shoop, Baker, Howes, appear on P2300R10 per the paper's own reference [10]. Minor, but it is evidence the paper uses (that the P1525R0 authors were participants in the executor unification), and it is wrong against the paper's own reference list. 2. Did knowing AI was used affect my read? Yes. I must say that the paper reads like a coherent argument by one author, but knowing AI was involved made me verify direct quotes at word-level. 3. Is the structural claim sound? Mostly. But there's one thing which is not clear to me: the par. 6 table row "Error channel" for P4003R3 says "None after acceptance. `post` throws before." That is a genuine deviation from the pattern. `post` throwing is exactly the "throw-before-submission" behavior that P1525R0 par. 2.2 explicitly criticized (the paper argues that generic code must be ready for `execute` to throw). It is not obvious why the same behavior is a defect in P0443 but acceptable in P4003R3. The paper does not defend the asymmetry; it presents "post throws before" as if it is a footnote. I would guess it is "the throw happens before ownership transfer, so the caller is still alive and has a stack to unwind on", but a reader has to reconstruct that themselves. 4. What is missing, and where is the argument weakest? a. The elided qualifier from P3941R4. Par. 4 quotes P3941R4 as ending "...a scheduler used with `affine_on` is infallible." The sentence in P3941R4 actually continues: "...is infallible, at least when used appropriately (i.e., when providing a receiver whose associated stop token is an `unstoppable_token`)." The quotation stops before the qualifier, and that qualifier opens a counter-reading the paper does not touch. If `set_stopped` is only forbidden when the receiver's stop-token is `unstoppable_token`, then the infallibility requirement is not a property of the continuation-scheduling role; it is a property of "the caller has opted out of cancellation for this operation." Under that reading, the symmetry with P0443R14 (where the caller had no cancellation opt-in mechanism at all) becomes weaker: P0443R14 excludes cancellation universally; P3941R4 excludes it when the caller asks for it to be excluded. Those are different design decisions. The paper should engage with this reading and either concede it or refute it. b. The diagnosis-to-return asymmetry between par. 2 and par. 4. Par. 2 tracks only "the absence of an error channel". Par. 4 tracks both `set_error` and `set_stopped`. If the symmetry is real, cancellation belongs on both sides, and P1525R0 par. 3 gives the material for cancellation-as-diagnosis. Adding cancellation to par. 2 would actually strengthen the argument (P1525R0 flagged four deficiencies; P3941R4 addresses at least two of them the same way). Right now the paper argues a one-dimensional diagnosis meets a two-dimensional return, and the mismatch is natural. -- Gennaro Prota <https://prota.dev>
The lack of goal makes it hard to review in the context of WG21. I keep thinking that a series of blog post would collect more readership. I.E, because it proposes nothing, and aim not at being presented, there is no point in trying to make it easier to present. I will note that the title implies some sort of proposed change, which will confuse people in WG21. There is some fluff here, that does not help neither the reader nor the paper, namely the disclosure section. just replace that by "This is an informational paper which does not propose any change to the standard". On to the thesis, with the caveat I'm not a library expert these days, let alone a executor or networking ts. I'm not the right person to review this but I tried! I felt it was a bit a bit one sided, the conclusion of P3941 is
In general *it seems unlikely that all schedulers can be constrained to be infallible*. As a result affine_on and, by extension, task won’t be usable with all schedulers if affine_on insists on using only infallible schedulers. If there are fallible schedulers, there aren’t any good options for using them with a task. Note that affine_on can fail and get cancelled (due to the main work failing or getting cancelled) but `affine_on can still guarantee that execution resumes on the expect execution agent when it uses an infallible scheduler.
I.E it's not saying that scheduling is infallible, rather than there is a mismatch between on one side scheduling can fail, and on the other, we have no clue what to do when scheduling fails (ie we don;t know where to get back to). In fact, my main question here is, LEWG decided in the context of P3941 to have `affine` require an infallible scheduler, which in effect seems to imply a task cannot be executed on a parallel scheduler. Am I correct? And if so, isn't that... limitating? Can that be improved? There was a different suggestion here, that is not mentioned or pondered. Maybe doing so would be informative. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2026/p3941r4.html#allow-... Nits: `affine_on` -> `affine` (it was renamed at some point)
participants (9)
-
Andrzej Krzemieński -
arnaud.becheler@gmail.com -
corentinjabot@gmail.com -
Gennaro Prota -
Ion Gaztañaga -
Matt Borland -
Mungo -
Ruben Perez -
Vinnie Falco