feat(cart): make cart package generic

PR Checklist
Please check if your PR fulfills the following requirements:

[x] The commit message follows our guidelines: https://github.com/graycoreio/daffodil/blob/master/CONTRIBUTING.md#commit
[ ] Tests for the changes have been added (for bug fixes / features)
[ ] Docs have been added / updated (for bug fixes / features)

PR Type
What kind of change does this PR introduce?
[ ] Bugfix
[x] Feature
[ ] Code style update (formatting, local variables)
[ ] Refactoring (no functional changes, no api changes)
[ ] Build related changes
[ ] CI related changes
[ ] Documentation content changes
[ ] Other... Please describe:

Does this PR introduce a breaking change?
[x] Yes
[ ] No

Other information
I changed the place order button to use the DaffCartFacade instead of the DaffCartContainer, because it looked like the the testing would have been difficult to fix otherwise.

@lderrickable What do you think about using generic type defaults? It would make the usage less verbose on the application side when not using custom types.

@lderrickable What do you think about using generic type defaults? It would make the usage less verbose on the application side when not using custom types.

I'm not exactly sure how we would do this. The only thing I can think of is to have a sort of specific model for the reducer state, facade, etc.:
export interface DaffSpecificCartReducersState extends DaffCartReducersState<DaffCart> {}

But I don't really like that idea. I had to do something sort of similar in the navigation package, because the DaffNavigationTree is a recursive model. But I had to do it there. Can you think of another way?

@lderrickable What do you think about using generic type defaults? It would make the usage less verbose on the application side when not using custom types.

I'm actually going to do this in another PR. It's a lot of little changes


Add support for merging several OONI Run links

During the OONI Partner Training 2021, participants mentioned that it would be useful if they had the option to merge several OONI Run links (in the scenario that they eventually want to test them altogether).

It's not clear to me exactly what is meant here for "merging several OONI Run links". How would the workflow be exactly?


Change open() flags from O_APPEND -> O_TRUNC for write() logging.

In large-volume performance benchmarking we end up generating huge log files, /tmp/l3.c-server-test.dat, when client-server programs are built with L3_LOGT_WRITE=1. For write()-logging, we append log-entries to the same file, which eventually busts-up against the disk space.
This fix corrects this by opening the file
with: (O_RDWR | O_CREAT | O_APPEND)
rather than: (O_RDWR | O_CREAT | O_TRUNC)
flags. For performance benchmarking, there is no need to retain older log-entries.

FYI, @gregthelaw -- take a look at this when you get a chance. I'm checking this in, to keep perf-testing moving forward.


[Fix #3838] Add RuboCop::Cop::Badge

As mentioned in #3838, all cops expose a #department as a downcased symbol even though these departments seem to always be inflected (using #capitalize) at later points to construct qualified cop names or other end user visible messages.
There are also many parts of the codebase that duplicate the behavior and rules for parsing and constructing cop names (Department/CopName):
This PR adds RuboCop::Cop::Badge which unifies this duplicated behavior. It also eliminates the unnecessary downcasing and later capitalizing of departments which fixes the issue mentioned in #3838.
This was originally a part of #3837 but I've extracted part of the refactor to help reduce the size of the cop store PR.

Duplication before and after
Before
$ ag "split\('/"
lib/rubocop/config.rb
326:        next unless key?(cop_name) || key?(cop_name.split('/').last)

lib/rubocop/cop/lint/unneeded_disable.rb
162:            matching_range(comment.loc.expression, cop.split('/').last) ||

tasks/cops_documentation.rake
9:    cop_name.split('/').last.to_sym

tasks/new_cop.rake
15:  category, name = *cop_name.split('/', 2)

$ ag "join\('/"
lib/rubocop/cop/cop.rb
107:        @cop_name ||= name.split('::').last(2).join('/')

$ ag "}/\#\{"
lib/rubocop/cop/cop.rb
30:          cop_names.include?("#{ns}/#{basename}")
39:                   "#{found_ns.map { |ns| "#{ns}/#{basename}" }.join(' or ')}"
48:        "#{found_ns}/#{basename}"

$ ag '(department|type).+capitalize'
lib/rubocop/cli.rb
127:        puts "# Department '#{department.to_s.capitalize}' " \

lib/rubocop/config.rb
145:      department = cop.department.to_s.capitalize!

lib/rubocop/cop/cop.rb
29:        found_ns = departments.map(&:capitalize).select do |ns|
124:          given_names.include?(department.to_s.capitalize)

lib/rubocop/options.rb
182:      departments = Cop::Cop.all.departments.map { |t| t.to_s.capitalize }

spec/rubocop/cli/cli_options_spec.rb
596:          expect(stdout).to include(department.to_s.capitalize)
604:            department.to_s.capitalize

tasks/cops_documentation.rake
83:    content = "# #{type.capitalize}\n".dup

After
$ ag "split\('/"
lib/rubocop/cop/badge.rb
24:        parts = identifier.split('/', 2)

$ ag "join\('/"
$ ag "}/\#\{"
lib/rubocop/cop/badge.rb
50:        qualified? ? "#{department}/#{cop_name}" : cop_name

lib/rubocop/cop/cop.rb
30:          cop_names.include?("#{ns}/#{basename}")
39:                   "#{found_ns.map { |ns| "#{ns}/#{basename}" }.join(' or ')}"
48:        "#{found_ns}/#{basename}"

spec/rubocop/ast_node_spec.rb
343:      let(:src) { "/#{body}/#{opts}" }

$ ag '(department|type).+capitalize'

Before submitting the PR make sure the following are checked:

[x] Wrote good commit messages.
[x] Commit message starts with [Fix #issue-number] (if the related issue exists).
[x] Used the same coding conventions as the rest of the project.
[x] Feature branch is up-to-date with master (if not - rebase it).
[x] Squashed related commits together.
[x] Added tests.
[x] Added an entry to the Changelog if the new code introduces user-observable changes. See changelog entry format.
[x] All tests are passing.
[x] The new code doesn't generate RuboCop offenses.
[x] The PR relates to only one subject with a clear title
and description in grammatically correct, complete sentences.
[x] Updated cop documentation with rake generate_cops_documentation (required only when you've added a new cop or changed the configuration/documentation of an existing cop).

Great refactoring overall! Just one question - will the changes affect passing a department name as a command-line option? E.g. to just run the cops from one department.

@bbatsov no it shouldn't. I believe those go through cop_store.with_department(department_name) which isn't touched here. I also double checked manually that I can do things like bin/rubocop --only Bundler and it works as expected.

Great refactoring overall!

Thanks :smile:

@bbatsov updated. I didn't change the %<badge>p but I provided an explanation in the comments


Annotation Pipeline

Addresses
#88
Proof of concept for the batch generation issue. Would appreciate eyes on this draft!
Description
common_crawler/main.py

modified to include csv filename of crawled urls in batch_info.csv (for retrieval in pipeline process)
batch info logic modified to ensure filename of unlabeled urls and Datetime in batch_info are the same
checks/handles for empty labelstudio project during deduplication

annotation_pipeline/populate_labelstudio.py

script for initiating common crawl, html tag collection, and label studio import
generates a batch id, based on the timestamp of the associated common crawl (which will correspond to the timestamp in batch_info.csv)

Testing

will need an .env file in the root (data-source-identification) directory with HF, label studio credentials (as with running the common crawler script alone). You may also need a dev.env in the annotation_pipeline folder with labelstudio creds (cp .env annotation_pipeline/dev.env). I will concatenate those if need be.
For label studio:

LABEL_STUDIO_PROJECT_ID=71148
LABEL_STUDIO_ORGANIZATION_ID=9876
The first run (with an empty common_crawler/cache.json) should not upload anything, due to this labelstudio project (ID=71148) already being populated with the default crawl parameter urls.

python populate_labelstudio.py

TODO

pre-annotation of label studio tasks if searching for specific record type
create workflow .yaml, github secrets for HF/labelstudio credentials, and allowing for user input of common crawl params
documentation/requirements

Known Issues

during recent testing I'm seeing a lot of request failures during common crawl
Failed to get records for *.gov on page 7: {"message": "Internal Error: An error occurred (SlowDown) when calling the GetObject operation (reached max retries: 4): Please reduce your request rate."}
which is addressed by Common Crawl https://commoncrawl.org/blog/oct-nov-2023-performance-issues. Implement retry logic?

@EvilDrPurple @maxachis thank you both for your comments! I've incorporated them and will have another PR up soon for the TODO section written in this draft


[FLINK-1920] Properly pass command line arguments with spaces to Flink

The actual issue was that we were using $* to pass the command line arguments from the scripts to the JVM. It seems that we have to use "$@ so that arguments with spaces are passed properly.
I've tested this change with ./bin/yarn-session.sh -n 2 -D "akka.ask.timeout=5 min" (note the space in the configuration value.

I'll merge this soon (next 24 hrs), if there are no objections.

+1 to merge f125e16ab3b3bf677ace6d9fec4dfec2c3a1a5a3

The other commits appear here because the apache <--> github sync is not working right now. So github doesn't know that our master has actually advanced.
I'll merge as soon as travis gives me a go.


Support for pip-compile generated requirements with hashes

When attempting to build a pex for package with dependencies pinned with pip-compile --generate-hashes, it will fail with the following error:
ERROR: Can't verify hashes for these file:// requirements because they point to directories:
    file:///home/anisse/dev/minimal-pip-compile-pex

I made a (not so) minimal repro to exhibit this issue, the relevant code can be found here: https://github.com/anisse/pex-minimal-repros/commit/4648ec016a644f91362a5e5984957f03e7053a60
I know there might be a few similar issues, like #429, and that pex has put a lot of effort in its own lock file format, so feel free to close this issue if it's out of scope for the project.

Pex definitely supports requirements files with hashes - it just passes these through to Pip to handle. I've closed #429 using your repo for the example (the numpy + pip-compile -> "locked" numpy bit). So the issue you mention above in the OP must be very specific to the hash of a project directory. I'm pretty sure that message is coming from Pip but I'll verify.

Ok, yeah. So here is the full terminal command line from your example:
...
/tmp/tmp5xjc2oji/venvs/0deb89b23adbbad7a5b9aac06d2362acf7572cfa/5985ed09b49a653d6596b0e14d134c5456cf1a9f/bin/python -sE /tmp/tmp5xjc2oji/venvs/0deb89b23adbbad7a5b9aac06d2362acf7572cfa/5985ed09b49a653d6596b0e14d134c5456cf1a9f/pex --disable-pip-version-check --no-python-version-warning --exists-action a --no-input --isolated -v --cache-dir /tmp/tmp5xjc2oji/pip/24.0/pip_cache --log /tmp/pex-pip-log.wdluxqkc/pip.log download --dest /tmp/tmp5xjc2oji/downloads/resolver_download.132v5424/home.jsirois.dev.anisse.pex-minimal-repros..env.bin.python3 --requirement requirements.txt /home/jsirois/dev/anisse/pex-minimal-repros --retries 5 --timeout 15
pid 8909 -> /tmp/tmp5xjc2oji/venvs/0deb89b23adbbad7a5b9aac06d2362acf7572cfa/5985ed09b49a653d6596b0e14d134c5456cf1a9f/bin/python -sE /tmp/tmp5xjc2oji/venvs/0deb89b23adbbad7a5b9aac06d2362acf7572cfa/5985ed09b49a653d6596b0e14d134c5456cf1a9f/pex --disable-pip-version-check --no-python-version-warning --exists-action a --no-input --isolated -v --cache-dir /tmp/tmp5xjc2oji/pip/24.0/pip_cache --log /tmp/pex-pip-log.wdluxqkc/pip.log download --dest /tmp/tmp5xjc2oji/downloads/resolver_download.132v5424/home.jsirois.dev.anisse.pex-minimal-repros..env.bin.python3 --requirement requirements.txt /home/jsirois/dev/anisse/pex-minimal-repros --retries 5 --timeout 15 exited with 1 and STDERR:
ERROR: Can't verify hashes for these file:// requirements because they point to directories:
    file:///home/jsirois/dev/anisse/pex-minimal-repros

That command line is complex looking, but its actually just Pex executing Pip (itself PEXed up) in a subprocess. The relevant bits are:
(pip) download ... --requirement requirements.txt /home/jsirois/dev/anisse/pex-minimal-repros ...

So bdist_pex is building the current project (. or /home/jsirois/dev/anisse/pex-minimal-repros) and your Makefile adds these args --pex-args='... -r requirements.txt ...'. So yhe full requirement set is . -r requirements.txt. This will always fail since Pip requires every requirement has a hash if any does. The current project directory does not, but the requirements in requirements.txt` do; so Pip fails the download. In particular, Pip doesn't support hashes for directories (projects) at all anyhow; so this is impossible with Pip. Now Pex does support project directory hashes in its own lock file format, but that doesn't help you here. I can't think of a way to PEX up the combination of a local project directory + hashed requirements. Here's how you'd do this using just Pex though if that's of interest:
# ~/dev/anisse/pex-minimal-repros (4648ec0) [?] via  v3.10.12 took 3s
:; pex3 lock create . -r requirements.in --indent 2 -o lock.json

# ~/dev/anisse/pex-minimal-repros (4648ec0) [?] via  v3.10.12 took 2s
:; cat lock.json
{
  "allow_builds": true,
  "allow_prereleases": false,
  "allow_wheels": true,
  "build_isolation": true,
  "constraints": [],
  "locked_resolves": [
    {
      "locked_requirements": [
        {
          "artifacts": [
            {
              "algorithm": "sha256",
              "hash": "675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed",
              "url": "https://files.pythonhosted.org/packages/0f/50/de23fde84e45f5c4fda2488c759b69990fd4512387a8632860f3ac9cd225/numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl"
            }
          ],
          "project_name": "numpy",
          "requires_dists": [],
          "requires_python": ">=3.9",
          "version": "1.26.4"
        },
        {
          "artifacts": [
            {
              "algorithm": "sha256",
              "hash": "53c32e4adf05ce880bb57d2e35788de81d3febc9e05aaf474782b81d282b2703",
              "url": "file:///home/jsirois/dev/anisse/pex-minimal-repros"
            }
          ],
          "project_name": "repro",
          "requires_dists": [],
          "requires_python": "~=3.9",
          "version": "0.0.1"
        }
      ],
      "platform_tag": [
        "cp312",
        "cp312",
        "manylinux_2_35_x86_64"
      ]
    }
  ],
  "only_builds": [],
  "only_wheels": [],
  "path_mappings": {},
  "pex_version": "2.3.1",
  "pip_version": "23.2",
  "prefer_older_binary": false,
  "requirements": [
    "numpy",
    "repro==0.0.1"
  ],
  "requires_python": [],
  "resolver_version": "pip-2020-resolver",
  "style": "strict",
  "target_systems": [],
  "transitive": true,
  "use_pep517": null
}

# ~/dev/anisse/pex-minimal-repros (4648ec0) [?] via  v3.10.12
:; pex --lock lock.json -c entry -o dist/entry.pex

# ~/dev/anisse/pex-minimal-repros (4648ec0) [?] via  v3.10.12
:; dist/entry.pex
Hello  1.26.4

Now, that said. I don't think you want this behavior, where the local project itself is part of the lock? Pex, like Pip, requires everything is in a lock when using a lock (in Pip's case, all requirements are hashed when any are). So I think what you're looking for is the ability to build a PEX from a partially locked set of input requirements (just lock 3rdparty requirements; not local projects). That feature does not exist today.
@anisse if you can confirm my guess or clarify what you're aiming for in this example at a high level if my guess was wrong, I'd be grateful.

FWIW, for apples to apples with the pip-compile you use in your Makefile, you'd likely want this pex3 lock create command line:
# ~/dev/anisse/pex-minimal-repros (4648ec0) [?] via  v3.10.12 took 45s
:; pex3 lock create . -r requirements.in --interpreter-constraint "~=3.9" --style universal --pip-version 24.0 --indent 2 -o lock.json

# ~/dev/anisse/pex-minimal-repros (4648ec0) [?] via  v3.10.12 took 9s
:; cat lock.json
{
  "allow_builds": true,
  "allow_prereleases": false,
  "allow_wheels": true,
  "build_isolation": true,
  "constraints": [],
  "locked_resolves": [
    {
      "locked_requirements": [
        {
          "artifacts": [
            {
              "algorithm": "sha256",
              "hash": "7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0",
              "url": "https://files.pythonhosted.org/packages/f4/5f/fafd8c51235f60d49f7a88e2275e13971e90555b67da52dd6416caec32fe/numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl"
            },
            {
              "algorithm": "sha256",
              "hash": "96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a",
              "url": "https://files.pythonhosted.org/packages/09/bf/2b1aaf8f525f2923ff6cfcf134ae5e750e279ac65ebf386c75a0cf6da06a/numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl"
            },
            {
              "algorithm": "sha256",
              "hash": "675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed",
              "url": "https://files.pythonhosted.org/packages/0f/50/de23fde84e45f5c4fda2488c759b69990fd4512387a8632860f3ac9cd225/numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl"
            },
            {
              "algorithm": "sha256",
              "hash": "4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71",
              "url": "https://files.pythonhosted.org/packages/11/57/baae43d14fe163fa0e4c47f307b6b2511ab8d7d30177c491960504252053/numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl"
            },
            {
              "algorithm": "sha256",
              "hash": "08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818",
              "url": "https://files.pythonhosted.org/packages/16/2e/86f24451c2d530c88daf997cb8d6ac622c1d40d19f5a031ed68a4b73a374/numpy-1.26.4-cp312-cp312-win_amd64.whl"
            },
            {
              "algorithm": "sha256",
              "hash": "47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c",
              "url": "https://files.pythonhosted.org/packages/16/ee/9df80b06680aaa23fc6c31211387e0db349e0e36d6a63ba3bd78c5acdf11/numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl"
            },
            {
              "algorithm": "sha256",
              "hash": "b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5",
              "url": "https://files.pythonhosted.org/packages/19/77/538f202862b9183f54108557bfda67e17603fc560c384559e769321c9d92/numpy-1.26.4-cp310-cp310-win_amd64.whl"
            },
            {
              "algorithm": "sha256",
              "hash": "edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef",
              "url": "https://files.pythonhosted.org/packages/1a/2e/151484f49fd03944c4a3ad9c418ed193cfd02724e138ac8a9505d056c582/numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl"
            },
            {
              "algorithm": "sha256",
              "hash": "2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a",
              "url": "https://files.pythonhosted.org/packages/20/f7/b24208eba89f9d1b58c1668bc6c8c4fd472b20c45573cb767f59d49fb0f6/numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl"
            },
            {
              "algorithm": "sha256",
              "hash": "62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a",
              "url": "https://files.pythonhosted.org/packages/24/03/6f229fe3187546435c4f6f89f6d26c129d4f5bed40552899fcf1f0bf9e50/numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl"
            },
            {
              "algorithm": "sha256",
              "hash": "50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110",
              "url": "https://files.pythonhosted.org/packages/28/4a/46d9e65106879492374999e76eb85f87b15328e06bd1550668f79f7b18c6/numpy-1.26.4-cp312-cp312-win32.whl"
            },
            {
              "algorithm": "sha256",
              "hash": "a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6",
              "url": "https://files.pythonhosted.org/packages/28/7d/4b92e2fe20b214ffca36107f1a3e75ef4c488430e64de2d9af5db3a4637d/numpy-1.26.4-cp39-cp39-win32.whl"
            },
            {
              "algorithm": "sha256",
              "hash": "a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2",
              "url": "https://files.pythonhosted.org/packages/39/fe/39ada9b094f01f5a35486577c848fe274e374bbf8d8f472e1423a0bbd26d/numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl"
            },
            {
              "algorithm": "sha256",
              "hash": "666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5",
              "url": "https://files.pythonhosted.org/packages/3a/d0/edc009c27b406c4f9cbc79274d6e46d634d139075492ad055e3d68445925/numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl"
            },
            {
              "algorithm": "sha256",
              "hash": "cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2",
              "url": "https://files.pythonhosted.org/packages/3f/6b/5610004206cf7f8e7ad91c5a85a8c71b2f2f8051a0c0c4d5916b76d6cbb2/numpy-1.26.4-cp311-cp311-win_amd64.whl"
            },
            {
              "algorithm": "sha256",
              "hash": "afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30",
              "url": "https://files.pythonhosted.org/packages/3f/72/3df6c1c06fc83d9cfe381cccb4be2532bbd38bf93fbc9fad087b6687f1c0/numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl"
            },
            {
              "algorithm": "sha256",
              "hash": "679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd",
              "url": "https://files.pythonhosted.org/packages/43/12/01a563fc44c07095996d0129b8899daf89e4742146f7044cdbdb3101c57f/numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl"
            },
            {
              "algorithm": "sha256",
              "hash": "ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f",
              "url": "https://files.pythonhosted.org/packages/4b/d7/ecf66c1cd12dc28b4040b15ab4d17b773b87fa9d29ca16125de01adb36cd/numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl"
            },
            {
              "algorithm": "sha256",
              "hash": "ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a",
              "url": "https://files.pythonhosted.org/packages/4c/0c/9c603826b6465e82591e05ca230dfc13376da512b25ccd0894709b054ed0/numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl"
            },
            {
              "algorithm": "sha256",
              "hash": "f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3",
              "url": "https://files.pythonhosted.org/packages/54/30/c2a907b9443cf42b90c17ad10c1e8fa801975f01cb9764f3f8eb8aea638b/numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl"
            },
            {
              "algorithm": "sha256",
              "hash": "2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010",
              "url": "https://files.pythonhosted.org/packages/65/6e/09db70a523a96d25e115e71cc56a6f9031e7b8cd166c1ac8438307c14058/numpy-1.26.4.tar.gz"
            },
            {
              "algorithm": "sha256",
              "hash": "d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764",
              "url": "https://files.pythonhosted.org/packages/6d/64/c3bcdf822269421d85fe0d64ba972003f9bb4aa9a419da64b86856c9961f/numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl"
            },
            {
              "algorithm": "sha256",
              "hash": "03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b",
              "url": "https://files.pythonhosted.org/packages/75/5b/ca6c8bd14007e5ca171c7c03102d17b4f4e0ceb53957e8c44343a9546dcc/numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl"
            },
            {
              "algorithm": "sha256",
              "hash": "1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0",
              "url": "https://files.pythonhosted.org/packages/76/8c/2ba3902e1a0fc1c74962ea9bb33a534bb05984ad7ff9515bf8d07527cadd/numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl"
            },
            {
              "algorithm": "sha256",
              "hash": "7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e",
              "url": "https://files.pythonhosted.org/packages/79/ae/7e5b85136806f9dadf4878bf73cf223fe5c2636818ba3ab1c585d0403164/numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl"
            },
            {
              "algorithm": "sha256",
              "hash": "9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b",
              "url": "https://files.pythonhosted.org/packages/79/f8/97f10e6755e2a7d027ca783f63044d5b1bc1ae7acb12afe6a9b4286eac17/numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl"
            },
            {
              "algorithm": "sha256",
              "hash": "7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c",
              "url": "https://files.pythonhosted.org/packages/7d/24/ce71dc08f06534269f66e73c04f5709ee024a1afe92a7b6e1d73f158e1f8/numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl"
            },
            {
              "algorithm": "sha256",
              "hash": "95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c",
              "url": "https://files.pythonhosted.org/packages/8e/02/570545bac308b58ffb21adda0f4e220ba716fb658a63c151daecc3293350/numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl"
            },
            {
              "algorithm": "sha256",
              "hash": "b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218",
              "url": "https://files.pythonhosted.org/packages/95/12/8f2020a8e8b8383ac0177dc9570aad031a3beb12e38847f7129bacd96228/numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl"
            },
            {
              "algorithm": "sha256",
              "hash": "9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0",
              "url": "https://files.pythonhosted.org/packages/a7/94/ace0fdea5241a27d13543ee117cbc65868e82213fb31a8eb7fe9ff23f313/numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl"
            },
            {
              "algorithm": "sha256",
              "hash": "52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be",
              "url": "https://files.pythonhosted.org/packages/ae/8c/ab03a7c25741f9ebc92684a20125fbc9fc1b8e1e700beb9197d750fdff88/numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl"
            },
            {
              "algorithm": "sha256",
              "hash": "3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea",
              "url": "https://files.pythonhosted.org/packages/b5/42/054082bd8220bbf6f297f982f0a8f5479fcbc55c8b511d928df07b965869/numpy-1.26.4-cp39-cp39-win_amd64.whl"
            },
            {
              "algorithm": "sha256",
              "hash": "1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20",
              "url": "https://files.pythonhosted.org/packages/d2/b7/a734c733286e10a7f1a8ad1ae8c90f2d33bf604a96548e0a4a3a6739b468/numpy-1.26.4-cp311-cp311-win32.whl"
            },
            {
              "algorithm": "sha256",
              "hash": "bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07",
              "url": "https://files.pythonhosted.org/packages/d5/ef/6ad11d51197aad206a9ad2286dc1aac6a378059e06e8cf22cd08ed4f20dc/numpy-1.26.4-cp310-cp310-win32.whl"
            },
            {
              "algorithm": "sha256",
              "hash": "60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a",
              "url": "https://files.pythonhosted.org/packages/df/a0/4e0f14d847cfc2a633a1c8621d00724f3206cfeddeb66d35698c4e2cf3d2/numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl"
            },
            {
              "algorithm": "sha256",
              "hash": "d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4",
              "url": "https://files.pythonhosted.org/packages/fc/a5/4beee6488160798683eed5bdb7eead455892c3b4e1f78d79d8d3f3b084ac/numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl"
            }
          ],
          "project_name": "numpy",
          "requires_dists": [],
          "requires_python": ">=3.9",
          "version": "1.26.4"
        },
        {
          "artifacts": [
            {
              "algorithm": "sha256",
              "hash": "53c32e4adf05ce880bb57d2e35788de81d3febc9e05aaf474782b81d282b2703",
              "url": "file:///home/jsirois/dev/anisse/pex-minimal-repros"
            }
          ],
          "project_name": "repro",
          "requires_dists": [],
          "requires_python": "~=3.9",
          "version": "0.0.1"
        }
      ],
      "platform_tag": null
    }
  ],
  "only_builds": [],
  "only_wheels": [],
  "path_mappings": {},
  "pex_version": "2.3.1",
  "pip_version": "24.0",
  "prefer_older_binary": false,
  "requirements": [
    "numpy",
    "repro==0.0.1"
  ],
  "requires_python": [
    "~=3.9"
  ],
  "resolver_version": "pip-2020-resolver",
  "style": "universal",
  "target_systems": [],
  "transitive": true,
  "use_pep517": null
}

# ~/dev/anisse/pex-minimal-repros (4648ec0) [?] via  v3.10.12
:; pex --lock lock.json -c entry -o dist/entry.pex

# ~/dev/anisse/pex-minimal-repros (4648ec0) [?] via  v3.10.12
:; dist/entry.pex
Hello  1.26.4

So I think what you're looking for is the ability to build a PEX from a partially locked set of input requirements (just lock 3rdparty requirements; not local projects). That feature does not exist today.

Yes, that's exactly that, a bit like what lock files do in the js, go or rust ecosystem. Note that in a venv, one can get close to this result, by first doing a pip install -r <requirements-with-hashes>, followed by a second pip install .. I realize this might not be a pex issue, and just the way pip behaves since pex invokes "pip_download". Wouldn't be possible to invoke it twice to reach a similar result?
I wanted to investigate using pex locks, which might match my requirements, but then it meant having at least two sets of lockfiles (one for the generated requirements.txt, one for each python version for which we want to generate a pex); at that point the cons might outweigh the gains, and just having "release" generated pex files properly archived and traced might be enough (without a lockfile).

Ok, finally looking back at this. I think what this means then using examples is:

Lock 3rdparty for all supported Pythons (~=3.9) and all platforms (Linux and Mac):pex3 lock create -r requirements.in --target-system linux --target-system mac --interpreter-constraint "~=3.9" --style universal --pip-version 24.0 --indent 2 -o lock.json

Build local project PEX from lock:pex --project . --lock lock.json -c entry -o dist/entry.pex

The new feature would be --project . in step 2. Instead of using a bare ., which today means a local project requirement to be looked up in the lock, the --project . would mean to 1st build the local project at . and then resolve all its dependencies from the --lock (and fail if it had dependencies not in the --lock).
With this, step 1 could also be done like so:
pex3 lock create --project . --target-system linux --target-system mac --interpreter-constraint "~=3.9" --style universal --pip-version 24.0 --indent 2 -o lock.json

Here the -r requirements.in is replaced with --project .. The meaning is the same as in the step 2 example: 1st build the --project at ., and then lock its requirements.

Ok, missed a small change in #2455 to get bdist_pex actually using --project. I'll patch that up and add an IT ~identical to your OP repro repo commit to make sure this is / stays fixed this time.

I wanted to investigate using pex locks, which might match my requirements, but then it meant having at least two sets of lockfiles (one for the generated requirements.txt, one for each python version for which we want to generate a pex); at that point the cons might outweigh the gains, and just having "release" generated pex files properly archived and traced might be enough (without a lockfile).

I wanted to circle back and highlight that I don't think this is true. A pex3 lock {create,sync} --style universal --interpreter-constraint ~=3.9 ... lock will lock for all python versions implied by the interpreter constraint as well as all platforms; so you only need 1 lock file. If you need a hashed requirements file for interoperability with other tools, those are per-interpreter, but don't really need to be checked in since they can be derived reproducibly from the checked in lock file with:
some-other-tool-in-activated-venv-that-also-has-pex-installed -r $(pex3 lock export lock.json)

For example:
# Given a universal lock.
:; pex3 lock create numpy --style universal --interpreter-constraint ~=3.9 --pip-version latest --indent 2 -o lock.json

:; python3.11 -mvenv 311.venv
311.venv/bin/pip -q install -U pip pex
311.venv/bin/pip list
Package    Version
---------- -------
pex        2.8.0
pip        24.1.1
setuptools 65.5.0
:; 311.venv/bin/pip -q install --require-hashes -r <(311.venv/bin/pex3 lock export lock.json)
:; 311.venv/bin/pip list
Package    Version
---------- -------
numpy      2.0.0
pex        2.8.0
pip        24.1.1
setuptools 65.5.0

# Note that the ephemeral hashed requirements used are exactly for the subset of applicable dists usable by Python 3.11 (1 wheel hash, 1 sdist hash):
311.venv/bin/pex3 lock export lock.json
numpy==2.0.0 \
  --hash=sha256:a7039a136017eaa92c1848152827e1424701532ca8e8967fe480fe1569dae581 \
  --hash=sha256:cf5d1c9e6837f8af9f92b6bd3e86d513cdc11f60fd62185cc49ec7d1aba34864

# And that set changes for different Pythons since the wheel is different (or there is no wheel at all):
:; for v in `seq 9 13`; do which python3.$v && 311.venv/bin/pex3 lock export --python python3.$v lock.json && echo; done
/home/jsirois/.pyenv/shims/python3.9
numpy==2.0.0 \
  --hash=sha256:821eedb7165ead9eebdb569986968b541f9908979c2da8a4967ecac4439bae3d \
  --hash=sha256:cf5d1c9e6837f8af9f92b6bd3e86d513cdc11f60fd62185cc49ec7d1aba34864

/home/jsirois/.pyenv/shims/python3.10
numpy==2.0.0 \
  --hash=sha256:6d7696c615765091cc5093f76fd1fa069870304beaccfd58b5dcc69e55ef49c1 \
  --hash=sha256:cf5d1c9e6837f8af9f92b6bd3e86d513cdc11f60fd62185cc49ec7d1aba34864

/home/jsirois/.pyenv/shims/python3.11
numpy==2.0.0 \
  --hash=sha256:a7039a136017eaa92c1848152827e1424701532ca8e8967fe480fe1569dae581 \
  --hash=sha256:cf5d1c9e6837f8af9f92b6bd3e86d513cdc11f60fd62185cc49ec7d1aba34864

/home/jsirois/.pyenv/shims/python3.12
numpy==2.0.0 \
  --hash=sha256:49d9f7d256fbc804391a7f72d4a617302b1afac1112fac19b6c6cec63fe7fe8a \
  --hash=sha256:cf5d1c9e6837f8af9f92b6bd3e86d513cdc11f60fd62185cc49ec7d1aba34864

/home/jsirois/.pyenv/shims/python3.13
numpy==2.0.0 \
  --hash=sha256:cf5d1c9e6837f8af9f92b6bd3e86d513cdc11f60fd62185cc49ec7d1aba34864

# Of course all these hashes are there in the lock file - there is no network access or resolving when exporting:
:; jq -r '.locked_resolves[] | .locked_requirements[] | .artifacts[] | .algorithm + ":" + .hash + " " + (.url | sub("^https.*/"; ""))' lock.json
sha256:cef04d068f5fb0518a77857953193b6bb94809a806bd0a14983a8f12ada060c9 numpy-2.0.0-pp39-pypy39_pp73-win_amd64.whl
sha256:feff59f27338135776f6d4e2ec7aeeac5d5f7a08a83e80869121ef8164b74af9 numpy-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl
sha256:34f003cb88b1ba38cb9a9a4a3161c1604973d7f9d5552c38bc2f04f829536609 numpy-2.0.0-cp311-cp311-macosx_14_0_arm64.whl
sha256:cf5d1c9e6837f8af9f92b6bd3e86d513cdc11f60fd62185cc49ec7d1aba34864 numpy-2.0.0.tar.gz
sha256:17067d097ed036636fa79f6a869ac26df7db1ba22039d962422506640314933a numpy-2.0.0-pp39-pypy39_pp73-macosx_14_0_x86_64.whl
sha256:46e161722e0f619749d1cd892167039015b2c2817296104487cd03ed4a955995 numpy-2.0.0-cp311-cp311-musllinux_1_1_x86_64.whl
sha256:acd3a644e4807e73b4e1867b769fbf1ce8c5d80e7caaef0d90dcdc640dfc9787 numpy-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl
sha256:c5a59996dc61835133b56a32ebe4ef3740ea5bc19b3983ac60cc32be5a665d54 numpy-2.0.0-cp312-cp312-win32.whl
sha256:49d9f7d256fbc804391a7f72d4a617302b1afac1112fac19b6c6cec63fe7fe8a numpy-2.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
sha256:04494f6ec467ccb5369d1808570ae55f6ed9b5809d7f035059000a37b8d7e86f numpy-2.0.0-cp310-cp310-macosx_10_9_x86_64.whl
sha256:0a43f0974d501842866cc83471bdb0116ba0dffdbaac33ec05e6afed5b615238 numpy-2.0.0-cp310-cp310-macosx_14_0_arm64.whl
sha256:1cde1753efe513705a0c6d28f5884e22bdc30438bf0085c5c486cdaff40cd67a numpy-2.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
sha256:1e72728e7501a450288fc8e1f9ebc73d90cfd4671ebbd631f3e7857c39bd16f2 numpy-2.0.0-cp312-cp312-macosx_14_0_arm64.whl
sha256:b6f6a8f45d0313db07d6d1d37bd0b112f887e1369758a5419c0370ba915b3871 numpy-2.0.0-cp311-cp311-macosx_14_0_x86_64.whl
sha256:63b92c512d9dbcc37f9d81b123dec99fdb318ba38c8059afc78086fe73820275 numpy-2.0.0-cp39-cp39-win32.whl
sha256:b4c76e3d4c56f145d41b7b6751255feefae92edbc9a61e1758a98204200f30fc numpy-2.0.0-cp310-cp310-musllinux_1_1_x86_64.whl
sha256:ad0c86f3455fbd0de6c31a3056eb822fc939f81b1618f10ff3406971893b62a5 numpy-2.0.0-cp311-cp311-macosx_10_9_x86_64.whl
sha256:3f6bed7f840d44c08ebdb73b1825282b801799e325bcbdfa6bc5c370e5aecc65 numpy-2.0.0-cp39-cp39-win_amd64.whl
sha256:e7f387600d424f91576af20518334df3d97bc76a300a755f9a8d6e4f5cadd289 numpy-2.0.0-cp311-cp311-macosx_11_0_arm64.whl
sha256:e61155fae27570692ad1d327e81c6cf27d535a5d7ef97648a17d922224b216de numpy-2.0.0-cp39-cp39-macosx_10_9_x86_64.whl
sha256:38ecb5b0582cd125f67a629072fed6f83562d9dd04d7e03256c9829bdec027ad numpy-2.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
sha256:9c27f0946a3536403efb0e1c28def1ae6730a72cd0d5878db38824855e3afc44 numpy-2.0.0-cp39-cp39-musllinux_1_2_aarch64.whl
sha256:821eedb7165ead9eebdb569986968b541f9908979c2da8a4967ecac4439bae3d numpy-2.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
sha256:cee6cc0584f71adefe2c908856ccc98702baf95ff80092e4ca46061538a2ba98 numpy-2.0.0-cp310-cp310-win32.whl
sha256:903703372d46bce88b6920a0cd86c3ad82dae2dbef157b5fc01b70ea1cfc430f numpy-2.0.0-cp39-cp39-macosx_14_0_arm64.whl
sha256:9416a5c2e92ace094e9f0082c5fd473502c91651fb896bc17690d6fc475128d6 numpy-2.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl
sha256:fbd6acc766814ea6443628f4e6751d0da6593dae29c08c0b2606164db026970c numpy-2.0.0-cp311-cp311-win_amd64.whl
sha256:ed08d2703b5972ec736451b818c2eb9da80d66c3e84aed1deeb0c345fefe461b numpy-2.0.0-cp310-cp310-win_amd64.whl
sha256:84554fc53daa8f6abf8e8a66e076aff6ece62de68523d9f665f32d2fc50fd66e numpy-2.0.0-cp312-cp312-macosx_14_0_x86_64.whl
sha256:a356364941fb0593bb899a1076b92dfa2029f6f5b8ba88a14fd0984aaf76d0df numpy-2.0.0-cp312-cp312-win_amd64.whl
sha256:2635dbd200c2d6faf2ef9a0d04f0ecc6b13b3cad54f7c67c61155138835515d2 numpy-2.0.0-cp310-cp310-macosx_11_0_arm64.whl
sha256:354f373279768fa5a584bac997de6a6c9bc535c482592d7a813bb0c09be6c76f numpy-2.0.0-cp312-cp312-macosx_10_9_x86_64.whl
sha256:c73aafd1afca80afecb22718f8700b40ac7cab927b8abab3c3e337d70e10e5a2 numpy-2.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
sha256:4554eb96f0fd263041baf16cf0881b3f5dafae7a59b1049acb9540c4d57bc8cb numpy-2.0.0-cp39-cp39-macosx_11_0_arm64.whl
sha256:9a1712c015831da583b21c5bfe15e8684137097969c6d22e8316ba66b5baabe4 numpy-2.0.0-cp39-cp39-musllinux_1_1_x86_64.whl
sha256:0e50842b2295ba8414c8c1d9d957083d5dfe9e16828b37de883f51fc53c4016f numpy-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl
sha256:5f64641b42b2429f56ee08b4f427a4d2daf916ec59686061de751a55aafa22e4 numpy-2.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
sha256:a7039a136017eaa92c1848152827e1424701532ca8e8967fe480fe1569dae581 numpy-2.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
sha256:3e8e01233d57639b2e30966c63d36fcea099d17c53bf424d77f088b0f4babd86 numpy-2.0.0-cp39-cp39-macosx_14_0_x86_64.whl
sha256:6d7696c615765091cc5093f76fd1fa069870304beaccfd58b5dcc69e55ef49c1 numpy-2.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
sha256:0ec84b9ba0654f3b962802edc91424331f423dcf5d5f926676e0150789cb3d95 numpy-2.0.0-cp312-cp312-musllinux_1_1_x86_64.whl
sha256:79e843d186c8fb1b102bef3e2bc35ef81160ffef3194646a7fdd6a73c6b97196 numpy-2.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
sha256:2ce46fd0b8a0c947ae047d222f7136fc4d55538741373107574271bc00e20e8f numpy-2.0.0-cp311-cp311-win32.whl
sha256:8d83bb187fb647643bd56e1ae43f273c7f4dbcdf94550d7938cfc32566756514 numpy-2.0.0-cp310-cp310-macosx_14_0_x86_64.whl
sha256:4d2f62e55a4cd9c58c1d9a1c9edaedcd857a73cb6fda875bf79093f9d9086f85 numpy-2.0.0-cp312-cp312-macosx_11_0_arm64.whl

Alright @anisse, with Pex 2.8.1 released your example at https://github.com/anisse/pex-minimal-repros/commit/4648ec016a644f91362a5e5984957f03e7053a60 works as-is:
:; git reset --hard 4648ec016a644f91362a5e5984957f03e7053a60
HEAD is now at 4648ec0 initial version reproducing the pex + hashes issue

# ~/dev/anisse/pex-minimal-repros (4648ec0) [$] via  v3.10.12 on ☁
:; make clean
rm -fr ".env" dist requirements.txt __pycache__

# ~/dev/anisse/pex-minimal-repros (4648ec0) [$] via  v3.10.12 on ☁
:; make
python3 -m venv .env
./.env/bin/pip install --upgrade pip-tools pip pex
Collecting pip-tools
  Using cached pip_tools-7.4.1-py3-none-any.whl (61 kB)
Requirement already satisfied: pip in ./.env/lib/python3.10/site-packages (22.0.2)
Collecting pip
  Using cached pip-24.1.2-py3-none-any.whl (1.8 MB)
Collecting pex
  Downloading pex-2.8.1-py2.py3-none-any.whl (3.4 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.4/3.4 MB 8.3 MB/s eta 0:00:00
Collecting wheel
  Using cached wheel-0.43.0-py3-none-any.whl (65 kB)
Collecting pyproject-hooks
  Using cached pyproject_hooks-1.1.0-py3-none-any.whl (9.2 kB)
Collecting build>=1.0.0
  Using cached build-1.2.1-py3-none-any.whl (21 kB)
Collecting click>=8
  Using cached click-8.1.7-py3-none-any.whl (97 kB)
Collecting tomli
  Using cached tomli-2.0.1-py3-none-any.whl (12 kB)
Requirement already satisfied: setuptools in ./.env/lib/python3.10/site-packages (from pip-tools) (59.6.0)
Collecting packaging>=19.1
  Using cached packaging-24.1-py3-none-any.whl (53 kB)
Installing collected packages: wheel, tomli, pyproject-hooks, pip, pex, packaging, click, build, pip-tools
  Attempting uninstall: pip
    Found existing installation: pip 22.0.2
    Uninstalling pip-22.0.2:
      Successfully uninstalled pip-22.0.2
Successfully installed build-1.2.1 click-8.1.7 packaging-24.1 pex-2.8.1 pip-24.1.2 pip-tools-7.4.1 pyproject-hooks-1.1.0 tomli-2.0.1 wheel-0.43.0
./.env/bin/pip-compile --output-file=requirements.txt --generate-hashes requirements.in
WARNING: --strip-extras is becoming the default in version 8.0.0. To silence this warning, either use --strip-extras to opt into the new default or use --no-strip-extras to retain the existing behavior.
 The --project feature was sorely missing.


Implementing an exemple

Hello,
I'm trying to implement an exemple of connexion but I always get this error:
{ errorCode: 0,   message: 'Invalid access token.',   requestId: 'IN32C163DK',   status: 401,   timestamp:<PHONE_NUMBER>669 }
Here the code:
`var nodemailer = require('nodemailer');
var Linkedin = require('node-linkedin')('app-id', 'secret', 'callback');
router.get('/linkedin', function(req, res) {
console.log("hello linkedin");
var linkedin = Linkedin.init('my_access_token');
linkedin.companies_search.name('facebook', 1, function(err, company) {
console.log(company);
name = company.companies.values[0].name;
desc = company.companies.values[0].description;
industry = company.companies.values[0].industries.values[0].name;
city = company.companies.values[0].locations.values[0].address.city;
websiteUrl = company.companies.values[0].websiteUrl;
});
});
`
Can you help me on that please?
Thanks

You have to put access token here:
 var linkedin = Linkedin.init('my_access_token');
Also, the object initiation should be moved on top next to loading.
var Linkedin = require('node-linkedin')('app-id', 'secret', 'callback');
var linkedin = LinkedIn.init(accessToken);

thank you for response. I have changed the code to the below and and I have this issue:
{ errorCode: 0,   message: 'Invalid access token.',   requestId: 'UEF0L5RK62',   status: 401,   timestamp:<PHONE_NUMBER>371 }
here my code:
`
var Linkedin = require('node-linkedin')('app-id', 'secret', 'callback');
router.get('/linkedin1', function(req, res) {
Linkedin.setCallback('http://localhost:3000/linkedin');
var scope = ['r_basicprofile','rw_company_admin','w_share','r_emailaddress'];
Linkedin.auth.authorize(res, scope, '2321334321');

});
router.get('/linkedin', function(req, res) {
Linkedin.auth.getAccessToken(res, req.query.code, req.query.state, function(err, results) {
    if ( err )
        return console.error(err);
});
var linkedin = Linkedin.init(req.query.code);
linkedin.companies_search.name('facebook', 1, function(err, company) {
console.log(company);
});

});
`
Thank you for your help!

You need to change this line:
var linkedin = Linkedin.init(req.query.code);
into:
var linkedin = Linkedin.init(results.access_token || results.accessToken);
And let me know if it doesn't work out.

can you provide an example w/o the express garbage? I want to use node.js simple script to access linkedin api. Is it possible? I don't see a way to get access token.

@chovy to get access token, the following flow works:
var Linkedin = require('node-linkedin')('app-id', 'secret', '/oauth/linkedin/callback');
// express route.
// Again, `res` is optional, you could pass `code` as the first parameter
app.get('/oauth/linkedin/callback', function(req, res) {
    Linkedin.auth.getAccessToken(res, req.query.code, req.query.state, function(err, results) {
        if ( err )
            return console.error(err);

        /**
         * Results have something like:
         * {"expires_in":5184000,"access_token":". . . ."}
         */

        console.log(results);
        return res.redirect('/');
    });
});
app.get('/oauth/linkedin', function(req, res) {
    // This will ask for permisssions etc and redirect to callback url.
    var scope = ['r_basicprofile', 'r_fullprofile', 'r_emailaddress', 'r_network', 'r_contactinfo', 'rw_nus', 'rw_groups', 'w_messages'];
    Linkedin.auth.authorize(res, scope); // scope will be an array of scopes from linkedin
});

Goto /oauth/linkedin in browser (on port where express app is running) and follow through. You will be able to see access token in console.

most oAuth services support authentication with username/password. Does this one?
I cannot open a browser, like I said its a cli script that runs on the server.
I've been able to do this with other oAuth apis, youtube, reddit, bing, twitter. but not linked in.
Here's SO answer that we are looking for answer on. Would you mind taking a look?
https://stackoverflow.com/questions/40149522/get-an-access-token-to-linkedin-api-using-email-and-password/41908860#41908860

@chovy I'm not sure if LinkedIn supports password based authentication. Generally, its against the practice to seek password and that's why OAuth2.0 was designed. You can see if there's an application-token or something similar in LinkedIn API (it may work as a password).

I agree but Oauth 2.0 itself allows for password auth for server side scripts and also development.


Initialization first attempt.

tr1d1um runs locally with these changes.

Codecov Report

Merging #5 into master will decrease coverage by 3.58%.
The diff coverage is 3.03%.

@@            Coverage Diff             @@
##           master       #5      +/-   ##
==========================================
- Coverage   58.87%   55.28%   -3.59%
==========================================
  Files           4        4
  Lines         231      246      +15
==========================================
  Hits          136      136
- Misses         95      110      +15

Impacted Files
Coverage Δ

src/tr1d1um/tr1d1um.go
0% <0%> (ø)
:arrow_up:

src/tr1d1um/conversion_utils.go
100% <100%> (ø)
: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 4a75863...cbc9a42. Read the comment docs.


how do config and use WireGuard?

Hi,
how do config and use WireGuard in DE version?
can help me?

See the latest messages in #604.

Hi, Dear, I tried many scenarios, but there is no download and upload after the first packet
I don't know what's the issue, can you help me?
maybe related to IP?
because when I use StaticIP through vpncmd I can't see any changes via Softether GUI
please help me with it
Click to see the screenshot

Is the default gateway set?

Yes, I set it, I checked even with a new HUB, and all of them do not send and receive either!!!
can you tell me what the problem is?
maybe not related to the gateway or IP, even I changed IP and Gateway, Public Key, and more!!!!

Is the WireGuard session actually established?

how can I know about it?
in Android show get first data
tell me more, I'm novice for Wireguard

Check the server's logs.

The WireGuard key is not associated with a user on the server.

This is the issue. You have to add the user's public key.

Dear it's already set, as i explained before
Even i added several keys and checked all of them in different ways
Maybe there is another mistake by me

Are you 100% sure it's the public key that is associated with the private one you're using on the client?

Now I set the public key for the user in the peer section, then use the pre-shared key obtained via ProtoOptionsGet WireGuard

In the peer section you have to put the server's public key.

Finally, the problem was fixed, but is there any way to use it via Radius?
or automatically create Wireguard profiles like OpenVPN for the customers?
or make it more simple for creating more than 1000 users in once

It can be done in script using vpncmd. What else do you prefer over vpncmd?
On Fri, Jun 9, 2023, 23:44 JellyVPN @.***> wrote:

Finally, the problem was fixed, but is there any way to use it via Radius?
or automatically create Wireguard profiles like OpenVPN for the customers?
or make it more simple for creating more than 1000 users in once
—
Reply to this email directly, view it on GitHub
https://github.com/SoftEtherVPN/SoftEtherVPN/issues/1852#issuecomment-1585157927,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAQ5KUDPKIXSC2XC4FZ3M2TXKOKKXANCNFSM6AAAAAAYIAGRXA
.
You are receiving this because you are subscribed to this thread.Message
ID: @.***>

which script and how?
can you explain more or give me a guide?

I've got it.
we have documentation gap ((
here's an example how to setup OpenVPN (sorry, need to create similar for
WireGuard yet)
SoftEtherVPN/start-se-openvpn.sh at master · SoftEtherVPN/SoftEtherVPN ·
GitHub
https://github.com/SoftEtherVPN/SoftEtherVPN/blob/master/.ci/start-se-openvpn.sh#L35-L40
пн, 12 июн. 2023 г. в 23:57, JellyVPN @.***>:

which script and how?
can you explain more or give me a guide?
—
Reply to this email directly, view it on GitHub
https://github.com/SoftEtherVPN/SoftEtherVPN/issues/1852#issuecomment-1588159288,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAQ5KUDLQKWG6IPU7YJ4QIDXK6GCZANCNFSM6AAAAAAYIAGRXA
.
You are receiving this because you commented.Message ID:
@.***>

I've got it. we have documentation gap (( here's an example how to setup OpenVPN (sorry, need to create similar for WireGuard yet) SoftEtherVPN/start-se-openvpn.sh at master · SoftEtherVPN/SoftEtherVPN · GitHub https://github.com/SoftEtherVPN/SoftEtherVPN/blob/master/.ci/start-se-openvpn.sh#L35-L40 пн, 12 июн. 2023 г. в 23:57, JellyVPN @.>:
…
which script and how? can you explain more or give me a guide? — Reply to this email directly, view it on GitHub <#1852 (comment)>, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAQ5KUDLQKWG6IPU7YJ4QIDXK6GCZANCNFSM6AAAAAAYIAGRXA . You are receiving this because you commented.Message ID: @.>

This looks like a way to set users manually while starting an openvpn server.. is it RADIUS and I'm missing something?
I too am very curious if Wireguard could be used with any kind of RADIUS/OAUTH/etc user-provider.

现在我在对等部分中为用户设置公钥，然后使用通过 ProtoOptionsGet WireGuard 获取的预共享密钥

在对等部分中，您必须输入服务器的公钥。

接口需要私钥（我用的是随机创建的app）

在界面部分，您必须输入
你好，请问在哪里输入用户的私钥

Two things are not clear from all these info fragments:
1.

Is it possible to use the SoftEther Client (DE) to connect using WireGuard protocol instead of "default"?
or do I have to use the official wireguard client ? (which has many problems, like re-connecting issue)

2.

All Virtual HUBs would use basically the same global server WG public key?
Can the server prevent that HUBs "see each other" if WH is a peer-to-peer protocol?
(And not all the trafic is going through the server)

I'm asking this, because it seems that the server is using too much CPU time to connect even 1+1 clients with each other. So theoretically the peer-to-peer WG structure would take off the load from the server. Would not?
(I'd like to connect several hundreds of clients only with each other, not allowing using the internet over VPN.)


Mat-toolbar issue when using component selector as placeholder for mat-toolbar-row

What is the expected behavior?
The mat-toolbar should either:

render each mat-toolbar-row, even if it's within a separate component.
raise an error when a mat-toolbar-row is within a router-outlet.

What is the current behavior?
In both of the above use cases, the toolbar rows are "jumbled" and, for issue-1 the now familiar console error regarding "mixed toolbar modes" is raised. However, no errors are raised when a router-outlet is used in lieu of a component selector. This was my original problem and the lack of error reporting was unhelpful. I eventually distilled the problem to its simplest use case.
What are the steps to reproduce?
Here in Stackblitz
Which versions of Angular, Material, OS, TypeScript, browsers are affected?
Angular CLI: 7.3.2
Node: 10.13.0
OS: win32 x64
Angular: 7.2.6
... animations, common, compiler, compiler-cli, core, forms
... language-service, platform-browser, platform-browser-dynamic
... router
Package                           Version
@angular-devkit/architect         0.13.2
@angular-devkit/build-angular     0.13.2
@angular-devkit/build-optimizer   0.13.2
@angular-devkit/build-webpack     0.13.2
@angular-devkit/core              7.3.2
@angular-devkit/schematics        7.3.2
@angular/cdk                      7.3.3
@angular/cli                      7.3.2
@angular/material                 7.3.3
@ngtools/webpack                  7.3.2
@schematics/angular               7.3.2
@schematics/update                0.13.2
rxjs                              6.3.3
typescript                        3.2.4
webpack                           4.29.0
Is there anything else we should know?

This is not something we're directly support in a component, but you can use ngProjectAs to project custom content in the place of an expected API.
https://angular.io/guide/content-projection#projecting-content-in-more-complex-environments


Making changes to the package functionality

Hlo we both talked once hope you know me, what i want to say is media kit will soon get web support too the branch has already been merged and soon @alexmercerind will make a release so there will be no need to intermingle video player and media kit package as media kit will have every functionality. There may also be a ui coming. So why dont you make this a wrapper widget for media kit widget so that media kit we can use the ui of this package. Giving it another name. Then even if media kit will get a ui you can override it with wrapping it with your package widget

This is already implemented and published, https://pub.dev/packages/flutter_meedu_media_kit
Hope you enjoy it, thank you very much
Pip is not yet released there, keep in mind web support by media_kit may not support playing hls, while we can use the video_player web hls package here.

package:media_kit will get it's own in-house video controls before 1.0.0 (expect by the end of this month), one of our customers need it. Default highly customizable: material, cupertino etc. controls for usage. Following is a video showing Material controls that package:media_kit will get (WIP):
https://github.com/zezo357/flutter_meedu_videoplayer/assets/28951144/a411e0bf-dc6e-44a9-819e-e06619253ec1
As you can see, the controls look very similar to YouTube.
I like stability & quality. package:media_kit is not 1.0.0 yet. I only put out stable code. Current focus has been on adding more unit tests & ensuring a stable ground before moving ahead, to enjoy a steady ride.
I have no control over whatever the people on the internet do. A stable release from my end should render (possibly) this package redundant. This package present(s) work-in-progress state work in package:media_kit as their own research. I hold no accountability for this.
Also, please refrain from ping-ing me; contact through e-mail or Discord etc.

package:media_kit will get it's own in-house video controls before 1.0.0 (expect by the end of this month), one of our customers need it. Default highly customizable: material, cupertino etc. controls for usage. Following is a video showing Material controls that package:media_kit will get (WIP):
https://github.com/zezo357/flutter_meedu_videoplayer/assets/28951144/a411e0bf-dc6e-44a9-819e-e06619253ec1
As you can see, the controls look very similar to YouTube.
I like stability & quality. package:media_kit is not 1.0.0 yet. I only put out stable code. Current focus has been on adding more unit tests & ensuring a stable ground before moving ahead, to enjoy a steady ride. On the other hand, having a good public API & architecture that industry can rely on is whole another challenge.
I have no control over whatever the people on the internet do. A stable release from my end should render (possibly) this package redundant. This package uses package:media_kit in it's work-in-progress state. I hold no accountability for this, or any issues which get surfaced due to this.
Also, please refrain from ping-ing me; contact through e-mail or Discord etc.

In my case I am only releasing the package since I use it in the current state, would love to only use media_kit when it's stable and controls are included and customizable.
Thank you very much for your work.

This is already implemented and published, https://pub.dev/packages/flutter_meedu_media_kit
Hope you enjoy it, thank you very much
Pip is not yet released there, keep in mind web support by media_kit may not support playing hls, while we can use the video_player web hls package here.

what i mean by that is after the media_kit gets web functionality you can just modify your code such that we can wrap media kit video widget with your package so you wont need to import any of media kit in your package just the ui and you can access the player of the child video vidget and do all the volume ui, progress bar etc.

This is already implemented and published, https://pub.dev/packages/flutter_meedu_media_kit
Hope you enjoy it, thank you very much
Pip is not yet released there, keep in mind web support by media_kit may not support playing hls, while we can use the video_player web hls package here.

what i mean by that is after the media_kit gets web functionality you can just modify your code such that we can wrap media kit video widget with your package so you wont need to import any of media kit in your package just the ui and you can access the player of the child video vidget and do all the volume ui, progress bar etc.

Yes the package I mentioned, is using only media_kit,
And wrapping the video player with this package controls

This is already implemented and published, https://pub.dev/packages/flutter_meedu_media_kit
Hope you enjoy it, thank you very much
Pip is not yet released there, keep in mind web support by media_kit may not support playing hls, while we can use the video_player web hls package here.

what i mean by that is after the media_kit gets web functionality you can just modify your code such that we can wrap media kit video widget with your package so you wont need to import any of media kit in your package just the ui and you can access the player of the child video vidget and do all the volume ui, progress bar etc.

Yes the package I mentioned, is using only media_kit,
And wrapping the video player with this package controls

It should look something like
import 'package: flutter_meedu_video_player';
meedu_video_ui(
child: Mediakitvideo(
player: player;
),
)
OR
import 'package: flutter_meedu_video_player';
Mediakitvideo(
player: player,
ui: custommeedui,
)
this needs media kit to implement ui functionality

This is already implemented and published, https://pub.dev/packages/flutter_meedu_media_kit
Hope you enjoy it, thank you very much
Pip is not yet released there, keep in mind web support by media_kit may not support playing hls, while we can use the video_player web hls package here.

what i mean by that is after the media_kit gets web functionality you can just modify your code such that we can wrap media kit video widget with your package so you wont need to import any of media kit in your package just the ui and you can access the player of the child video vidget and do all the volume ui, progress bar etc.

Yes the package I mentioned, is using only media_kit,
And wrapping the video player with this package controls

It should look something like
import 'package: flutter_meedu_video_player';
meedu_video_ui(
child: Mediakitvideo(
player: player;
),
)
OR
import 'package: flutter_meedu_video_player';
Mediakitvideo(
player: player,
ui: custommeedui,
)
this needs media kit to implement ui functionality

I am trying to maintain the same interface for both versions of the package
So I do that internally in both cases
So yeah it's implemented like this, but internally

Hey dont hard code it into the main package or add a functionality so that we can use our own fully customizable ui that we provide that overrides the whole default ui. An example for this is https://pub.dev/packages/flutter_swiper_view this package gives the functionality to override its whole default ui

Who are you? I don't need your teaching or guidance to write & architecture code.

Pip is not yet released there, keep in mind web support by media_kit may not support playing hls, while we can use the video_player web hls package here.

sorry i for much confusion this is what i said

It's better not to release something instead of publishing a buggy & incorrect implementation. Expect a 1.0.0 update before this month :) Let's allow me to work in peace. There are far bigger customers which I'm aiming for. I want to meet a level of quality.
As for video controls, I want them to LOOK GOOD, meet a standard, and follow the same principles as Flutter. See:
https://gist.github.com/alexmercerind/b228883a09cb6ec275df4a12a03227bd
You can reach us on our Discord for any updates. And... sorry I can't endorse this package, not good enough.

And.. no we can't depend upon another package video_player_hls. It internally uses HLS.js, which we will use.
package:media_kit provides out-of-box support for playlists, which these packages don't.

It's better not to release something instead of publishing a buggy & incorrect implementation. Expect 1.0.0 release of package:media_kit before this month :) Let's allow me to work in peace. There are far bigger customers which I'm aiming for. I want to meet a level of quality.
As for video controls, I want them to LOOK GOOD, meet a standard, and follow the same principles as Flutter. See:
https://gist.github.com/alexmercerind/b228883a09cb6ec275df4a12a03227bd
You can reach us on our Discord for any updates. And... sorry I can't endorse this package, not good enough.

Looks very good and easy to use, thank you for your awesome work.


Deprecate alternative JVM plugins

See #9837
Notes:

I added @Deprecated to all API types that are exclusively used by the deprecated plugins. In particular, I checked everything that was still incubating in the corresponding projects, because a type that has been around since Gradle 2.x/3.x should either be deprecated or be de-incubated. There is one type, JavadocArtifact, which I left incubating but did not deprecate (yet) because it is also used in the artifact query API (which we will probably also deprecate soonish).
I did not add any docs here. I think mentioning this in the release notes / upgrade guide is only confusing, since these should have been deprecated for a long time. I don't want users to get confuesed. The names are all so similar: java, java-library, java-lang, ...

I think we should document this in some form. We will just need to be careful about the wording.

Thanks for the feedback @adammurdoch .
I added a section to the upgrading guide: https://github.com/gradle/gradle/pull/11598/commits/9ebe8e4f5d1203b127711e1f3a0d822341fe705a
Before I adjust all tests, I would like to decide on a deprecation warning. Proposal (would add the same message for all deprecations):
SingleMessageLogger.nagUserOfDeprecatedPlugin("java-lang", "Consult the upgrading guide for further information: " +
            new DocumentationRegistry().getDocumentationFor("upgrading_version_6", "upgrading_jvm_plugins"));

Renders to:
The java-lang plugin has been deprecated. This is scheduled to be removed in Gradle 7.0. Consult the upgrading guide for further information: https://docs.gradle.org/6.1/userguide/upgrading_version_6.html#upgrading_jvm_plugins


Use layer 2 for SVC always.

This fixes the case of screen share forwarding. We should probably also look at proper AddTrack. The problem was that

AddTrack used two layers for screen share from JS sample app
Track was published with rid = f. Given that and the track info, consistent layer mapping set the layer as 1.
getBufferLocked always uses the highest layer for SVC
Between the two, when down track was requesting PLI, there was no buffer at the requested layer and hence no PLI went out.

A few other notes

Tried locking SVC to layer 0 (instead of layer 2), but that resulted in PLI layer lock spamming. It did not happen in v1.3.0 of the server though. Not sure what causes that. Need to investigate later. But, that does not happen when using layer 2 buffer as SVC buffer.
When using layer 2 for SVC, the PLI throttle config will be using that of layer 2. Is that okay?
buffer structure should maintain more stats about spatial layers for SVC case so that layer stats can be reported to analytics/scoring etc.
In general, buffer may need some more hooks to make it SVC aware so that it can handle various spetial layer aware/specific bits.

It looks good for js-sdk implementation that always publish L3T3 for svc now, but the proper way is making js-sdk to publish the correct svc layers in TrackInfo, then we can remove this line here.

yeah, we should fix that. I am also thinking we should just use layer = 0 for SVC consistently and not worry about layer mapping. Will make the SVC case simpler. It is not working properly now. Will spend some time later to look into it. If that can work properly, do you think we should just use layer = 0 or is there some specific need to use layer =2 ?

It looks good for js-sdk implementation that always publish L3T3 for svc now, but the proper way is making js-sdk to publish the correct svc layers in TrackInfo, then we can remove this line here.

yeah, we should fix that. I am also thinking we should just use layer = 0 for SVC consistently and not worry about layer mapping. Will make the SVC case simpler. It is not working properly now. Will spend some time later to look into it. If that can work properly, do you think we should just use layer = 0 or is there some specific need to use layer =2 ?

I think it can work that way, though need to check those layer mapping & buffer codes carefully as we use layer=2 before.

It looks good for js-sdk implementation that always publish L3T3 for svc now, but the proper way is making js-sdk to publish the correct svc layers in TrackInfo, then we can remove this line here.

yeah, we should fix that. I am also thinking we should just use layer = 0 for SVC consistently and not worry about layer mapping. Will make the SVC case simpler. It is not working properly now. Will spend some time later to look into it. If that can work properly, do you think we should just use layer = 0 or is there some specific need to use layer =2 ?

I think it can work that way, though need to check those layer mapping & buffer codes carefully as we use layer=2 before.

Sounds good. Something to dig into later.


[add] UserCard Component

Can set following parameters:

id number
name string
avatar string
isOwner boolean
isKickable boolean
onKick function, takes id (number) as parameter

Name shrinks in size if too big and trunkates if it's still too big
avatar props sets the avatar picture
isOwner will show a star on the user card if true
isKickable will show a cross (button that executes onKick function) if true and if isOwner is not true

RESOLVE #38

MAX WIDTH D'UN USERNAME : 14


Can not signin Azure account under coporate firewall

Issue Type: Bug
The issue was reported by many users, and still has issue with latest version 1.36.   Rollback 1.31, same issue .   Worked in different ways per people's option, none of worked.  Is there anyway give us a tranparent experience on this
VS Code version: Code 1.31.1 (1b8e8302e405050205e69b59abb3559592bb9e60, 2019-02-12T02:20:54.427Z)
OS version: Windows_NT x64 10.0.15063

System Info

Item
Value

CPUs
Intel(R) Core(TM) i5-6300U CPU @ 2.40GHz (4 x 2496)

GPU Status
2d_canvas: enabledchecker_imaging: disabled_offflash_3d: enabledflash_stage3d: enabledflash_stage3d_baseline: enabledgpu_compositing: enabledmultiple_raster_threads: enabled_onnative_gpu_memory_buffers: disabled_softwarerasterization: enabledsurface_synchronization: enabled_onvideo_decode: enabledwebgl: enabledwebgl2: enabled

Memory (System)
15.65GB (8.07GB free)

Process Argv

Screen Reader
no

VM
0%

Extensions (3)
Exte

cc @alexr00 as Christof is out.

/duplicate #12588


Update text to avoid issue in localization

The English page would not change.

@EliotSeattle - Could you take a look at this and advise? The @ symbol seems to render OK as is. Would it be advisable to take this loc PR?

Escaping the ampersand is completely fine, outside of code blocks. Looks good, @DOMARS

@tedhudek - This PR is ready to go to master/live when you have a moment.


README.md: update for rootless mode

Signed-off-by: Akihiro Suda<EMAIL_ADDRESS>

Codecov Report

Merging #93 into master will not change coverage.
The diff coverage is n/a.

@@          Coverage Diff           @@
##           master     #93   +/-   ##
======================================
  Coverage    0.16%   0.16%
======================================
  Files          11      11
  Lines         618     618
======================================
  Hits            1       1
  Misses        616     616
  Partials        1       1

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 d05b3e4...8f88b01. Read the comment docs.

thanks!!


output from custom zero-touch does not shoe up in generative deisgn

Hi There,
I found your profile at this website and I thought you might be able to help me out.
I have a very simple zero-touch node which works smooth in the dynamo graph both in Revit Dynamo and Sandbox. However, when I export to GD for generative design, its output value shows up as * which means GD does not observe any value for it.
Is there a specific setting or reference that I should add before building the dll file in visual studio?
I have also added my question to the forum here:
Zero touch node gives GD no output - Generative Design - Dynamo (dynamobim.com)
you can find more information there.
I should be grateful if you could help me with this.
Thank you

Hi @HadiMoosavi,
When working with custom zero-touch nodes, you’ll need to make sure you’ve set up your nodes like a “real” package, similar to what you’d expect for a package that you’d download from the Dynamo Package Manager. When the Dynamo extension for GD collects the packages used in your graph, it’s going to look in the folder locations specified in the “Manage Node and Package Paths” menu. If you added your custom library with the “Add Library +” icon, the extension won’t find your zero-touch nodes.
You can use the tools in Dynamo for Revit to turn your zero-touch nodes into a local package – you aren’t required to actually upload your nodes to the PM for them to work with GD.
See "Publishing a Package Locally" in the Primer: https://primer.dynamobim.org/11_Packages/11-4_Publishing.html

Hi @HadiMoosavi,
When working with custom zero-touch nodes, you’ll need to make sure you’ve set up your nodes like a “real” package, similar to what you’d expect for a package that you’d download from the Dynamo Package Manager. When the Dynamo extension for GD collects the packages used in your graph, it’s going to look in the folder locations specified in the “Manage Node and Package Paths” menu. If you added your custom library with the “Add Library +” icon, the extension won’t find your zero-touch nodes.
You can use the tools in Dynamo for Revit to turn your zero-touch nodes into a local package – you aren’t required to actually upload your nodes to the PM for them to work with GD.
See "Publishing a Package Locally" in the Primer: https://primer.dynamobim.org/11_Packages/11-4_Publishing.html

Hi again,
I published it locally but still in GD, I am getting * (no value) out of my node.
I am not sure why GD does not see my node.
Hadi
On Jan 25, 2021, 8:21 AM -0700, nate-peters<EMAIL_ADDRESS>wrote:

Hi @HadiMoosavi,
When working with custom zero-touch nodes, you’ll need to make sure you’ve set up your nodes like a “real” package, similar to what you’d expect for a package that you’d download from the Dynamo Package Manager. When the Dynamo extension for GD collects the packages used in your graph, it’s going to look in the folder locations specified in the “Manage Node and Package Paths” menu. If you added your custom library with the “Add Library +” icon, the extension won’t find your zero-touch nodes.
You can use the tools in Dynamo for Revit to turn your zero-touch nodes into a local package – you aren’t required to actually upload your nodes to the PM for them to work with GD.
See "Publishing a Package Locally" in the Primer: https://primer.dynamobim.org/11_Packages/11-4_Publishing.html
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or unsubscribe.

Hi again,
I published it locally but still in GD, I am getting * (no value) out of my node.
I am not sure why GD does not see my node.
Hadi
On Jan 25, 2021, 8:21 AM -0700, nate-peters<EMAIL_ADDRESS>wrote:

Hi @HadiMoosavi,
When working with custom zero-touch nodes, you’ll need to make sure you’ve set up your nodes like a “real” package, similar to what you’d expect for a package that you’d download from the Dynamo Package Manager. When the Dynamo extension for GD collects the packages used in your graph, it’s going to look in the folder locations specified in the “Manage Node and Package Paths” menu. If you added your custom library with the “Add Library +” icon, the extension won’t find your zero-touch nodes.
You can use the tools in Dynamo for Revit to turn your zero-touch nodes into a local package – you aren’t required to actually upload your nodes to the PM for them to work with GD.
See "Publishing a Package Locally" in the Primer: https://primer.dynamobim.org/11_Packages/11-4_Publishing.html
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or unsubscribe.

I also noticed this notification.
Sent from my iPhone

On Jan 25, 2021, at 8:27 PM<EMAIL_ADDRESS>wrote:

Hi again,
I published it locally but still in GD, I am getting * (no value) out of my node.
I am not sure why GD does not see my node.
Hadi

On Jan 25, 2021, 8:21 AM -0700, nate-peters<EMAIL_ADDRESS>wrote:
Hi @HadiMoosavi,
When working with custom zero-touch nodes, you’ll need to make sure you’ve set up your nodes like a “real” package, similar to what you’d expect for a package that you’d download from the Dynamo Package Manager. When the Dynamo extension for GD collects the packages used in your graph, it’s going to look in the folder locations specified in the “Manage Node and Package Paths” menu. If you added your custom library with the “Add Library +” icon, the extension won’t find your zero-touch nodes.
You can use the tools in Dynamo for Revit to turn your zero-touch nodes into a local package – you aren’t required to actually upload your nodes to the PM for them to work with GD.
See "Publishing a Package Locally" in the Primer: https://primer.dynamobim.org/11_Packages/11-4_Publishing.html
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or unsubscribe.

I also noticed this notification.
Sent from my iPhone

On Jan 25, 2021, at 8:27 PM<EMAIL_ADDRESS>wrote:

Hi again,
I published it locally but still in GD, I am getting * (no value) out of my node.
I am not sure why GD does not see my node.
Hadi

On Jan 25, 2021, 8:21 AM -0700, nate-peters<EMAIL_ADDRESS>wrote:
Hi @HadiMoosavi,
When working with custom zero-touch nodes, you’ll need to make sure you’ve set up your nodes like a “real” package, similar to what you’d expect for a package that you’d download from the Dynamo Package Manager. When the Dynamo extension for GD collects the packages used in your graph, it’s going to look in the folder locations specified in the “Manage Node and Package Paths” menu. If you added your custom library with the “Add Library +” icon, the extension won’t find your zero-touch nodes.
You can use the tools in Dynamo for Revit to turn your zero-touch nodes into a local package – you aren’t required to actually upload your nodes to the PM for them to work with GD.
See "Publishing a Package Locally" in the Primer: https://primer.dynamobim.org/11_Packages/11-4_Publishing.html
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or unsubscribe.

Hello Nate,
I tested sth. In my graph I have some nodes (from my package) that have output that are in the types (classes) that I have defined in my code. For example, look at these three nodes below. In dynamo they run well and they do not have null values. But when I watch the output in GD their output appear to be all null. Even if their value is constant an not dependent on the inputs.
Is this a rule that I should follow: keep and use all custom classes inside the nodes and make node outputs limited to types GD likes such as int, double, list, dictionaries, bool?
Thanks,
Hadi
On Jan 25, 2021, 8:21 AM -0700, nate-peters<EMAIL_ADDRESS>wrote:

Hi @HadiMoosavi,
When working with custom zero-touch nodes, you’ll need to make sure you’ve set up your nodes like a “real” package, similar to what you’d expect for a package that you’d download from the Dynamo Package Manager. When the Dynamo extension for GD collects the packages used in your graph, it’s going to look in the folder locations specified in the “Manage Node and Package Paths” menu. If you added your custom library with the “Add Library +” icon, the extension won’t find your zero-touch nodes.
You can use the tools in Dynamo for Revit to turn your zero-touch nodes into a local package – you aren’t required to actually upload your nodes to the PM for them to work with GD.
See "Publishing a Package Locally" in the Primer: https://primer.dynamobim.org/11_Packages/11-4_Publishing.html
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or unsubscribe.

Hello Nate,
I tested sth. In my graph I have some nodes (from my package) that have output that are in the types (classes) that I have defined in my code. For example, look at these three nodes below. In dynamo they run well and they do not have null values. But when I watch the output in GD their output appear to be all null. Even if their value is constant an not dependent on the inputs.
Is this a rule that I should follow: keep and use all custom classes inside the nodes and make node outputs limited to types GD likes such as int, double, list, dictionaries, bool?
Thanks,
Hadi
On Jan 25, 2021, 8:21 AM -0700, nate-peters<EMAIL_ADDRESS>wrote:

Hi @HadiMoosavi,
When working with custom zero-touch nodes, you’ll need to make sure you’ve set up your nodes like a “real” package, similar to what you’d expect for a package that you’d download from the Dynamo Package Manager. When the Dynamo extension for GD collects the packages used in your graph, it’s going to look in the folder locations specified in the “Manage Node and Package Paths” menu. If you added your custom library with the “Add Library +” icon, the extension won’t find your zero-touch nodes.
You can use the tools in Dynamo for Revit to turn your zero-touch nodes into a local package – you aren’t required to actually upload your nodes to the PM for them to work with GD.
See "Publishing a Package Locally" in the Primer: https://primer.dynamobim.org/11_Packages/11-4_Publishing.html
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or unsubscribe.

Are you attempting to set those custom datatypes as outputs in your graph? GD only supports number values at outputs.

Are you attempting to set those custom datatypes as outputs in your graph? GD only supports number values at outputs.

Sorry for the late update. I think I found the issue's root.
After building the node in Visual Studio, the zero-touch node gets updated in Dynamo. But when the GD is run, the updated zero-touch node (i mean the updated package and dll files) do not necessarily get copied to the GD folder location. This is because the package name and the node name do not change and I think Dynamo assumes there is no need to copy them again. A workaround is to save the Dynamo file with a different name.


Roswell support

I'm trying to set up ocicl on my machine using roswell.
Is there a way to do that?
If yes, then some documentation would be nice.
Otherwise adding support could make ocicl accessible to a larger user base.

I'm not very familiar with roswell, but it seems that it is pretty hard-coded to quicklisp.
Have you tried installing ocicl as documented, and then putting something like the following in your ~/.roswell/init.lisp file?:
#-ocicl
(when (probe-file #P"/home/green/.local/share/ocicl/ocicl-runtime.lisp")
  (load #P"/home/green/.local/share/ocicl/ocicl-runtime.lisp"))
(push (uiop:getcwd) asdf:*central-registry*)
(setf ocicl-runtime:*verbose* nil)
(setf ocicl-runtime:*download* t)

Let me know if that works.

It seems to work fine.  I've update the readme, and ocicl setup now says:
;; Add the following to your lisp startup file
;; (~/.sbclrc, ~/.eclrc, ~/.abclrc or ~/.roswell/init.lisp):

#-ocicl
(when (probe-file #P"/home/green/.local/share/ocicl/ocicl-runtime.lisp")
  (load #P"/home/green/.local/share/ocicl/ocicl-runtime.lisp"))
(push (uiop:getcwd) asdf:*central-registry*)


The counters in the sidebar are not refreshed when the table refresh button is pressed

What happened?
In the picture below, 6 standard DDPs are seen in the table, but the counter next to "Standard" in the side bar still shows "3" instead of "6".

Triage: The sidebar of the UI is updated at a poll interval. We don't have a good scalable way to propagate events down to the GUI. One way would be ws but that might not be something we want to add to the CP just for counters in the sidebar.
Maybe an alternative is showing that this is polled. Maybe removing the counters would just be simpler.

What is the interval duration today?


"very common password" feedback for a strong password

Hi, I tried to estimate password "discovercowboycow"
Nbvcxz nbvcxz = new Nbvcxz();
final Result result = nbvcxz.estimate("discovercowboycow");

The result has basic score of 3 (our of 4) which is considered a strong password, however a feedback (result.getFeedback().getWarning()) returns message "This is a very common password." which is just inappropriate here.
I think passwords with score 3 and 4 don't need to have a warning message (just like in original zxcvbn)

So this has two parts, first is that I agree that the feedback could be better here, it takes the largest entropy part of the password to figure out what feedback to give.
Secondly, the "basicScore" was implemented to work with the same way as original zxcvbn, but that's it. It doesn't integrate with the minimum entropy for example, giving a different 0-4 score depending on what the minimumEntropy or crackingHardwareCost.
This could be changed, but as of right now, the "basicScore" isn't all that useful IMO. I implemented it by request, it was originally left out of my design because I didn't like how it was designed in zxcvbn.
You can see the code for it here:
/**
* This scoring function returns an int from 0-4 to indicate the score of this password
* using the same semantics as zxcvbn.
*
* @return Score
*
0: risky password: "too guessable"
*
1: modest protection from throttled online attacks: "very guessable"
*
2: modest protection from unthrottled online attacks: "somewhat guessable"
*
3: modest protection from offline attacks: "safely unguessable" (assuming a salted, slow hash function)
*
4: strong protection from offline attacks: "very unguessable" (assuming a salted, slow hash function)
*/
public int getBasicScore()
{
    final BigDecimal guesses = getGuesses();
    if (guesses.compareTo(BigDecimal.valueOf( 1e3)) == -1)
        return 0;
    else if (guesses.compareTo(BigDecimal.valueOf( 1e6)) == -1)
        return 1;
    else if (guesses.compareTo(BigDecimal.valueOf(1e8)) == -1)
        return 2;
    else if (guesses.compareTo(BigDecimal.valueOf(1e10)) == -1)
        return 3;
    else
        return 4;
}

Right now I think it's too dumb to use effectively, which is why you get a basicScore of 4, even though at this point that isn't actually a secure enough password in 2021 since the "guesses" are simply static values that were taken directly from zxcvbn. It should take into account the rest of the enhancements that Nbvcxz has for setting minimumEntropy, and crackingHardwareCost.
You get warning feedback if you have not met the minimum entropy requirements, and this password doesn't meet the default minimum entropy due to matching quite a few very common words that appear high up in different dictionaries.

And here is the previous discussion when I implemented the basic score: https://github.com/GoSimpleLLC/nbvcxz/issues/39


Cluster cannot be started/stopped from other user account

The cluster start/stop from a user account that differs from the user account used on cluster installation fails because of missing config files.
Possible solution:
Add an option to the CLI to copy the needed config files.

Follow the discussion here https://github.com/Siemens-Healthineers/K2s/discussions/26

According to #26 , the solution shall be:

first step/increment is to grant the same access rights the installing user has to the new user account in question, fine-grained permissions are out of scope for now -> create new command, e.g. k2s system user add, k2s system user ls and k2s system user rm
.kube folder must be re-created for additional users, containing their K8s auth certs
.ssh folder must be re-created for additional users, containing their SSH auth key
setup.json file must be moved to a system-central location, write access only granted to the installing user and read access for all others
.docker folder containing credentials for access of shsk2s.azurecr.io registry -> usage of config.json file must be analyzed; ideally this file can be removed and the Docker daemon be configured in a different way

Documentation is available at https://siemens-healthineers.github.io/K2s/next/op-manual/adding-k2s-users/.
Additional refactoring & testing is covered by #672.


Lecture 6 - incorrect POS tag full name

Link to slide
In the provided table, one row says

TAG
Name
Example

PROPN
adverb
Mary, Glasgow, HBO

Name should be proper noun, not adverb.

Good catch. Thanks. 2 points


Can't login, the challenge page not only require a code.

Describe the bug
Instaloaded worked fine until today. I've implemented it inside of EC2 container in amazon. I follow the challenge steps without any problems but today I've got a different challenge page that broke the flow and don't let me login.
To Reproduce
I don't know how to reproduce it, it happens suddenly.
Instaloader version
4.2.8
Additional context
Heres the screenshot of challenge page.

Doesn't look like a bug. Instagram considers your login attempt suspicious because it differs from how you usually login, which is natural due to your EC2 most likely being in a different location than you usually are, and due to Instaloader using a different user agent. It should work after clicking on "he sido yo".


How to: Add and Remove Items from a ConcurrentDictionary

Fixed list and <> formatting

I'm curious: why are you creating new pull requests, instead of updating old ones with your changes?

I'm a GitHub newbie. Z is going to work with us today to cover best practices.

LGTM modulo feedback.


method for generating list of values in sequence

I use FactoryGirl in my work project and at one day I needed a list of phone numbers from sequence and I wrote generate_list(:phone_numbers, 10) but FactoryGirl has not this method. I decided that method might be useful for me and somebody else.
Thank you for your time to review my PR.

Thanks for putting this together @rutaka-n. I like the consistency!


error: package com.facebook.react.defaults does not exist

Description
after upgrading react native from 0.69.5 to 0.70.1
I am getting this error when building the android app
---/android/app/src/main/java/com/applicationMainApplication.java:14: error: package com.facebook.react.defaults does not exist
import com.facebook.react.defaults.DefaultNativeEntryPoint;
^
---/android/app/src/main/java/com/applicationMainApplication.java:15: error: package com.facebook.react.defaults does not exist
import com.facebook.react.defaults.DefaultReactNativeHost;
^
---/android/app/src/main/java/com/applicationMainActivity.java:4: error: package com.facebook.react.defaults does not exist
import com.facebook.react.defaults.DefaultReactActivityDelegate;
^
---/android/app/src/main/java/com/applicationMainApplication.java:24: error: cannot find symbol
private final ReactNativeHost mReactNativeHost = new DefaultReactNativeHost(
^
symbol:   class DefaultReactNativeHost
location: class MainApplication
Version
0.70.1
Output of npx react-native info
info Fetching system and libraries information...
System:
OS: macOS 12.2.1
CPU: (12) x64 Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz
Memory: 387.32 MB / 16.00 GB
Shell: 5.8 - /bin/zsh
Binaries:
Node: 16.14.1 - /usr/local/bin/node
Yarn: 1.22.19 - /usr/local/bin/yarn
npm: 8.9.0 - /usr/local/bin/npm
Watchman: 4.9.0 - /usr/local/bin/watchman
Managers:
CocoaPods: 1.11.3 - /usr/local/bin/pod
SDKs:
iOS SDK:
Platforms: DriverKit 21.4, iOS 15.4, macOS 12.3, tvOS 15.4, watchOS 8.5
Android SDK: Not Found
IDEs:
Android Studio: 2021.2 AI-212.5712.43.2112.8609683
Xcode: 13.3/13E113 - /usr/bin/xcodebuild
Languages:
Java: 11.0.8 - /usr/bin/javac
npmPackages:
@react-native-community/cli: Not Found
react: 18.1.0 => 18.1.0
react-native: 0.70.1 => 0.70.1
react-native-macos: Not Found
npmGlobalPackages:
react-native: Not Found
Steps to reproduce
upgrade from react native 0.69.5 to 0.70.1
Snack, code example, screenshot, or link to a repository
....

I am getting this error when building the android app
---/android/app/src/main/java/com/applicationMainApplication.java:14: error: package com.facebook.react.defaults does not exist import com.facebook.react.defaults.DefaultNativeEntryPoint; ^ ---/android/app/src/main/java/com/applicationMainApplication.java:15: error: package com.facebook.react.defaults does not exist import com.facebook.react.defaults.DefaultReactNativeHost; ^ ---/android/app/src/main/java/com/applicationMainActivity.java:4: error: package com.facebook.react.defaults does not exist import com.facebook.react.defaults.DefaultReactActivityDelegate; ^ ---/android/app/src/main/java/com/applicationMainApplication.java:24: error: cannot find symbol private final ReactNativeHost mReactNativeHost = new DefaultReactNativeHost( ^ symbol: class DefaultReactNativeHost location: class MainApplication

Hey @omars94,
Thanks for reporting this issue,
Have you manually copied files from the template/ folder on React Native?
If so, I believe you copied the files from the wrong version.
You should copy them from 0.70-stable:
https://github.com/facebook/react-native/blob/0.70-stable/template/android/app/src/main/java/com/helloworld/MainApplication.java
If so, can you also share the content of your applicationMainApplication.java?

Hey @omars94
I'm closing this issue due to lack of response
Feel free to re-open it or create a new issue if the problem persists.
Thanks


Feature: Organizational Ownership Transfer

@nftchance I had to make some changes on the backend in order to change the owner of an organization on update. It is functional but can you confirm this works for you/there will be no issues I didn't see?

Looks right -- away from the computer so can't test, but if it's functional looks good to me.

Was the fix to this https://github.com/FlipsideCrypto/badger/issues/156 to simply hide this feature for now.
A prospective operator was asking about their ability to transfer the org after setting it up with their hot wallet


docs: Add Supabase Authentication example

Based on this answer with a little improvements.

This looks great, thank you so much! Is this setup working for you in an app?

It does, yes.

Fantastic! 🙌

@supabase/auth-helpers-nextjs is deprecated, need examples combined with @supabase/ssr...


Need for alerts about membership & certifications expiration

It would be very useful to be noticed about these events of expiration, since this can  kick us from the WoT.
Membership has to be renewed every X days (written in the currency parameters), and certifications simply expire (delay is also in currency parameters).
For certifications, you can use certifiers-of method.
For membership, I know I should provide a new method to retrieve the information, since it does not exist yet. I will do it ASAP!

https://github.com/ucoin-io/cutecoin/commit/5490f3348e434e63d14304b3067eba798022a9f4


Attach media uploads to post_id

Hopefully this change makes images appear without any additional work :)

I added this functionality, but it doesn't work well, so I ended up not enabling it.


example bot for buttons and cards

Add a new example flask bot that posts a card and shows the event an app will get when an Action.Submit button is pushed.

Thank you for the example @jpjpjp !


 Click -New Post- to create a new post.
    create: true
    media_folder: /uploads
    public_folder: ../uploads
    summary: "{{title}} - {{day}}/{{month}}/{{year}}"
    preview_path: "{{year}}/{{month}}/{{day}}/{{title}}"
    slug: "{{year}}-{{month}}-{{day}}-{{slug}}"
    fields:
      - label: Layout
        name: layout
        widget: hidden
        default: post
      - label: Title
        name: title
        widget: string
      - label: Publish Date
        name: date
        widget: datetime
      - label: Featured Image
        name: image
        widget: image
        required: false
        hint: This image will appear at the top of your post in the listing but over the
          feature image on the article's page.
      - label: Title text colour over the feature image
        name: title_color
        widget: color
        required: false
        default: "#ffffff"
        hint: The text is white by default, but you can change the colour to get more
          contrast against the image.
      - label: Caption
        name: caption
        widget: string
        required: false
      - label: Comments
        name: comments
        widget: boolean
        default: false
        required: false
        hint: Only if you setup your Disqus account will this allow comments. If you
          don't want comments for this post then turn this off.
    publish: true
    type: folder_based_collection
    sortable_fields:
      - commit_date
      - title
      - date
      - commit_author
    view_filters: []
    view_groups: []
slug:
  encoding: unicode
  clean_accents: false
  sanitize_replacement: "-"
isFetching: false
error: null

Additional context

Can you provide more details? I cloned your repo but there is no config like this.


Fixes to the new logging configuration

The new logging formatting code decentralized error formatting:
different Weave sub-libraries -- WeaveSystem, Inet, Warm -- now
provide their own error formatting.  Within Weave, however, it is
desirable to have a single config flag that switches between short and
verbose error codes.  To that end, we retain the control over the
logging format via WEAVE_CONFIG_SHORT_ERR_STRING, and to ensure the
propagation of that define into appropriate modules, we include the
config headers that could impact the value of that define in the
SystemConfig.h.
Include <stddef.h> in the new error formatter files, to ensure that
NULL is defined.

Codecov Report

Merging #215 into master will decrease coverage by 0.01%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master     #215      +/-   ##
==========================================
- Coverage   54.23%   54.21%   -0.02%
==========================================
  Files         330      330
  Lines       56313    56313
==========================================
- Hits        30542    30532      -10
- Misses      25771    25781      +10

Impacted Files
Coverage Δ

src/system/SystemError.cpp
57.14% <ø> (ø)
:arrow_up:

src/inet/InetError.cpp
100% <ø> (ø)
:arrow_up:

third_party/lwip/repo/lwip/src/core/pbuf.c
35.2% <0%> (-1.6%)
:arrow_down:

src/lib/profiles/security/WeaveCert.cpp
83.76% <0%> (-0.65%)
:arrow_down:

src/lwip/standalone/sys_arch.c
69.01% <0%> (-0.47%)
:arrow_down:

src/test-apps/TestCASE.cpp
95.87% <0%> (-0.23%)
:arrow_down:

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 c59560b...9856813. Read the comment docs.