Submit form with programmatically added input field sends empty value

For a test, I am using WebClient to download a static HTML page and click on the Submit button.
Before I submit, I am dynamically adding an input field to the form. In the server, I expect the extra field to be received. I can see the key is received, but the value is blank. If I append more than one input field, they all have blank values.
I am using the latest HtmlUnit 3.3.0. It is listed in Maven Central with date June 4, 2023:

        <dependency>
            <groupId>org.htmlunit</groupId>
            <artifactId>htmlunit</artifactId>
            <version>3.3.0</version>
            <scope>test</scope>
        </dependency>

I tried to trace the issue in WebClient. I think the problem might be in SubmittableElement.getSubmitNameValuePairs(). For the static HTML form fields, it returns the name and value. For the dynamically added form field, it returns name with blank value.
If there is a workaround for the problem, please let me know. It would be much appreciated!
In the meantime, I created a unit test to reproduce and demonstrate the issue. It uses WebClient and MockWebServer. The request and response bodies are captured and printed for both requests (GET HTML page, and POST HTML form).
This is the input field I programmatically append to the form.
HtmlTextInput[<input type="hidden" name="appendedTextName" value="appendedTextValue">]

This is the POST request body received by the server. Notice appendedTextName at the end with an empty value, instead of the expected value.
staticTextName=staticTextValue&staticHiddenName=staticHiddenValue&staticCheckboxName=staticCheckboxValue&appendedTextName=

Here is the unit test.
package org.mypackage;

import lombok.extern.slf4j.Slf4j;
import okhttp3.mockwebserver.MockResponse;
import okhttp3.mockwebserver.MockWebServer;
import okhttp3.mockwebserver.RecordedRequest;
import org.htmlunit.Page;
import org.htmlunit.WebClient;
import org.htmlunit.html.DomElement;
import org.htmlunit.html.HtmlElement;
import org.htmlunit.html.HtmlForm;
import org.htmlunit.html.HtmlPage;
import org.htmlunit.html.SubmittableElement;
import org.htmlunit.util.NameValuePair;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.springframework.http.HttpStatus;

import java.io.IOException;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.util.List;

import static java.util.Objects.requireNonNull;
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;

@Slf4j
public class HtmlInputBugReportTest {
    private static final String STATIC_HTML_PAGE_WITH_FORM = """

          <title>Static Page With Form</title>

            <form name="staticForm" method="post" action="http://localhost:%PORT%/">
              <input type="text" name="staticTextName" value="staticTextValue"/>
              <input type="hidden" name="staticHiddenName" value="staticHiddenValue"/>
              <input type="checkbox" name="staticCheckboxName" value="staticCheckboxValue" checked/>
              <button type="submit">Submit Button</button>
            </form>

    """;

    private static MockWebServer MOCK_WEB_SERVER;

    @BeforeAll static void beforeAll() throws IOException {
        MOCK_WEB_SERVER = new MockWebServer();
        MOCK_WEB_SERVER.start();
    }

    @AfterAll static void afterAll() throws IOException {
        MOCK_WEB_SERVER.shutdown();
    }

    @Test void appendNonEmptyInputValueToFormDoesNotWork() throws IOException, InterruptedException {
        try (final WebClient webClient = new WebClient()) {
            // enqueue GET response (i.e. static HTML page with a form)
            final String staticHtmlPage = STATIC_HTML_PAGE_WITH_FORM.replace("%PORT%", Integer.toString(MOCK_WEB_SERVER.getPort()));
            MOCK_WEB_SERVER.enqueue(new MockResponse().setResponseCode(200).setBody(staticHtmlPage));

            // request the static HTML page
            final HtmlPage htmlPage = webClient.getPage("http://localhost:" + MOCK_WEB_SERVER.getPort());
            final RecordedRequest recordedGetRequest = MOCK_WEB_SERVER.takeRequest();
            final String getRequestBody = recordedGetRequest.getBody().readUtf8(); // GET request body, as received by the server
            final String getResponseBody = htmlPage.getBody().asXml(); // GET response body, as received by the client
            log.info("Client's GET request body:\n{}", getRequestBody);
            log.info("Client's GET response body:\n{}", getResponseBody);
            assertThat(htmlPage.getWebResponse().getStatusCode()).isEqualTo(HttpStatus.OK.value()); // Expect HTTP 200 OK
            assertThat(recordedGetRequest.getMethod()).isEqualTo("GET");
            assertThat(recordedGetRequest.getHeader("Content-Type")).isNull();
            assertThat(getRequestBody).isEmpty();

            // dynamically append an input field to the form in the parsed static HTML page
            final String appendedTextName = "appendedTextName";
            final String appendedTextValue = "appendedTextValue";
            final HtmlForm htmlForm = requireNonNull(htmlPage.getFormByName("staticForm"));
            final DomElement domElement = htmlPage.createElement("input");
            domElement.setAttribute("type", "hidden");
            domElement.setAttribute("name", appendedTextName);
            domElement.setAttribute("value", appendedTextValue);
            htmlForm.appendChild(domElement);
            log.info("Appended to the form: {}", domElement); // HtmlTextInput[<input type="hidden" name="appendedTextName" value="appendedTextValue">]

            // before submit, check if the client dynamically appended the input field to the form with the expected name and value
            final SubmittableElement submittableElement = (SubmittableElement) domElement;
            final NameValuePair nameValuePair = submittableElement.getSubmitNameValuePairs()[0];
            assertThat(nameValuePair.getName()).isEqualTo(appendedTextName);
//          assertThat(nameValuePair.getValue()).isEqualTo(appendedTextValue); // Root cause of server receiving name with empty value

            // enqueue POST response (i.e. content doesn't really matter)
            MOCK_WEB_SERVER.enqueue(new MockResponse().setResponseCode(200).setBody("Received your request").addHeader("Content-Type", "text/plain; charset=UTF-8"));

            // submit the form by clicking the Submit button
            final List<HtmlElement> submitButton = requireNonNull(htmlForm.getElementsByAttribute("button", "type", "submit"));
            final Page submitResponse = submitButton.get(0).click();
            final RecordedRequest recordedPostRequest = MOCK_WEB_SERVER.takeRequest();
            final String postRequestBody = recordedPostRequest.getBody().readUtf8(); // POST request body, as received by the server
            final String postResponseBody = submitResponse.getWebResponse().getContentAsString(); // POST response body, as received by the client
            log.info("Client's POST request body:\n\n{}\n", postRequestBody);
            log.info("Client's POST response body:\n\n{}\n", postResponseBody);
            assertThat(submitResponse.getWebResponse().getStatusCode()).isEqualTo(HttpStatus.OK.value()); // Expect HTTP 200 OK
            assertThat(recordedPostRequest.getMethod()).isEqualTo("POST");
            assertThat(recordedPostRequest.getHeader("Content-Type")).isEqualTo("application/x-www-form-urlencoded");
            assertThat(postRequestBody).isNotEmpty();

            // find the dynamically appended input field in the request body received by the server, and validate it has the expected value that the client intended to send
            for (final String parameterKeyEqualsValue : postRequestBody.split("&")) {
                final String[] parameterKeyAndValue = parameterKeyEqualsValue.split("=", 2);
                final String name = URLDecoder.decode(parameterKeyAndValue[0], StandardCharsets.UTF_8);
                final String value = URLDecoder.decode(parameterKeyAndValue[1], StandardCharsets.UTF_8);
                if (name.equals(appendedTextName)) {
                    assertThat(value).isEqualTo(appendedTextValue); // FAILS: Server received the expected name but not the value, because the client sent an empty value
                }
            }
        }
    }
}

Sorry, but I'm on vacation now,  will have a look next week.
Am 10. Juni 2023 00:37:08 MESZ schrieb Justin Cranford @.***>:

For a test, I am using WebClient to download a static HTML page and click on the Submit button.
Before I submit, I am dynamically adding an input field to the form. In the server, I expect the extra field to be received. I can see the key is received, but the value is blank. If I append more than one input field, they all have blank values.
I am using the latest HtmlUnit 3.3.0. It is listed in Maven Central with date June 4, 2023:

       <dependency>
           <groupId>org.htmlunit</groupId>
           <artifactId>htmlunit</artifactId>
           <version>3.3.0</version>
           <scope>test</scope>
       </dependency>

I tried to trace the issue in WebClient. I think the problem might be in SubmittableElement.getSubmitNameValuePairs(). For the static HTML form fields, it returns the name and value. For the dynamically added form field, it returns name with blank value.
If there is a workaround for the problem, please let me know. It would be much appreciated!
In the meantime, I created a unit test to reproduce and demonstrate the issue. It uses WebClient and MockWebServer. The request and response bodies are captured and printed for both requests (GET HTML page, and POST HTML form).
This is the input field I programmatically append to the form.
HtmlTextInput[<input type="hidden" name="appendedTextName" value="appendedTextValue">]

This is the POST request body received by the server. Notice appendedTextName at the end with an empty value, instead of the expected value.
staticTextName=staticTextValue&staticHiddenName=staticHiddenValue&staticCheckboxName=staticCheckboxValue&appendedTextName=

Here is the unit test.
package org.mypackage;

import lombok.extern.slf4j.Slf4j;
import okhttp3.mockwebserver.MockResponse;
import okhttp3.mockwebserver.MockWebServer;
import okhttp3.mockwebserver.RecordedRequest;
import org.htmlunit.Page;
import org.htmlunit.WebClient;
import org.htmlunit.html.DomElement;
import org.htmlunit.html.HtmlElement;
import org.htmlunit.html.HtmlForm;
import org.htmlunit.html.HtmlPage;
import org.htmlunit.html.SubmittableElement;
import org.htmlunit.util.NameValuePair;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.springframework.http.HttpStatus;

import java.io.IOException;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.util.List;

import static java.util.Objects.requireNonNull;
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;

@Slf4j
public class HtmlInputBugReportTest {
   private static final String STATIC_HTML_PAGE_WITH_FORM = """

         <title>Static Page With Form</title>

           <form name="staticForm" method="post" action="http://localhost:%PORT%/">
             <input type="text" name="staticTextName" value="staticTextValue"/>
             <input type="hidden" name="staticHiddenName" value="staticHiddenValue"/>
             <input type="checkbox" name="staticCheckboxName" value="staticCheckboxValue" checked/>
             <button type="submit">Submit Button</button>
           </form>

   """;

   private static MockWebServer MOCK_WEB_SERVER;

   @BeforeAll static void beforeAll() throws IOException {
       MOCK_WEB_SERVER = new MockWebServer();
       MOCK_WEB_SERVER.start();
   }

   @AfterAll static void afterAll() throws IOException {
       MOCK_WEB_SERVER.shutdown();
   }

   @Test void appendNonEmptyInputValueToFormDoesNotWork() throws IOException, InterruptedException {
       try (final WebClient webClient = new WebClient()) {
           // enqueue GET response (i.e. static HTML page with a form)
           final String staticHtmlPage = STATIC_HTML_PAGE_WITH_FORM.replace("%PORT%", Integer.toString(MOCK_WEB_SERVER.getPort()));
           MOCK_WEB_SERVER.enqueue(new MockResponse().setResponseCode(200).setBody(staticHtmlPage));

           // request the static HTML page
           final HtmlPage htmlPage = webClient.getPage("http://localhost:" + MOCK_WEB_SERVER.getPort());
           final RecordedRequest recordedGetRequest = MOCK_WEB_SERVER.takeRequest();
           final String getRequestBody = recordedGetRequest.getBody().readUtf8(); // GET request body, as received by the server
           final String getResponseBody = htmlPage.getBody().asXml(); // GET response body, as received by the client
           log.info("Client's GET request body:\n{}", getRequestBody);
           log.info("Client's GET response body:\n{}", getResponseBody);
           assertThat(htmlPage.getWebResponse().getStatusCode()).isEqualTo(HttpStatus.OK.value()); // Expect HTTP 200 OK
           assertThat(recordedGetRequest.getMethod()).isEqualTo("GET");
           assertThat(recordedGetRequest.getHeader("Content-Type")).isNull();
           assertThat(getRequestBody).isEmpty();

           // dynamically append an input field to the form in the parsed static HTML page
           final String appendedTextName = "appendedTextName";
           final String appendedTextValue = "appendedTextValue";
           final HtmlForm htmlForm = requireNonNull(htmlPage.getFormByName("staticForm"));
           final DomElement domElement = htmlPage.createElement("input");
           domElement.setAttribute("type", "hidden");
           domElement.setAttribute("name", appendedTextName);
           domElement.setAttribute("value", appendedTextValue);
           htmlForm.appendChild(domElement);
           log.info("Appended to the form: {}", domElement); // HtmlTextInput[<input type="hidden" name="appendedTextName" value="appendedTextValue">]

           // before submit, check if the client dynamically appended the input field to the form with the expected name and value
           final SubmittableElement submittableElement = (SubmittableElement) domElement;
           final NameValuePair nameValuePair = submittableElement.getSubmitNameValuePairs()[0];
           assertThat(nameValuePair.getName()).isEqualTo(appendedTextName);
//          assertThat(nameValuePair.getValue()).isEqualTo(appendedTextValue); // Root cause of server receiving name with empty value

           // enqueue POST response (i.e. content doesn't really matter)
           MOCK_WEB_SERVER.enqueue(new MockResponse().setResponseCode(200).setBody("Received your request").addHeader("Content-Type", "text/plain; charset=UTF-8"));

           // submit the form by clicking the Submit button
           final List<HtmlElement> submitButton = requireNonNull(htmlForm.getElementsByAttribute("button", "type", "submit"));
           final Page submitResponse = submitButton.get(0).click();
           final RecordedRequest recordedPostRequest = MOCK_WEB_SERVER.takeRequest();
           final String postRequestBody = recordedPostRequest.getBody().readUtf8(); // POST request body, as received by the server
           final String postResponseBody = submitResponse.getWebResponse().getContentAsString(); // POST response body, as received by the client
           log.info("Client's POST request body:\n\n{}\n", postRequestBody);
           log.info("Client's POST response body:\n\n{}\n", postResponseBody);
           assertThat(submitResponse.getWebResponse().getStatusCode()).isEqualTo(HttpStatus.OK.value()); // Expect HTTP 200 OK
           assertThat(recordedPostRequest.getMethod()).isEqualTo("POST");
           assertThat(recordedPostRequest.getHeader("Content-Type")).isEqualTo("application/x-www-form-urlencoded");
           assertThat(postRequestBody).isNotEmpty();

           // find the dynamically appended input field in the request body received by the server, and validate it has the expected value that the client intended to send
           for (final String parameterKeyEqualsValue : postRequestBody.split("&")) {
               final String[] parameterKeyAndValue = parameterKeyEqualsValue.split("=", 2);
               final String name = URLDecoder.decode(parameterKeyAndValue[0], StandardCharsets.UTF_8);
               final String value = URLDecoder.decode(parameterKeyAndValue[1], StandardCharsets.UTF_8);
               if (name.equals(appendedTextName)) {
                   assertThat(value).isEqualTo(appendedTextValue); // FAILS: Server received the expected name but not the value, because the client sent an empty value
               }
           }
       }
   }
}

--
Reply to this email directly or view it on GitHub:
https://github.com/HtmlUnit/htmlunit/issues/606
You are receiving this because you are subscribed to this thread.
Message ID: @.***>

Sounds l8ke another regression and like the fix can be easy. Thanks for the analysis.

Back from vacation
This is not really a regression but more a result of the old code was based on a side effect regarding the value handling.... but anyhow this should be no fixed.
@justincranford please try with 3.4.0-SNAPSHOT and report your results here

Thank you! I tried 3.4.0-SNAPSHOT and it worked.
To make sure, I ran the above unit test with 3.3.0 and 3.4.0-SNAPSHOT. The problem is present with 3.3.0, and it goes away with 3.4.0-SNAPSHOT. I tried some other tests locally as well, and they worked too.

Great, a new release is planned for this weekend...


Connector ignores clients of Categories

Q
A

Bug?
yes

Version
2.0 latest

The plenty REST API for /categories?with=clients returns a list of clients, for which a category is active/assigned (the clients field of entries). This is currently ignored by the connector. This causes all existing and configured categories in plenty to be created in Shopware.

Hallo Franz,
the bug should be fixed in my current development branch. Could you verify that?
Best regards,
Jochen

verified with your installation. Thanks for your help franz :)


Automated Package Upgrade

:tada: This PR is included in version 25.5.47 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


Casting from list of strings to floats

Hi,
I ran into the following issue and wondered what the best way to proceed is.  I loaded some data from a text file and tried to convert it to an array. This seemed to work fine in ordinary numpy but raises an error in jax.
Is this a feature that Jax might benefit from? Do you have a recommended way around this?
thanks!
heres a minimal reproduction:
>>> import numpy as np
>>> import jax.numpy as jnp
>>> x = np.array('3.4').astype(np.float32)
>>> y = jnp.array('3.4').astype(jnp.float32)
Traceback (most recent call last):
  File "/Users/Raza/miniconda3/envs/active-learning/lib/python3.6/site-packages/jax/interpreters/xla.py", line 126, in abstractify
    return pytype_aval_mappings[type(x)](x)
KeyError: <class 'str'>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/Raza/miniconda3/envs/active-learning/lib/python3.6/site-packages/jax/numpy/lax_numpy.py", line 1653, in array
    out = lax.reshape(object, ())
  File "/Users/Raza/miniconda3/envs/active-learning/lib/python3.6/site-packages/jax/lax/lax.py", line 635, in reshape
    old_sizes=onp.shape(operand))
  File "/Users/Raza/miniconda3/envs/active-learning/lib/python3.6/site-packages/jax/core.py", line 150, in bind
    return self.impl(*args, **kwargs)
  File "/Users/Raza/miniconda3/envs/active-learning/lib/python3.6/site-packages/jax/lax/lax.py", line 2475, in _reshape_impl
    dimensions=dimensions, old_sizes=old_sizes)
  File "/Users/Raza/miniconda3/envs/active-learning/lib/python3.6/site-packages/jax/interpreters/xla.py", line 142, in apply_primitive
    compiled_fun = xla_primitive_callable(prim, *abstract_args, **params)
  File "/Users/Raza/miniconda3/envs/active-learning/lib/python3.6/site-packages/jax/interpreters/xla.py", line 128, in abstractify
    raise TypeError("No abstraction handler for type: {}".format(type(x)))
TypeError: No abstraction handler for type: <class 'str'>

In general JAX doesn't support string types. However, in this case, there's an easy workaround: you can first cast your array to a classic Numpy array and then convert the result to a JAX array, e.g., jnp.array(np.array('3.4').astype(np.float32))
Does that work for you?

Thanks. Thats exactly what I ended up! :)


test(custom-compiler): deprecated ttypescript and use ttsc

Summary
Less frequent updates to ttypescript and less attention to maintenance.
That's why we recommend the following libraries ttsc
And this support TS@5
Test plan
With<EMAIL_ADDRESS>
Does this PR introduce a breaking change?

[ ] Yes
[x] No

Other information

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage decreased (-0.02%) to 95.81%

Totals

Change from base Build<PHONE_NUMBER>:
-0.02%

Covered Lines:
4055

Relevant Lines:
4154

💛  - Coveralls

Do I need to modify the legacy side as well?
I think that's out of my scope of work.
@kulshekhar

Yes pls do because that is the codes currently running, even though it’s called legacy but it is the actual main source codes

Make sure to present solid evidence and arguments in the linked issue.
Don't just make unsubstantiated claims here and there.
If you have enough evidence, I will withdraw the promotion.

This conversation has gotten out of hand. I've been cordial to you and tried to help, and you've been rude and have even sworn at me in response.
I told you the problem, and I told you where to look in existing issues to better understand the problem.
The fact is, I've been working on and maintaining this for years. You jumped on 5 minutes ago, and arrogantly assumed you could solve the problem by changing one line of code.
You'll also note that Jake at Microsoft who did the changes in ts agrees with me on this. That's because it's not a matter of opinion; it's a matter of understanding the code and the problem, which you've admitted you don't.
I  gave you the very line of code that would do absolutely nothing for v5. I wrote that code. I told you where you could find detail of what that line of code does, in a conversation I had with the MSFT engineer.
I also told you how to run the program in the debugger to prove that the line of code would do nothing.

So to recap:

Both the author of the code you copied and the author of the typescript compiler itself agree that it won't work.

I told you how you can use the debugger to prove it

I told you where to find our discussion to better understand the problem.

If after all of that, you say you're unconvinced, to be frank, I don't care.
If you're not willing to believe the people who wrote the code that you admit dont understand, you can stay unconvinced. I've gone above and beyond to help.
The bottom line is this -
The ternary expression I showed you covers two possible paths. Pre 4.9 and 4.9. Ideally I should have written a throw statement for 5.0 or above, but I did not.
That being said, if you're going to copy mine and cevek's work, you should have the humility to believe us when we tell you we know it won't work for 5.0. If it was as easy and dropping ts, do you think I wouldn't have done it myself?
The problem is that tsc drops a huge amount of the compiler codebase. This is not hard to verify for yourself. Look at the compiled output and the file size, then look at the actual code.
Transformers which rely on those parts of the compiler will fail. The line of code you don't understand splices in the dropped parts in a surgical manner to fix this.
If you don't want to believe me, the person whe wrote ts-patch, fine. Believe the guy at Microsoft who's writing the compiler.
That said, I will not be responding further to you.  The FOSS community is a largely respectful one, particularly among maintainers of major libraries. Your ignorance, arrogance, and hostility will not take you far in this space. It looks like you're young, so hopefully this can help provide some guidance for the future, but I'm bowing out of this conversation now.
To the author of ts-jest, if you'd like further detail, please let me know, and I'll be happy to provide more detail.

I'll be diving into the relevant conversations, which seem to be spread across repos, after work today to get an understanding of the situation.
Let's please hold off on merging until then.

@kulshekhar fwiw, we expect to release the new version of tsp early next week, which will also have drop-in replacement for ttsc. Only difference for migration purposes is the command: which will be tspc. I am also planning to do a write-up that explains why the prior approach started in ttypescript (which tsp was originally based on) is largely unsound and how it became more unsound with the new ts version.
This debacle is a great illustration of that, unfortunately. We have regex replace doing code manipulation, which is bad enough. There is also no throw if it fails, leading to situations like this where people think it's working because it doesn't throw.
The proper and most future-proof solution is through AST manipulation, which we've implemented. To mitigate perf differences, we've also introduced caching, which should ultimately even improve speed over former tsp and ttypescript after the first run.
Any other questions, feel free to ask. Sorry for the drama making it to your inbox!

The one thing on this is that in some messages you're claiming that this is a temporary solution that works in some cases. I told you that was fine, so long as it was made clear to users. In others places, however, you presented it as "competition" and a working solution. My main concern was that people understood this wasn't going to work as it's intended.

I'm guessing it's a mix of contexts that led to the miscommunication.
Also, I feel bad for the ts-jest developers for bringing this up here.
Since our conversation, I think it's better to talk about this custom-compiler stuff through the following URL.
https://github.com/cevek/ttypescript/issues/140
I don't think it's good for misunderstandings to build up, so I'll just summarize my side of the story.
Let me summarize where I think the miscommunication came from.

when you said "Creating another fork is not good imo.", I thought you were talking about "competition".
So I responded to the conversation underneath by saying "I'm not interested in extending features."

var StatisticType was a part of my ttsc library that was not even touched in TS@5.
The ternary operator in question requires a major of at least 4 and a minor of at least 9, so the
It is not touched in any TS@5 release to date.
So I didn't understand what you were trying to say.

structural differences and issues like this are something I'm aware of, and I'm expect we have different ideas of what we mean by "a working library" and "a library that is maintained and contributes to the ecosystem".

@sunrabbit123 @nonara thank you both for bringing the conversation back to a respectable tone. It's easy for conversations to get out of hand especially in a remote/online context so I want to commend you both for the way you've brought tempers back down. Thank you.
I've gone through the comments here and elsewhere to gain a little bit of an understanding based on which, it sounds like the updates in the newly proposed library won't work when tsc is updated to v5. I've only read through these once so if I'm mistaken, please let me know.
However, if this understanding is correct, I propose closing this PR for now.

While this works for now, it may become unworkable in the future as the TS structure changes.
Since you probably don't want this, let's close it.

@kulshekhar Just a heads up — tsp v3 is now released and should work here. You can simply use tspc instead of ttsc


Chart: optimize operator availability

What type of PR is this?
/enhancement
Which issue(s) this PR fixes?
Fixes #415
What this PR does?
Summary:

update chart version to 0.1.2.(we can update helm repo using ci)
provide a parameter tolerationSeconds in values.yaml

Special notes for your reviewer?

Only one Operator will work at the same time, But using multiple replicas can reduce the failover time of a single Operator.
If you must use the Operator of a single replica, it is recommended to set the tolerationseconds to a suitable value.


implicitly locally store content ids based on their hash id

Currently, you have to specify which hash type to use for local storage, with default hash type sha256.
Suggested is to make lookup or cloning of content by their id store based on their content id only.
e.g.,
instead of having to say:
preston cat --algo md5 --remote https://zenodo.org hash://md5/46fab6751bafd4de4f49aaa8c511e39d | head
followed by offline version:
preston cat --algo md5 hash://md5/46fab6751bafd4de4f49aaa8c511e39d
You can omit the --algo because the content id already documents their type,
preston cat --remote https://zenodo.org hash://md5/46fab6751bafd4de4f49aaa8c511e39d | head
and be able to retrieve a locally kept copy using:
preston cat hash://md5/46fab6751bafd4de4f49aaa8c511e39d | head

now, after
preston cat --remote https://zenodo.org/ hash://md5/46fab6751bafd4de4f49aaa8c511e39d | head

I was able to produce:
$ preston cat  hash://md5/46fab6751bafd4de4f49aaa8c511e39d | md5sum
46fab6751bafd4de4f49aaa8c511e39d  -


Permission denied error

I am running batch_transcode on a Macbook pro(el capitan) and get the following error.  Do you any ideas how to resolve this?
glob error { Error: EACCES: permission denied, scandir '/Library/Application Support/ApplePushService'
at Error (native)
errno: -13,
code: 'EACCES',
syscall: 'scandir',
path: '/Library/Application Support/ApplePushService' }

You need to specify an input path using the --input option and an output path using the --output option. Run batch-transcode-video --help to learn more about the options available.

I'm seeing the same thing, when specifying a path:
> batch-transcode-video --input "/Users/testuser/Desktop/FTETTM/" --output "/Users/testuser/Desktop/FTETTM/converted/"

Starting batch operation...

Current:                                                      0.0000%
          File:   [Scanning 0 files...]                       00h 00m 00s

Total:                                                        0.0000%
          Processed:                                          00h 00m 00s
          Status:

glob error { Error: EACCES: permission denied, scandir '/Users/Guest/Documents'
  errno: -13,
  code: 'EACCES',
  syscall: 'scandir',
  path: '/Users/Guest/Documents' }
Finished processing.

Error: [TranscodeError: File system error encountered while scanning for media.]
File: /**/*.{mp4,avi,mkv,m4v,ts,mov}
EACCES: permission denied, scandir '/Users/Guest/Documents'

Summary:                                                      0 files
          Status:
          Processed: 0.00 MB of 0.00 total MB                 NaN MB/s
          Time:   Total 00h 00m 00s (Avg: 00h 00m 00s)

 => Finished with errors.

I don't understand why it's ending up in such seemingly random directories, unless I'm building paths incorrectly.  Successive runs result in the access error occurring on different directories.

@chris-erickson I think I know what the problem might be in your case. batch-transcode-video expects input and output to be paths relative to the current directory where you are running the batch-transcode-video command.
I could add support for absolute paths, but right now it resolves input and output relative to the current working directory.


[stable/jenkins] add workingDir to default pod template

Checklist
[Place an '[x]' (no spaces) in all applicable fields. Please remove unrelated fields.]

[X] DCO signed
[X] Chart Version bumped
[X] Variables are documented in the README.md
[X] Title of the PR starts with chart name (e.g. [stable/mychartname])

/assign @mogaal

/lgtm

@ArchiFleKs Thank you for the PR!


[Feature Request] Notes Section

Me again :)
Is it possible to easily add a notes section down the bottom.
I just want to easily add something like:
Thank you for your business!
Please send payment confirmation to<EMAIL_ADDRESS>

Yes, you can control the output completely by writing your own custom template and using that. See the Writing templates page of the documentation for all the details.


docs: add PostHog analytics

Ran into an issue with setting up the HTML snippet, filed a ticket with PostHog


firefox-bin: 58.0.2 -> 59.0

(cherry picked from commit 43da40ecae3a49c2bdf42a5fdb6121bf3578350d)
Motivation for this change
New firefox version
Update script fixed
Things done

[x] Tested using sandboxing (nix.useSandbox on NixOS, or option build-use-sandbox in nix.conf on non-NixOS)
Built on platform(s)

[x] NixOS
[ ] macOS
[ ] other Linux distributions

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nox --run "nox-review wip"
[x] Tested execution of all binary files (usually in ./result/bin/)
[x] Fits CONTRIBUTING.md.

fixes severall security issues: https://www.mozilla.org/en-US/security/advisories/mfsa2018-06/


[$1000] mWeb - Correct chat is not opened by tapping chat link from external apps

If you haven’t already, check out our contributing guidelines for onboarding and email<EMAIL_ADDRESS>to request to join our Slack channel!

Action Performed:

Using Android m/Web, login to NewDot with account A and open any DM. Copy the report url from the address bar (like https://staging.new.expensify.com/r/1242891003534332
)
Paste it in any external app (Slack or Telegram)
Log in with same account (account A) in android app
In the android app, open any other chat (not the one you opened in step 1)
Go back to the external app and tap link you pasted in external app

Expected Result:
Chat from step 1 should be opened without any visual issues.
Actual Result:
Chat from step 4 stays on the screen
Workaround:
Unknown
Platforms:

Which of our officially supported platforms is this issue occurring on?

[ ] Android / native
[x] Android / Chrome
[ ] iOS / native
[ ] iOS / Safari
[ ] MacOS / Chrome / Safari
[ ] MacOS / Desktop

Version Number: <IP_ADDRESS>
Reproducible in staging?: yes
Reproducible in production?: yes
If this was caught during regression testing, add the test name, ID and link from TestRail:
Email or phone of affected tester (no customers):
Logs: https://stackoverflow.com/c/expensify/questions/4856
Notes/Photos/Videos: Any additional supporting documentation
https://github.com/Expensify/App/assets/93399543/3d58d3fa-b36d-4a2e-9e87-09ad2fded26c
Expensify/Expensify Issue URL:
Issue reported by: Applause - Internal Team
Slack conversation:
View all open jobs on GitHub
Upwork Automation - Do Not Edit

Upwork Job URL: https://www.upwork.com/jobs/~014ba3693591a9ecac
Upwork Job ID:<PHONE_NUMBER>428523520
Last Price Increase: 2023-06-19

This is not overdue, just reviewing now


smooth movement of markers on location change

i have multiple markers in my map whose positions are changed frequently whenever a marker changes a position it jumps from one location to another location.i want to smooth movement of marker between two positions.
i have used  https://github.com/terikon/marker-animate-unobtrusive this library in my js google map api and working fine but i tried to use the same library with this google map api  but dont know how to do it.
i have included the cdn link in my html code and globally initialized the smoothing library but nothing is changed i my map.
is there any better approach to smooth markers movement?

@SebastianM  please kindly address my issue too.

@ngKisor the current focus is to implement the core api features of google maps and this is not part of the core api. So this would be bette when you would write a custom extension for your use case. Sorry!


Improperly clearing escape codes from entries

skim isn't properly clearing up escape codes from entries passed to --preview via {}.
Skim version: 0.15.4
Steps to reproduce:
echo -e "\e[1;31mfile1\e[0m\0\e[31mfile2\e[0m\0\e[0mfile3\e[0m\0\e[2;32mfile4\e[0m\0" | sk --ansi --read0 --preview 'file -b {}'

Note that the output of file(1) for the entry file3 includes escape codes:
cannot open '\033[0mfile3\033[0m' (No such file or directory)

All these files (file[1-4]) are actually existent files, but file3 cannot be found due to embedded escape codes.
It seems to happen only with \e[0m (reset attribute) at the beginning of the entry (I've tried also with variants, like \e[0;0m, to no avail). Other color codes work as expected.

I was able to reproduce, thank you.
This will have to wait probably a few weeks though, unless you or someone else feels like opening a PR, as I have my hands very full atm with ratatui


Rename ObjectReconcilerNew to ObjectReconciler

Tested by 'make test' and manual testing on GKE cluster.

/assign @adrianludwin

/approve
/lgtm


MIssing section header

The last policy setting is missing a section header...
"User Account Control: Virtualize file and registry write failures to per-user locations"

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 2c137da7-0dee-f7cd-d7af-39df9b7c7d50
Version Independent ID: 06e5ff89-9392-d259-e431-da13e6134be0
Content: User Account Control security policy settings (Windows 10)
Content Source: windows/security/identity-protection/user-account-control/user-account-control-security-policy-settings.md
Product: w10
GitHub Login: @DaniHalfin
Microsoft Alias: daniha

@officedocsbot assign @mypil

@mikerodrick  - From our understanding, the issue has been resolved but it may take a few days for the merged content to appear in the article. If you feel it hasn't been resolved, please re-open this issue.
Thank you for your contribution to make the docs better! Much appreciated!

@officedocsbot close


json::diff generates incorrect patch when removing multiple array elements.

Removing multiple elements from an array will generate a patch which is incorrect.  Here is a unit test that will fail:
// Exists in TEST_CASE("JSON patch")
SECTION("remove multiple")
{
    json doc = R"(
        {
            "arr1": [1, 2, 3, 4]
        }
    )"_json;
    json expected = R"(
        {
            "arr1": [1, 2]
        }
    )"_json;

    // check roundtrip
    CHECK(doc.patch(json::diff(doc, expected)) == expected);
}

The patch that is generated is the following:
[
    {
        "op": "remove",
        "path": "/2"
    },
    {
        "op": "remove",
        "path": "/3"
    }
]

This fails obviously because first index 2 is removed, and then index 3 is attempted to be removed, but the size is only 2 at this point:
test/src/unit.cpp:13106: FAILED:
  CHECK( doc.patch(json::diff(doc, expected)) == expected )
due to unexpected exception with message:
  array index 3 is out of range

Sorry if this is already a known issue or not the right way to report this issue.  I will try to take a look into creating a fix if I have time.

Thanks for reporting! My diff algorithm is flawed in this point - I start processing arrays from the beginning, and never realized that I may invalidate indices...

I think I potentially have a fix.  I'll have to think about whether there is something naive with it.
In json::diff, use the following code block in place of what was there (comment remains intact):
// remove my remaining elements
size_t old_i = i;
i = source.size() - 1;
while (i >= old_i)
{
    result.push_back(object(
    {
        {"op", "remove"},
        {"path", path + "/" + std::to_string(i)}
    }));
    --i;
}
i = source.size();

I haven't yet looked through contribution guidelines quite yet, but I will do so later and create a pull request potentially.

@tmyersjstar, thanks for your proposal. In fact, I came up with the very same idea: I created a branch feature/issue269 (see 15a314a and 3f97a5d). Please let me know whether this works for you.

Awesome! I am using that latest source in my project and it is working correctly now.  The diff algorithm seems to be working correctly for at least the json objects I am generating.
Thanks for the fix and for creating this library!

You're welcome. I shall add a test case and merge the fix to the develop branch.
Just as a remark: The diff algorithm used is really primitive right now. I had a quick glance at what the Python package jsonpatch is doing... There is quite some optimization work to do form my side...


feat: ape pm CLI commands [APE-1133]

What I did
ugh so this is really needed for me to develop other features with. We are having issues with settings + dependencies and needing to work on that but needing this to develop that.
i mostly needed the compile cmd but added the others as well.
feat: CLI for listing both project and global packages installed
feat: CLI for installing packages, both from config or project or adhoc given dependencies
feat: CLI for compiling dependencies (and forcing recompile)
How I did it
create 3 click commands for handling all this stuff
How to verify it
ape pm list
ape pm list --all
ape pm install   # Install all packages listed in local project's config
ape pm install --force   # Force reinstall your project's dependencies
ape pm install gh:OpenZeppelin/openzeppelin-contracts --name OpenZeppelin --version "4.6.0" --force

Checklist

[ ] All changes are completed
[ ] New test cases have been added
[ ] Documentation has been updated

[ ] figure out how to handle ref:


Cannot build 32-bit json-glib on machine with large XFS filesystem

Describe the bug
On a build machine with a 4TB XFS filesystem, I am unable to build steam and appimage-run because the x86_32 build of json-glib fails:
unpacking sources
unpacking source archive /nix/store/0shi8pwxy8wbsdffg6j4kys8sigr221a-json-glib-1.4.4.tar.xz
source root is json-glib-1.4.4
setting SOURCE_DATE_EPOCH to timestamp<PHONE_NUMBER> of file json-glib-1.4.4/po/zh_TW.po
patching sources
configuring
meson flags: --buildtype=plain         --libdir=/nix/store/i6mxfcmvlyi3cc367zfiv3cacbkqmlkd-json-glib-1.4.4/lib --libexecdir=/nix/store/i6mxfcmvlyi3cc367zfiv3cacbkqmlkd-json-glib-1.4.4/libexec         --bindir=/nix/store/i6mxfcmvlyi3cc367zfiv3cacbkqmlkd-json-glib-1.4.4/bin --sbindir=/nix/store/i6mxfcmvlyi3cc367zfiv3cacbkqmlkd-json-glib-1.4.4/sbin         --includedir=/nix/store/ghjwchh5mpblxlfq16j2r5aw415va49g-json-glib-1.4.4-dev/include         --mandir=/nix/store/i6mxfcmvlyi3cc367zfiv3cacbkqmlkd-json-glib-1.4.4/share/man --infodir=/nix/store/i6mxfcmvlyi3cc367zfiv3cacbkqmlkd-json-glib-1.4.4/share/info         --localedir=/nix/store/i6mxfcmvlyi3cc367zfiv3cacbkqmlkd-json-glib-1.4.4/share/locale         -Dauto_features=enabled         -Dwrap_mode=nodownload         --prefix=/nix/store/i6mxfcmvlyi3cc367zfiv3cacbkqmlkd-json-glib-1.4.4
The Meson build system
Version: 0.51.2
Source dir: /build/json-glib-1.4.4
Build dir: /build/json-glib-1.4.4/build
Build type: native build
DEPRECATION: Duplicated values in array option is deprecated. This will become a hard error in the future.
DEPRECATION: Duplicated values in array option is deprecated. This will become a hard error in the future.
DEPRECATION: Duplicated values in array option is deprecated. This will become a hard error in the future.
Project name: json-glib
Project version: 1.4.4
C compiler for the host machine: /nix/store/5bvkmq6s0inz0by1racif1jpr2gi7win-gcc-wrapper-7.4.0/bin/cc (gcc 7.4.0 "gcc (GCC) 7.4.0")
DEPRECATION: Duplicated values in array option is deprecated. This will become a hard error in the future.
Build machine cpu family: x86
Build machine cpu: i686
Found pkg-config: /nix/store/6qscilmrkibizn5rnvjqs19xa53lkxzr-pkg-config-0.29.2/bin/pkg-config (0.29.2)
Run-time dependency gobject-2.0 found: YES 2.60.6
Run-time dependency gio-2.0 found: YES 2.60.6
Has header "unistd.h" : YES
Compiler for C supports arguments -Wcast-align: YES
Compiler for C supports arguments -Wlogical-op: YES
Compiler for C supports arguments -Wmissing-declarations: YES
Compiler for C supports arguments -Wmissing-format-attribute: YES
Compiler for C supports arguments -Wmissing-prototypes: YES
Compiler for C supports arguments -Wmissing-noreturn: YES
Compiler for C supports arguments -Wold-style-definition: YES
Compiler for C supports arguments -Wpointer-arith: YES
Compiler for C supports arguments -Wshadow: YES
Compiler for C supports arguments -Wstrict-prototypes: YES
Compiler for C supports arguments -Wunused: YES
Compiler for C supports arguments -Wno-discarded-qualifiers -Wdiscarded-qualifiers: YES
Compiler for C supports arguments -Wno-int-conversion -Wint-conversion: YES
Compiler for C supports arguments -fno-strict-aliasing: YES
Compiler for C supports arguments -Wno-uninitialized -Wuninitialized: YES
Compiler for C supports arguments -Werror=address: YES
Compiler for C supports arguments -Werror=array-bounds: YES
Compiler for C supports arguments -Werror=empty-body: YES
Compiler for C supports arguments -Werror=format=2: YES
Compiler for C supports arguments -Werror=implicit: YES
Compiler for C supports arguments -Werror=init-self: YES
Compiler for C supports arguments -Werror=int-to-pointer-cast: YES
Compiler for C supports arguments -Werror=main: YES
Compiler for C supports arguments -Werror=missing-braces: YES
Compiler for C supports arguments -Werror=nested-externs: YES
Compiler for C supports arguments -Werror=nonnull: YES
Compiler for C supports arguments -Werror=pointer-to-int-cast: YES
Compiler for C supports arguments -Werror=return-type: YES
Compiler for C supports arguments -Werror=sequence-point: YES
Compiler for C supports arguments -Werror=trigraphs: YES
Compiler for C supports arguments -Werror=undef: YES
Compiler for C supports arguments -Werror=write-strings: YES
Compiler for C supports arguments -fvisibility=hidden: YES
WARNING: -Wl,-Bsymbolic looks like a linker argument, but has_argument and other similar methods only support checking compiler arguments. Using them to check linker arguments are never supported, and results are likely to be wrong regardless of the compiler you are using. has_link_argument or other similar method can be used instead.
Compiler for C supports arguments -Wl,-Bsymbolic: YES
WARNING: -Wl,-z,relro looks like a linker argument, but has_argument and other similar methods only support checking compiler arguments. Using them to check linker arguments are never supported, and results are likely to be wrong regardless of the compiler you are using. has_link_argument or other similar method can be used instead.
Compiler for C supports arguments -Wl,-z,relro: YES
WARNING: -Wl,-z,now looks like a linker argument, but has_argument and other similar methods only support checking compiler arguments. Using them to check linker arguments are never supported, and results are likely to be wrong regardless of the compiler you are using. has_link_argument or other similar method can be used instead.
Compiler for C supports arguments -Wl,-z,now: YES
DEPRECATION: Project targetting '>= 0.40.1' but tried to use feature deprecated since '0.48.0': python3 module
Configuring config.h using configuration
WARNING: Project targetting '>= 0.40.1' but tried to use feature introduced in '0.50.0': install arg in configure_file
Configuring json-version.h using configuration
Program g-ir-scanner found: YES (/nix/store/kdssb3fp08mwrmwx5ywb0xylyk081afr-gobject-introspection-1.60.2-dev/bin/g-ir-scanner)
Found pkg-config: /nix/store/6qscilmrkibizn5rnvjqs19xa53lkxzr-pkg-config-0.29.2/bin/pkg-config (0.29.2)
Configuring gtkdocentities.ent using configuration
Run-time dependency glib-2.0 found: YES 2.60.6
Program xsltproc found: NO
Build targets in project: 38
WARNING: Project specifies a minimum meson_version '>= 0.40.1' but uses features which were added in newer versions:
 * 0.50.0: {'install arg in configure_file'}
WARNING: Deprecated features used:
 * 0.48.0: {'python3 module'}
Option buildtype is: plain [default: debugoptimized]
Found ninja-1.9.0 at /nix/store/jcvllscc3xg69dr7iy7vn35i2kc60jlw-ninja-1.9.0/bin/ninja
ninja: error: loading 'build.ninja': Value too large for defined data type
WARNING: Could not create compilation database.
meson: enabled parallel building
building
build flags: -j8 -l8
ninja: error: loading 'build.ninja': Value too large for defined data type
builder for '/nix/store/pira4wrp4v20qwaphf8gsq5ygy27wy8v-json-glib-1.4.4.drv' failed with exit code 1

I believe this is because of a ninja problem related to 64-bit inodes: https://github.com/ninja-build/ninja/issues/829
On another machine with a 1TB XFS filesystem, the build succeeds.
To Reproduce
Steps to reproduce the behavior:

On a machine with a large XFS filesystem (= 64-bit inodes), run:nix-build --builders '' https://github.com/NixOS/nixpkgs/archive/master.tar.gz --argstr system i686-linux -A json-glib

Observe:

...
Build targets in project: 38
WARNING: Project specifies a minimum meson_version '>= 0.40.1' but uses features which were added in newer versions:
 * 0.50.0: {'install arg in configure_file'}
WARNING: Deprecated features used:
 * 0.48.0: {'python3 module'}
Option buildtype is: plain [default: debugoptimized]
Found ninja-1.9.0 at /nix/store/jcvllscc3xg69dr7iy7vn35i2kc60jlw-ninja-1.9.0/bin/ninja
ninja: error: loading 'build.ninja': Value too large for defined data type
WARNING: Could not create compilation database.
meson: enabled parallel building
building
build flags: -j8 -l8
ninja: error: loading 'build.ninja': Value too large for defined data type
builder for '/nix/store/pira4wrp4v20qwaphf8gsq5ygy27wy8v-json-glib-1.4.4.drv' failed with exit code 1
error: build of '/nix/store/pira4wrp4v20qwaphf8gsq5ygy27wy8v-json-glib-1.4.4.drv' failed

Metadata

system: "x86_64-linux"
host os: Linux 4.19.65-hardened, NixOS, 19.09.git.4816fb0 (Loris)
multi-user?: yes
sandbox: yes
version: nix-env (Nix) 2.3

Maintainer information:
# a list of nixpkgs attributes affected by the problem
attribute:
# a list of nixos modules affected by the problem
module:

Does the fix suggested in the issue work? Something like the following:
--- a/pkgs/development/tools/build-managers/ninja/default.nix
+++ b/pkgs/development/tools/build-managers/ninja/default.nix
@@ -49,6 +49,13 @@

   setupHook = ./setup-hook.sh;

+  # fix builds on x86_32 with LFS
+  # https://github.com/NixOS/nixpkgs/issues/68241
+  NIX_CFLAGS_COMPILE = optionals (stdenv.hostPlatform.system == "i686-linux") [
+    "-D_LARGEFILE_SOURCE"
+    "-D_FILE_OFFSET_BITS=64"
+  ];
+
   meta = {
     description = "Small build system with a focus on speed";
     longDescription = ''

I tried both https://github.com/glensc/ninja-build/commit/038593ef116a5b3fe57ad47407a165f0c6596701 and your fix, and they both somehow break ninja:
# /nix/store/a02ryg2b2ap4x6i17hjs8plfgzri2whl-ninja-1.9.0/bin/ninja
/nix/store/a02ryg2b2ap4x6i17hjs8plfgzri2whl-ninja-1.9.0/bin/ninja: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory

Any updates on fixing this?

I've recently started running into this issue with a bunch of builds, e.h. systemd and gtk3 and @jtojnar's patch seems to fix it.
I'll open a PR with it in the next days, if nobody here has any problem with that or wants to do that themselves.

Nevermind. With this, pkgsi686Linux.wayland fails to build like this:
Option buildtype is: plain [default: debugoptimized]
Found ninja-1.10.2 at /nix/store/zlmwizbfpiv03syam0gii1z62gmlwrbp-ninja-1.10.2/bin/ninja
meson: enabled parallel building
building
build flags: -j64 -l64
[1/107] Generating wayland-architecture.png with a custom command.c.or.c.o output)
FAILED: doc/doxygen/xml/wayland-architecture.png
/nix/store/d6gfwa3s6rlg0niysv0pwcpa77gcaiqq-graphviz-2.49.3/bin/dot -Tpng -odoc/doxygen/xml/wayland-architecture.png ../doc/doxygen/dot/wayland-architecture.gv
Format: "png" not recognized. No formats found.
Perhaps "dot -c" needs to be run (with installer's privileges) to register the plugins?
[2/107] Generating wayland-architecture.map with a custom command
FAILED: doc/doxygen/xml/wayland-architecture.map
/nix/store/d6gfwa3s6rlg0niysv0pwcpa77gcaiqq-graphviz-2.49.3/bin/dot -Tcmapx_np -odoc/doxygen/xml/wayland-architecture.map ../doc/doxygen/dot/wayland-architecture.gv
Format: "cmapx_np" not recognized. No formats found.
Perhaps "dot -c" needs to be run (with installer's privileges) to register the plugins?
[3/107] Generating x-architecture.png with a custom command
FAILED: doc/doxygen/xml/x-architecture.png
/nix/store/d6gfwa3s6rlg0niysv0pwcpa77gcaiqq-graphviz-2.49.3/bin/dot -Tpng -odoc/doxygen/xml/x-architecture.png ../doc/doxygen/dot/x-architecture.gv
Format: "png" not recognized. No formats found.
Perhaps "dot -c" needs to be run (with installer's privileges) to register the plugins?
[4/107] Generating x-architecture.map with a custom command
FAILED: doc/doxygen/xml/x-architecture.map
/nix/store/d6gfwa3s6rlg0niysv0pwcpa77gcaiqq-graphviz-2.49.3/bin/dot -Tcmapx_np -odoc/doxygen/xml/x-architecture.map ../doc/doxygen/dot/x-architecture.gv
Format: "cmapx_np" not recognized. No formats found.
Perhaps "dot -c" needs to be run (with installer's privileges) to register the plugins?
[8/107] Generating Architecture.xml with a custom commandand
warning: failed to load external entity "../doc/publican/images/x-architecture.map"
warning: failed to load external entity "../doc/publican/images/wayland-architecture.map"
[14/107] Generating man-pages-3 with a custom commandayland-os.c.o[Kker.c.o
/build/wayland-1.19.0/cursor/wayland-cursor.c:510: warning: argument 'cursor' of command @param is not found in the argument list of wl_cursor_frame(struct wl_cursor *_cursor, uint32_t time)
/build/wayland-1.19.0/cursor/wayland-cursor.c:520: warning: The following parameter of wl_cursor_frame(struct wl_cursor *_cursor, uint32_t time) is not documented:
  parameter '_cursor'
/build/wayland-1.19.0/cursor/wayland-cursor.c:458: warning: argument 'cursor' of command @param is not found in the argument list of wl_cursor_frame_and_duration(struct wl_cursor *_cursor, uint32_t time, uint32_t *duration)
/build/wayland-1.19.0/cursor/wayland-cursor.c:471: warning: The following parameter of wl_cursor_frame_and_duration(struct wl_cursor *_cursor, uint32_t time, uint32_t *duration) is not documented:
  parameter '_cursor'
/build/wayland-1.19.0/cursor/wayland-cursor.c:147: warning: argument 'image' of command @param is not found in the argument list of wl_cursor_image_get_buffer(struct wl_cursor_image *_img)
/build/wayland-1.19.0/cursor/wayland-cursor.c:155: warning: The following parameter of wl_cursor_image_get_buffer(struct wl_cursor_image *_img) is not documented:
  parameter '_img'
/build/wayland-1.19.0/cursor/wayland-cursor.c:510: warning: argument 'cursor' of command @param is not found in the argument list of wl_cursor_frame(struct wl_cursor *_cursor, uint32_t time)
/build/wayland-1.19.0/cursor/wayland-cursor.h:86: warning: The following parameter of wl_cursor_frame(struct wl_cursor *_cursor, uint32_t time) is not documented:
  parameter '_cursor'
/build/wayland-1.19.0/cursor/wayland-cursor.c:458: warning: argument 'cursor' of command @param is not found in the argument list of wl_cursor_frame_and_duration(struct wl_cursor *_cursor, uint32_t time, uint32_t *duration)
/build/wayland-1.19.0/cursor/wayland-cursor.h:89: warning: The following parameter of wl_cursor_frame_and_duration(struct wl_cursor *_cursor, uint32_t time, uint32_t *duration) is not documented:
  parameter '_cursor'
/build/wayland-1.19.0/cursor/wayland-cursor.c:147: warning: argument 'image' of command @param is not found in the argument list of wl_cursor_image_get_buffer(struct wl_cursor_image *_img)
/build/wayland-1.19.0/cursor/wayland-cursor.h:83: warning: The following parameter of wl_cursor_image_get_buffer(struct wl_cursor_image *_img) is not documented:
  parameter '_img'
[21/107] Compiling C object src/libwayland-private.a.p/connection.c.oo capture output)
ninja: build stopped: subcommand failed.
builder for '/nix/store/60dlfjzb0nw2wh7ym63n01a7fnh5y50c-wayland-1.19.0.drv' failed with exit code 1

Turns out cmake does that as well:
https://github.com/NixOS/nixpkgs/blob/b34a4df857420eb045cde051d1d3e248bf8b02a6/pkgs/development/tools/build-managers/cmake/default.nix#L114-L118

I seem to be running into the same issue while installing Steam via programs.steam.enable = true (pulls in 32-bit nvidia drivers):
ninja: error: stat(/nix/store/bay9lzpz2y16j0gh4im01xf93qs2867c-gst-plugins-bad-1.20.3/lib/libgstcodecparsers-1.0.so): Value too large for defined data type

Running a 2TiB XFS setup here.

Many various builds are really affected by this, I'm afraid.  I'm not putting significant effort into fixing them.


Add Django 4.0a1 to tox.ini

As a point of clarification, I intended for the dj-main case to only be tested with sqlite. The reasoning was that it's used as a canary for upcoming incompatible changes and we don't need to test every permutation for it. I'm fine with the changes made in this PR though.


Enhancement UFW_TO port validation

@mlollo could you resolve the conflicts and push again? We've got conflicts after merging PR https://github.com/shinebayar-g/ufw-docker-automated/pull/6 I would like to merge the PRs.

I think I need to remove line 9 in src/requirements.txt no need to install re package

Thanks.


(If possible) assign key bindings to known profiles.

This way it's easy to switch. I have to verify if keybindings are always received if another window (e.g. the game ;)) is active.

This requires a redesign of the UI, as currently there's a mix of profile info and application UI elements, which is confusing. Editing the hotkey therefore makes it confusing to where the hotkey will be added to as the concept of 'profile' isn't really visible in the UI.

idk who have this software but thanks alot for this


Not an issue

Well great job
How about making https://github.com/mikelustosa/Projeto-TInject
with your WebView?

Hi,
Thanks for the suggestion but I think you should make this request to Mike W. Lustosa in the TInject project repository.


[core] Ensure compound state have initial defined

This PR throws an error if compound states (states with state: { ... }) do not have an initial state defined.
Closes #674

Should we warn instead?

It should not; this is a valid configuration, but currently you need to specify initial, which doesn't make sense... wondering what we should do here.

Maybe this should be a warning/error at the tooling level? like our CLI/VScode extension? In there we could perform an exhaustive analysis of all the existing transitions and "prove" that a compound state can be entered directly, and if it does then it needs an initial state to be configured on it.
Note that some APIs (like when resolving a partial state value) could throw (or warn in v4) when the initial state for a compound state is missing. This is because those APIs should resolve to a valid configuration if a state value is "partial" then the "leaf" compunt state encoded in it has to have the initial state configured. Otherwise, we won't be able to resolve its value.
So we can start warning about this even today, just maybe not at the state node creation time.

@davidkpiano any new thoughts about this?


Add right margin line in sourceview

Add right margin line in sourceview. The margin can be activated and configured in the source section of the config file.

Thank you, looks good! Merging soon.

One thing though: would you mind changing the version from 1.3.1 to <IP_ADDRESS>? I'll create a 1.3.1 release later with release notes.

Everything's fine! I have changed the version.

Thank you again:)


Remove POP3 support

Remove support for the POP3 protocol.
K-9 Mail never supported POP3's "download then delete from server" model. The app tries to treat POP3 accounts similar to IMAP where we download copies of messages but treat the server as single source of truth. Some settings exist to weaken that model, but the goal of #4970 is to get rid of these, too.
The hardest part about the removal is a deprecation strategy. We'll have to inform users that support for POP3 is going away before we actually remove it. They should have plenty of time to prepare moving to another protocol or another email client. I propose we show a non-dismissable info message above the message list. Clicking it could lead to a blog post with more information on the topic.
I don't want us to automatically delete user data. So once POP3 support is removed I propose we convert remaining POP3 accounts to read-only accounts. Users will still be able to view messages. They won't be able to copy, move, delete, or compose new messages from that account.
This is part of the effort to remove support for local messages.

Noooo....don't remove POP3 support.  I use POP3 for my work email on my personal phone, but only when I'm traveling.  I don't want to use IMAP or sync all of my email onto my phone.  I only want to receive on my phone those messages that have come in since I left the office.  I do not want those messages removed from the server, or even marked as "read" on the server.

With IMAP you don't have to sync all of your emails to your phone. K-9 Mail doesn't support only receiving messages "that have come in since [you] left the office", whether you use POP3 or IMAP. You can configure the app to not mark messages as read when they are opened.

 K-9 Mail doesn't support only receiving messages "that have come in since [you] left the office"
I'm not asking for K-9 to know what came in since I left the office.  I use POP3 in Thunderbird on my office desktop computer, and I have it set to delete the messages from the server.  So when I leave the office, there's nothing left on the server's "inbox".  Then as emails come in while I'm away, I can manually invoke pulling emails on my phone, and I'll get emails that were sent to me after I left the office (after I last checked email from my desktop computer).

I don't want this to be a "your idea about POP3 is not entirely correct" support ticket. Please use the forum if you wish to discuss this further. I'm happy to go into details there.

Sorry, but I have a similar use case as the previous commenter.
a) I don't want to have my emails be stored on any server longer then required (security, privacy,..), but only locally
b) I have a desktop pc, which deletes the mails automatically after download
c) I have a phone, with which I can read mails from the server, but does not delete them from the server
Maybe this scenario would be possible with IMAP in theory, too, but no email-client I know does support this for IMAP.
Second: you write above "They should have plenty of time to prepare moving to another protocol or another email client". To which email client? Most newer clients also don't support pop3 anymore.
I do not understand, why you mark such use cases as off-topic.

Most people use POP3 because they want to delete messages from the server after downloading them. K-9 Mail does not support this at all, whether you use POP3 or IMAP doesn't matter. Given that fact, there's really no reason to use POP3 with K-9 Mail.
Most people don't actually want to delete messages from the server after downloading them to their mobile device. They do that after downloading messages to their desktop. Again, there's no good reason to use POP3 on mobile. IMAP is much better at downloading messages and leaving them on the server than POP3 is.
There's no need to only use a single protocol to access emails. It's totally fine to use POP3 on desktop and IMAP on mobile.

Please don't do that. There are reasons for using POP3: whether IMAP4 is available or not does not always depend on users, who are often forced to use one, the other or even none (EWS only) by admins, especially in the times of Office365 when enabling a protocol is just a click of the mouse.
POP3 support is there and works well (it only lacks OAuth2 support, please see #6216), removing it would be a serious loss and would force users to install a second mail client just for POP3 only mailboxes.
Please avoid adhering to a "developer decides all, users must adapt" model.

to add a voice to the keep POP3 group. please consider yourself as a single voice and not necessarily speaking for humanity, that there may be many people like myself for near 3 years now that have no desktop/laptop access only their phone, and that not every email service out there supports IMAP or is Trustworthy enough to keep all mail on server or provides enough storage for leaving mail on server, or doesn't back up server reliably or encourages users to do anything but get mail off their servers ASAP as many Privacy and Security focused servers do and in fact often give very small amounts of storage for both free and paid accounts (eg. I have 2 free with 1GB storage and 2 paid by another provider with 500MB storage).
Dev, please consider you are not alone anymore, I know this is your baby, it was my first cell phone email client in 2009 iirc, but your days as sole voice and decision maker for this project are in the past now and you have not only a userbase to consider you now have a significantly much larger Thunderbird family that I can only imagine, like me, wants their phone mail client (k9 mail) to function and probably appear like their desktop client does. we're not asking you to add feature, nor ability for add-ons, extensions, skins and the incredible tweakableness of Thunderbird desktop, we're asking you to Not remove a very useful, arguably necessary, feature already a part of k9 for over a decade.
in the end, and I imagine you kept final decision on k9 rights in the transfer to Thunderbird family, but surely you must see that not everyone has access to other services, not everyone has trustworthy servers, nor ones that provide enough online storage space, not everyone can be so easy to make other choices on apps usable (especially now you work very well with PGP encryption).
You might consider it better to get more democratic on such decisions polling in Thunderbird forums making it available and open for comments for period of 30-60 days with any Thunderbird announcement emails, and front page news on site homepage pointing to the do we want/need secure POP3 in K9?
please take no offense from my pleas, I mean no harm nor insult. I know coding isn't simple and it rarely puts food on the table for even coders in the largest and most successful FOSS projects. I wish my brain worked well enough to even learn coding so I could contribute. and while I've donated to k9 one time, many years ago, I admit it was only once and that $20 was nothing to the work performed nor my use case for k9. I also admit I had to leave k9, maybe for good I'm not sure, but at least until I got a home computer hoping for NLT this summer. I've been locked to using phone only for near 3 yrs now and those email services I mentioned above are now filling or full. I cannot, for legal, medical and other personal reasons remove any mail from server until I have a verified local backup. I see learned a very hard lesson about k9 mail last year when my old phone died and it had to do with losses of emails. in desperation I tried every app and service to no avail because like many I am also not on a rooted phone. I recently found responsive developer, who seemed much like you do, to consider POP3 as less feature rich or desirable than IMAP for every modern smartphone user on earth. I may have swayed his opinion on both the true benefits of POP3 and to find a way to allow non root users to backup their email clients, both settings and any local stores messages, attachments, etc. He's working on fixing and further developing POP3 capabilities in app, and looks to be testing some backup function for emails in recent releases. I've contributed a good sum from fixed income, and will continue to because he didn't dig in and say no to very valid use case and reasonable realistic features that can only grow in popularity as many countries cannot afford entry into Internet world with desktops, laptops and all manner of cloud services and such. but maybe they can afford a second hand cell phone and like me they either need or want to keep emails in local archived storage. There is also, I imagine like here in the US, many around the world are on the move, all the time, and even those that work remote, many seem to be migrating to simplify life, declutter, reduce footprint and unneeded expenses, like laptop and desktop can become with modern smartphones being so incredibly powerful and fast and secure!
I believe you come from an older generation, like I do. only difference, I think, may be for past 25 yrs I was always using POP3 any time I could because I didn't want to leave mail on servers for both security and Privacy reasons. while at work for two decades in the Army I had to use IMAP (and exchange), or Webmail. I disliked those choices but certainly saw their use cases and benefits. and really I find most times a service is assure to keep mail on server it's either corporation/work mail or it's free service like gmail that made billion$$ by having that access to email at rest, just keep growing the free storage, forever. (fwiw, I was a gmail beta test account, it's still my primary gmail too). Email is just convenient snailmail, post cards at that. POP3 is like an honest Post Office and user is renting a PO box. my PO box is full and I am prohibited from taking it all home and securing it in local firesafe box.
sorry this is so long, and maybe errors included, screen is small edit window is tiny and swiping finger is huge.
bottom line, please do not remove this functionally without at least being open for comment by entire community and family you are now a part of.

Keep POP3!
For me and my clients it's essential. There's nor reason to remove a valued part of K9.


hotfix: address metaclass definition in PythranBuildExt

Description
I'm not sure if this is the best fix for #2228 or if this is something that should be resolved in setuptools instead, but this PR is a small fix that resolves the metaclass conflict in Pythran that is coming from setuptools's new v73.0.0 release. I can close this PR if it gets resolved elsewhere!
TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases

The test suite is running on my fork here: https://github.com/agriyakhetarpal/pythran/pull/1 and I have verified that the fix works by running a few of the tests locally with both setuptools>=73 and setuptools<73 (the tests do take some time to fire away, though!), and in the meantime, #2229 pins setuptools to <73 which is an easier fix to incorporate.
Changes made

PythranBuildExtMeta derives from type(LegacyBuildExt) – which ensures that PythranBuildExtMeta is a subclass of the metaclass used by LegacyBuildExt, and
instead of defining a new class inside the __getitem__ method, it now uses the type() function to dynamically construct a new class.

Additional context
xref to some downstream issues where this was discovered:

https://github.com/pyodide/pyodide/pull/5011, https://github.com/pyodide/pyodide/issues/5018
https://github.com/scipy/scipy/issues/21416
https://github.com/conda-forge/setuptools-feedstock/pull/356

The offending commit in setuptools (between version 72.0.0 and version 73.0.0) seems to be f9398b1f. I can confirm that the fix I propose through this PR works – I verified by testing a portion of the tests: python -m pytest pythran/tests/test_list.py.

Closing since this is not needed anymore: https://github.com/pypa/setuptools/releases/tag/v73.0.1. A release should be up on PyPI soon.


Unable to succesfully run the application

I am not able to run this app succesfully on Mac Book Pro M2. Attached one of the errors that I am getting. I will reach out to the owner for a troubleshoot session and share the conclusion here.

Hey @sfc-gh-ppaczewski!
Would be helpful to have more context in this issue. Can you please add:

Python version
Streamlit version
Snowflake python connector version
Are you using a fresh new environment? Looks like some packages are failing to be loaded
The full error traceback

Thanks a lot!

Python 3.9.16
streamlit==1.20.0
snowflake-connector-python==3.0.1
Yes
Traceback: (FYI utils is installed, utils==1.0.1)
Traceback (most recent call last):
File "/Users/ppaczewski/.local/share/virtualenvs/snowflake-usage-app-lWEK_pJt/lib/python3.9/site-packages/streamlit/runtime/scriptrunner/script_runner.py", line 565, in _run_script
exec(code, module.dict)
File "/Users/ppaczewski/snowflake-usage-app/Home.py", line 5, in
from utils import gui
ImportError: cannot import name 'gui' from 'utils' (/Users/ppaczewski/.local/share/virtualenvs/snowflake-usage-app-lWEK_pJt/lib/python3.9/site-packages/utils/init.py)
2023-03-13 11:59:49.122 Uncaught app exception
Traceback (most recent call last):
File "/Users/ppaczewski/.local/share/virtualenvs/snowflake-usage-app-lWEK_pJt/lib/python3.9/site-packages/streamlit/runtime/scriptrunner/script_runner.py", line 565, in _run_script
exec(code, module.dict)
File "/Users/ppaczewski/snowflake-usage-app/pages/02_🔹_Storage_insights.py", line 7, in
from utils import charts, gui, processing
ImportError: cannot import name 'charts' from 'utils' (/Users/ppaczewski/.local/share/virtualenvs/snowflake-usage-app-lWEK_pJt/lib/python3.9/site-packages/utils/init.py)

Can you try running pip uninstall utils and reproduce?

I have tried and there is no change.


Make Movies Model

-Name
-Director
-Actors
-Poster
-Trailer
-Plot

title
year
movie rating
genre
plot
ratings
director
writer
actors


Replaced WebL10n with i18next in Calculate activity

Fixes #1378
Locales work, no errors in console.

Finally I don't think it's a good idea to remove data-l10n-id feature.
It's possible to keep a similar way to localize HTML components in i18next. See https://github.com/llaske/sugarizer-doc/issues/42#issuecomment-1777916993

Could you take a look at 4edd835 @llaske
One more doubt, should the localization for "calcul", "label", "clear" be in translateGui() or should it be changed to use data-i18next?

That's fine. Thanks.


Feed lists as empty in newsbeuter

The feed in question is here. Obviously, from looking at it in a browser, it's not empty, but when I put it in my urls file, it says that it is.

You sure it's not your configuration or something? I wasn't able to reproduce neither with r2.9 nor with HEAD—both show the same articles as my Firefox shows.

Never mind - seems a reload was all that I needed. Sorry about that.

It's okay ;)


Aider agent

This is a draft PR for an agent based on aider.
Fixes #120

Closing due to this not being the ideal strategy to incorporate aider, see here: https://github.com/OpenDevin/OpenDevin/issues/120

We need this after it passes more than 40 % on SWE Bench


configure model without changing source code

I was pretty surprised that you have to edit the source code
of this node in order to use it because otherwise it will check for whether
ros_vosk/models/None exists and it obviously doesn't.
This patch provides a more reasonable behavior to look for the requested
model to decide whether or not it needs to start the download gui.

you can load model just by name (it downloads automatically) not necessary path.

Can you elaborate? I guess at the moment it will always open the GUI if the model does not exist. But if the user could set a custom model folder (e.g., $HOME/.cache/ros-vosk) and the system would download a chosen model automatically when it's not available there, that would be quite useful.


Add tests for Currency_amount in transaction_logic.

Currency_amount is a locally-used extension of Currency.Amount module from currency package. We need to test the properties of artihmetic operations (addition with flag informing about possible overflow) defined here.
Subtask of #12530.

Tests are written, but wait for a larger package of code to reviewed with.


Error while parsing the file 'filename.pdf': 'json'

I get the following output when I run this code:
documents = LlamaParse(

        result_type="json",
        split_by_page=False,
        parsing_instruction=extraction_instructions
    ).load_data(pdf_path)

Gives the error:
Started parsing the file under job_id 6e516bf7-de76-4f0a-85be-da416364a5ca
Error while parsing the file '18f0aecc51523b1b_attachment_2.pdf': 'json'

This returns:
[]
Verbose does not seem to expand the error message.
Changing the result_type to markdown does not throw an error.
Client:

Python Library

Hi @johnisanerd,
It's a bug. You're job was already cached, the cache was restored but you should see the retrieved json.

Should I be able to re-run this code now and see json coming out?

Had the same issue, can't manage to use the API with json type. Any workaround?

@katzurik The API is working on my side. Can you provide your code?

@katzurik The API is working on my side. Can you provide your code?

import json
from llama_parse import LlamaParse
import os
api_key= ''
parser = LlamaParse(
api_key=api_key,
result_type="json",
num_workers=4,
verbose=True,
language="en",
)
documents = parser.load_data(file_path)
Output:
Started parsing the file under job_id ..some job_id ...
Error while parsing the file 'some file.pdf': 'json'

Hmm, I agree we have an issue with types in the lib. Will patch it.
For JSON output, you're supposed to use:
json_objs = parser.get_json_result(file_path)
json_list = json_objs[0]["pages"]

See this example: https://github.com/run-llama/llama_parse/blob/main/examples/demo_json.ipynb


Update defaults

Update default functionality.

@willgdjones , should any other default functionality be changed?
For example, should saved output files use tab as a separator? If so, should the file extension be .txt?

For example, should saved output files use tab as a separator? If so, should the file extension be .txt?

I would agree with this 👍. I can't think of another other obvious defaults that should be changed!

Codecov Report

Merging #73 into develop will increase coverage by 1.62%.
The diff coverage is n/a.

@@             Coverage Diff             @@
##           develop      #73      +/-   ##
===========================================
+ Coverage    91.49%   93.12%   +1.62%
===========================================
  Files            9        9
  Lines         1352     1352
  Branches       244      244
===========================================
+ Hits          1237     1259      +22
+ Misses          70       48      -22
  Partials        45       45

Impacted Files
Coverage Δ

src/snps/snps.py
93.03% <ø> (+1.39%)
:arrow_up:

src/snps/resources.py
95.07% <0.00%> (+0.37%)
:arrow_up:

src/snps/ensembl.py
70.73% <0.00%> (+39.02%)
:arrow_up:

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 5a1a6bf...f566572. Read the comment docs.

For example, should saved output files use tab as a separator? If so, should the file extension be .txt?

I would agree with this 👍. I can't think of another other obvious defaults that should be changed!

Thanks Will! Tab as the default separator was implemented via #85.


Linktree conversion/scraper feature

Connect an Openlinks account to a Linktree via user login to display Linktree links instantly - heres a Linktree Scraper from a couple years ago. Are we just scraping just the links or can we scraper the entire page with layout & background? Figure out the limitations of this and whats possible.

I meant to list the linktree-scraper repo in my pervious comment -> https://github.com/benkaiser/linktree-scraper. This is a good starting place.

The user inputs their linktree login and the linktree-scraper tool produces a JSON file. Assuming the JSON file is saved on a remote server (needed to avoid CORS issues), then you can read this file in JavaScript using the Fetch API method (see example below)
In this example, the JSON file is named data.json
--./index.js--

fetch('https://server.com/data.json')
    .then((response) => response.json())
    .then((json) => console.log(json));

Unfortunately, by making our Openlinks users authorize this process, we will cause them to break the Linktree terms of service. Due to this issue, we will not be proceeding with this feature at this time.


Implement std::marker::Send for Scanner

Out of the box yara_x::Scanner does not support being moved within threads because it doesn't implement std::marker::Send.
While it is probably doable by wrapping things over a Mutex or RwLock, maybe it would be relevant to implement implement this trait in yara-x library to prevent any mistake on the end-user.

That's intentionally. A Scanner can't be used simultaneously by multiple threads, if you want to scan using multiple threads, you need to create one scanner per thread (all of them can share the same compiled Rules, though).  That's reflected in the API by not implementing Send.
In order to implement Send, the Scanner would need to wrap itself in a Mutex, and calls to Scanner::scan would block until any other thread that is using the scanner finishes. That's not very helpful, and it's trivial to do in case someone wants to use the same scanner across multiple threads, which is not a very good idea anyways.

Fair enough, thanks for the clarification


Reintroduce bound dispose/disposeAsync getters

As discussed in #231 and #229, this explores the possibility of reintroducing bound getters for DisposableStack.prototype.dispose/AsyncDisposableStack.prototype.disposeAsync. By making these methods getters, a DisposableStack/AsyncDisposableStack subclass that wishes to override disposal needs only to override the [Symbol.dispose]() or [Symbol.asyncDispose]() methods. By making them into bound method getters, an instance of either class can be more readily used as a field on an object literal:
Subclassing:
// current
class MyDisposableStack extends DisposableStack {
  [Symbol.dispose]() {
    // custom dispose logic
    super[Symbol.dispose]();
    // more custom dispose logic
  }

  static {
    // copy the new @@dispose to dispose
    this.prototype.dispose = this.prototype[Symbol.dispose];
  }
}

// proposed
class MyDisposableStack extends DisposableStack {
  [Symbol.dispose]() {
    // custom dispose logic
    super[Symbol.dispose]();
    // more custom dispose logic
  }
}

Object Literals:
// current
function makeBuffers() {
  using stack = new DisposableStack();
  const myResource = stack.use(new MyResource());

  doSomeInit(myResource);

  const moved = stack.move();
  return {
    myResource,
    [Symbol.dispose]() {
      moved.dispose();
    },
  };
}

// proposed
function makeBuffers() {
  using stack = new DisposableStack();
  const myResource = stack.use(new MyResource());

  doSomeInit(myResource);

  return {
    myResource,
    [Symbol.dispose]: stack.move().dispose,
  };
}

Fixes #229
Fixes #231

Ideally this can be pursued as a needs-consensus PR and not a follow-on to avoid making potentially breaking changes after implementations have shipped. I will bring this to the July/August 2024 TC39 plenary for discussion.

In the (extensive) discussions we had around extending built-ins in 2022 (focused on, but not exclusively about, Set methods), we concluded that we weren't going to make future built-in methods defer to other built-in methods on this. Subclasses will need to override all relevant parts of the public interface.
I don't want to revisit that discussion, but to summarize, making this a bound getter rather than an alias will make non-subclass consumers slower, for the benefit of very slightly simpler subclassing. I think that's the wrong tradeoff and I believe the committee has agreed.

Hm, fair point. What was the motivation for having the dispose / disposeAsync methods? What if we dropped them?
Besides the foot gun in https://github.com/tc39/proposal-explicit-resource-management/issues/231, it seems somewhat odd to me for the spec to define and give semantics for [Symbol.dispose] and [Symbol.asyncDispose], and then seeming not to prefer those methods in DisposableStack/AsyncDisposableStack, instead giving them string-named methods to call.
Should user space implementations of [Async]Disposable follow suit? Other symbol-named methods with semantics carved out by the spec generally don't do this.

Should user space implementations of [Async]Disposable follow suit? Other symbol-named methods with semantics carved out by the spec generally don't do this.

They sometimes do: Array.prototype.values is an alias for Array.prototype[Symbol.iterator] (or rather, technically, the other way around); ditto for Map.prototype.values and Set.prototype.values.
String-named methods are nicer for consumers, but aren't a good basis for a protocol. So having both the symbol-named and string-named method is good practice, with one being an alias for the other.
As to the name, dispose is a good name for a method when the action is generic disposal, but sometimes it's going to be something like close or whatever, depending on the actual thing being implemented.