Mixtral expert parallelism

This PR implements a more efficient parallelism scheme for the Mixtral model. Instead of sharding the layers of each expert by rank, we instead shard whole experts across ranks. This gives us several benefits:

We reduce the amount of communication between ranks
We do not require megablocks (meaning we can now support non-CUDA accelerators)
The operations become more efficient and CUDA-graphable.

In the new design, each expert will conduct a dense matrix multiplication of the whole batch, and then rows not assigned to the expert will be zeroed out before accumulation. This results in a slight inefficiency for tensor parallel sizes below the number of experts - it means that we will essentially always do the upper performance bound computation. However, we have not found this to be an issue in practice. A potential improvement would be to use a sparse/grouped GEMM kernel.
We have benchmarked this change and found that it lowers the e2e latency for Mixtral by 4x-5x on A100-40GB TP8 compared to the previous implementation.
Furthermore, the PR refactors the Mixtral model for compatibility with Hugging Face format and safetensor weights, and adds quantization support.

Hi @Yard1, thanks for the amazing work!
I've just tested the PR on examples/llm_engine_example.py and got the following results:

Current main

INFO 12-13 23:31:55 llm_engine.py:222] # GPU blocks: 86172, # CPU blocks: 8192
INFO 12-13 23:31:58 llm_engine.py:649] Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 0.0 tokens/s, Running: 1 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 0.0%, CPU KV cache usage: 0.0%
RequestOutput(request_id=0, prompt='A robot may not injure a human being', prompt_token_ids=[1, 330, 18401, 993, 459, 5891, 482, 264, 2930, 1250], prompt_logprobs=[None, {330: -9.912246704101562, 22478: -0.7872462272644043}, {18401: -8.597543716430664, 633: -3.347543478012085}, {993: -4.565238952636719, 369: -2.1902387142181396}, {459: -0.4373227059841156}, {5891: -0.4258776903152466}, {482: -3.099436753473128e-06}, {264: -0.0011317284079268575}, {2930: -0.0006484074983745813}, {1250: -0.009901456534862518}], outputs=[CompletionOutput(index=0, text=' or, through inaction, allow a human being to come to harm.\n', token_ids=[442, 28725, 1059, 297, 1774, 28725, 1914, 264, 2930, 1250, 298, 1567, 298, 6241, 28723, 13], cumulative_logprob=-0.6244106972517329, logprobs=[{442: -0.017248855903744698}, {28725: -0.002303091809153557}, {1059: -0.0011830481234937906}, {297: -0.00041952868923544884}, {1774: -7.164221460698172e-05}, {28725: -0.0003152588615193963}, {1914: -0.0006347072194330394}, {264: -0.0005576247931458056}, {2930: -0.00010775939153973013}, {1250: -0.0015303102554753423}, {298: -0.0005830018781125546}, {1567: -0.0004058252670802176}, {298: -0.0002112165529979393}, {6241: -0.0003516055876389146}, {28723: -0.03660520166158676}, {13: -0.5618820190429688}], finish_reason=length)], finished=True)
RequestOutput(request_id=1, prompt='To be or not to be,', prompt_token_ids=[1, 1791, 347, 442, 459, 298, 347, 28725], prompt_logprobs=None, outputs=[CompletionOutput(index=0, text=' that is the question.\nWhether ’tis nobler in the mind', token_ids=[369, 349, 272, 2996, 28723, 13, 23842, 620, 24978, 28707, 278, 7169, 1523, 297, 272, 2273], cumulative_logprob=-5.713744854774632, logprobs=None, finish_reason=length)], finished=True)
RequestOutput(request_id=2, prompt='What is the meaning of life?', prompt_token_ids=[1, 1824, 349, 272, 5746, 302, 1411, 28804], prompt_logprobs=None, outputs=[CompletionOutput(index=0, text='\n\nThe meaning of life is the question of the purpose and significance of life', token_ids=[13, 13, 1014, 5746, 302, 1411, 349, 272, 2996, 302, 272, 6032, 304, 18309, 302, 1411], cumulative_logprob=-8.794605396687984, logprobs=None, finish_reason=length), CompletionOutput(index=3, text=' It’s a question that’s been asked by philosophers, theolog', token_ids=[661, 28809, 28713, 264, 2996, 369, 28809, 28713, 750, 2261, 486, 8829, 404, 28725, 272, 1165], cumulative_logprob=-9.33446236141026, logprobs=None, finish_reason=length)], finished=True)
RequestOutput(request_id=3, prompt='It is only with the heart that one can see rightly', prompt_token_ids=[1, 661, 349, 865, 395, 272, 3031, 369, 624, 541, 1032, 1103, 346], prompt_logprobs=None, outputs=[CompletionOutput(index=0, text='; what is essential is invisible to the eye.\n\nAntoine de Saint', token_ids=[28745, 767, 349, 7974, 349, 20187, 298, 272, 5421, 28723, 13, 13, 13389, 21265, 340, 6393], cumulative_logprob=-2.537341303512221, logprobs=None, finish_reason=length), CompletionOutput(index=1, text='; what is essential is invisible to the eye. Antoine de Saint-Ex', token_ids=[28745, 767, 349, 7974, 349, 20187, 298, 272, 5421, 28723, 3821, 21265, 340, 6393, 28733, 966], cumulative_logprob=-2.979412608925486, logprobs=None, finish_reason=length), CompletionOutput(index=2, text='; what is essential is invisible to the eye. – Antoine de Saint-', token_ids=[28745, 767, 349, 7974, 349, 20187, 298, 272, 5421, 28723, 764, 3821, 21265, 340, 6393, 28733], cumulative_logprob=-3.1470024501613807, logprobs=None, finish_reason=length)], finished=True)

This PR

INFO 12-13 23:20:14 llm_engine.py:222] # GPU blocks: 57756, # CPU blocks: 819295MB/s]
INFO 12-13 23:20:17 llm_engine.py:649] Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 0.0 tokens/s, Running: 1 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 0.0%, CPU KV cache usage: 0.0%
RequestOutput(request_id=0, prompt='A robot may not injure a human being', prompt_token_ids=[1, 330, 18401, 993, 459, 5891, 482, 264, 2930, 1250], prompt_logprobs=[None, {330: -9.617840766906738, 12: -1.7154966592788696}, {18401: -8.787067413330078, 330: -2.7558176517486572}, {993: -4.204432010650635, 349: -2.0169320106506348}, {459: -0.3415136933326721}, {5891: -1.0073399543762207, 6241: -0.5073400139808655}, {482: -1.3708974620385561e-05}, {264: -0.1135331317782402}, {2930: -0.002309514442458749}, {1250: -0.016736455261707306}], outputs=[CompletionOutput(index=0, text=', or, more importantly, a robot may not kill a human being.\n', token_ids=[28725, 442, 28725, 680, 21485, 28725, 264, 18401, 993, 459, 4015, 264, 2930, 1250, 28723, 13], cumulative_logprob=-7.275053498335183, logprobs=[{28725: -0.16343587636947632}, {442: -0.21259483695030212}, {28725: -0.1041431725025177}, {680: -1.0776935815811157}, {21485: -0.2229764610528946}, {28725: -0.01339601818472147}, {264: -1.1102567911148071}, {18401: -0.1942392736673355}, {993: -0.3014945983886719}, {459: -0.05710757523775101}, {4015: -1.3823846578598022}, {264: -0.5338531732559204}, {2930: -0.08587013930082321}, {1250: -0.040455106645822525}, {28723: -0.33675137162208557}, {13: -1.4384008646011353}], finish_reason=length)], finished=True)
RequestOutput(request_id=1, prompt='To be or not to be,', prompt_token_ids=[1, 1791, 347, 442, 459, 298, 347, 28725], prompt_logprobs=None, outputs=[CompletionOutput(index=0, text=' that is the question of every person’s life.\nTo live, to', token_ids=[369, 349, 272, 2996, 302, 1012, 1338, 28809, 28713, 1411, 28723, 13, 1551, 2943, 28725, 298], cumulative_logprob=-19.226570382204045, logprobs=None, finish_reason=length)], finished=True)
RequestOutput(request_id=2, prompt='What is the meaning of life?', prompt_token_ids=[1, 1824, 349, 272, 5746, 302, 1411, 28804], prompt_logprobs=None, outputs=[CompletionOutput(index=0, text='\n\nThe meaning of life is the meaning of one’s life. That', token_ids=[13, 13, 1014, 5746, 302, 1411, 349, 272, 5746, 302, 624, 28809, 28713, 1411, 28723, 1725], cumulative_logprob=-16.94498591311276, logprobs=None, finish_reason=length), CompletionOutput(index=4, text='\n\nThis question was often asked in the ancient and modern days.\n\n', token_ids=[13, 13, 3260, 2996, 403, 2608, 2261, 297, 272, 9467, 304, 4638, 2202, 28723, 13, 13], cumulative_logprob=-28.903032392263412, logprobs=None, finish_reason=length)], finished=True)
RequestOutput(request_id=3, prompt='It is only with the heart that one can see rightly', prompt_token_ids=[1, 661, 349, 865, 395, 272, 3031, 369, 624, 541, 1032, 1103, 346], prompt_logprobs=None, outputs=[CompletionOutput(index=1, text='; the\nreasonable world does not know in unces.\n\nHow', token_ids=[28745, 272, 13, 14991, 522, 1526, 1235, 459, 873, 297, 521, 1377, 28723, 13, 13, 5660], cumulative_logprob=-11.229475471191108, logprobs=None, finish_reason=length), CompletionOutput(index=0, text='; the\nreasonable world does not know in unces, what the\n', token_ids=[28745, 272, 13, 14991, 522, 1526, 1235, 459, 873, 297, 521, 1377, 28725, 767, 272, 13], cumulative_logprob=-11.59051242750138, logprobs=None, finish_reason=length), CompletionOutput(index=2, text='; the\nreasonable world does not know in unces.\n\nFor', token_ids=[28745, 272, 13, 14991, 522, 1526, 1235, 459, 873, 297, 521, 1377, 28723, 13, 13, 2565], cumulative_logprob=-11.729475471191108, logprobs=None, finish_reason=length)], finished=True)

In summary, 1) the results do not match; I feel the current main's output looks more correct, and 2) There's a huge decrease in allocated the KV cache size. Does this mean that this implementation has very high memory overhead?

Thanks, let me check!

FYI we have ran MMLU and recieved extremely close results for both implementations. I feel like the divergence may be due to floating point operations, but I will see if it's possible to reduce it.

Hi @Yard1,which model do you use? I tried this PR with https://huggingface.co/mistralai/Mixtral-8x7B-Instruct-v0.1 and it doesn't work. It will throw KeyError: 'tok_embeddings.weight'.

Hi @Yard1,which model do you use? I tried this PR with https://huggingface.co/mistralai/Mixtral-8x7B-Instruct-v0.1 and it doesn't work. It will throw KeyError: 'tok_embeddings.weight'.

I found it only download .pt weights without .safetensors. Doesn't this PR support .pt format？ And Do you know how to convert pt to safetensors without download again?

@esmeetu There is a divergence between pt and safetensors weights uploaded to huggingface hub (they use different layer names). You can use this script to convert pt to safetensors - https://github.com/huggingface/transformers/blob/v4.36.0/src/transformers/models/mixtral/convert_mixtral_weights_to_hf.py

@WoosukKwon I have updated the PR using an alternative approach that should both reduce memory usage and numerical inaccuracies. PTAL!

@Yard1 Thanks. I converted .pt format weights to .bin format weights. And this PR gives me x2 speedup(6t/s -> 12t/s). Thanks for your great work!
Besides i compared Humaneval score on that model. And the results(50.6) are better than main branch(49.4).

@Yard1 The outputs after the fix look good to me! Many thanks for the quick fix!

@liangfu Thanks for the review!

Of we run all experts anyway, how about using more of the results?
https://www.reddit.com/r/LocalLLaMA/comments/18i2h4c/mixtral_gets_even_better_by_just_adding_an_expert/

For me, the speed has increased from 11 tok/s to 30+ 🚀


Update to Tokio 0.3

If somebody needs Tokio 0.3 compatibility now, please raise your concerns in this PR. We have some crates keeping us in 0.2 still, but I could consider making master to use Tokio 0.3, and have a branch that follows still Tokio 0.2,

Closing in favor of https://github.com/prisma/tiberius/pull/110

Closing in favor of https://github.com/prisma/tiberius/pull/110


Link List Toggle

Added a large variant to the link-list.
Refactored the CSS code
Enhanced the button state update logic based on the popstate change event
Resolves: MWPW-142522
Test URLs:

Before: https://main--express--adobecom.hlx.page/drafts/qiyundai/business?martech=off
After: https://link-list-toggle--express--adobecom.hlx.page/drafts/qiyundai/business?martech=off

Codecov Report
Attention: 27 lines in your changes are missing coverage. Please review.

Comparison is base (531ed30) 33.86% compared to head (f581b24) 33.67%.
Report is 2 commits behind head on stage.

Files
Patch %
Lines

express/blocks/link-list/link-list.js
0.00%
27 Missing :warning:

Additional details and impacted files
@@            Coverage Diff             @@
##            stage     #655      +/-   ##
==========================================
- Coverage   33.86%   33.67%   -0.20%
==========================================
  Files         129      129
  Lines       24893    24912      +19
==========================================
- Hits         8431     8389      -42
- Misses      16462    16523      +61

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


Infinite Scroll Top

After you scroll to the bottom of a page, initiate the listener for the
event, when you scroll up to the top, load more content. This is best
to go with the messaging portion of F7.

Thanks, added with much simpler way, i guess no need to use here fully separated function/methods


add new appUrl

part of RHCLOUD-25607 . Need to change AppUrl in each of the subscriptions apps to be /subscriptions/ instead of /insights/subscriptions/

@RedHatInsights/teamnado can I get some eyes on this. I don't have permission to set reviewers.

Sure, I have tagged them. There's a pending question on that ticket that I'm waiting on the answer for

@jlgre what's going on with the Travis CI - Branch status? Do I need to close and reopen?

@jlgre what's going on with the Travis CI - Branch status? Do I need to close and reopen?

I think its waiting for your branch to run the integration, which it won't. As long as the others are passing this should be fine. I'll get this merged and start on the release


VS Code refuses to authenticate with Azure Repos using AAD and refuses to persist authentication even with alternate credentials

Issue Type: Bug
I try to push to my Azure Repos git repository.
  I enter my credentials.
Expected result: authentication succeeds and authenticated session persisted, so I do not have to enter credentials again for some weeks (at minimum).
Actual result: VS Code gives no feedback and pops up the textbox asking for username (non-AAD authentication). Entering alternate credentials here succeeds but the session is not persisted. I have to re-do this dance every time!

I tried Azure Repos extension - no difference. The Azure Repos "sign in" action also does not persist, requiring me to re-login every session to see the new statusbar information it adds.
I already have Git Credential Manager installed (it is the same one that comes with the Git for Windows installer, right? I installed that).

The Azure Repos "sign in" action also does not persist

That seems wrong. Not sure if you have a better answer @joaomoreno or if this goes to another team

VS Code pops up the AAD authentication prompt

Can you show me a screenshot of that auth prompt?

This is what I refer to as the AAD auth prompt:

I took a problem steps recording of the whole process - if you like I can email it to you (not sure if the URLs and details are safe for public posting).
Interestingly, I can pull just fine from the repo in question - only pushing causes the re-authentication every time.

That auth dialog doesn't come from VS Code. What credential manager did you install?

I have installed VS2017 and Git for Windows 2.21.0 (with the credential manager that comes with that installer).

Does the dialog open when you run git fetch from a terminal?

No but it does open when I run git push from a terminal!
So not VS Code related, clearly - I will close this and report it elsewhere. In fact, given that I am unable to actually repro this on a clean new repository, I am just going to ignore it and chalk it up to computer hissy fits and hope I never see it again.


BUG: scope executable needs exec perms

scope start run on the host from Edge in a container. the scope file should be executable.
The scope executable placed in the Edge container miss the executable permissions
/usr/lib/appscope/1.2.0# ls -al
total 67032
drwxr-xr-x 2 root root     4096 Nov  7 16:06 .
drwxr-xr-x 3 root root     4096 Nov  7 16:06 ..
-rwxr-xr-x 1 root root  9356672 Nov  7 16:06 ldscope
-rw-r--r-- 1 root root 59272051 Nov  7 16:06 scope

QA instructions:
/ Start Edge container
docker run -d -e CRIBL_EDGE=1 -p 9420:9420 -v /var/run/appscope:/var/run/appscope -v /var/run/docker.sock:/var/run/docker.sock  -v /:/hostfs:ro --privileged --restart unless-stopped --name cribl-edge cribl/cribl:next

/ Copy the locally build scope (for dev build)
docker cp ./conf/example_filter.yml cribl-edge:/opt/cribl/bin

/ Copy the filter file to the Edge container
docker cp ./conf/example_filter.yml cribl-edge:/opt/cribl/bin

/ Connect to Edge container
docker exec -it cribl-edge bash

/ Change scope file permissions (for dev build)
chown root:root /opt/cribl/bin/scope
chmod 755 /opt/cribl/bin/scope

/ Change filter file permissions
chown root:root /opt/cribl/bin/example_filter.yml

/ Run scope start command
/opt/cribl/bin/scope start -f < /opt/cribl/bin/example_filter.yml

/ Verify the file permissions (for dev build)
ls -la /tmp/appscope/dev/
drwxrwxrwx 2 root root     4096 Nov  8 08:54 .
drwxr-xr-x 3 root root     4096 Nov  8 08:53 ..
-rwxr-xr-x 1 root root 11546808 Nov  8 08:53 ldscope
-rwxr-xr-x 1 root root 35967512 Nov  8 08:53 scope

/ Verify the file permissions (for the official build)
ls -la /usr/lib/appscope/<version>/
drwxr-xr-x 2 root root     4096 Nov  8 08:45 .
drwxr-xr-x 3 root root     4096 Nov  8 08:45 ..
-rwxr-xr-x 1 root root 11546808 Nov  8 08:45 ldscope
-rwxr-xr-x 1 root root 35967240 Nov  8 08:45 scope


Channel should trigger a channelSend event on sender

Channel right now on send triggers a channelReceive event on targets of the message but does not trigger any analogous event on the sender of the message. As such it's not possible at the moment to script for a player saying something if there are no targets

In addition to this a new config option should be added to Channel: boolean eventOnly (false). If eventOnly is true then channel should not use Broadcast to directly send messages instead only firing the appropriate events


[BUG] Different p-values in scatter and MCM

Describe the bug
both these plotting tools show a one sided p-value for wilcoxon sign rank test, but in or lates experiments these are different, possibly from calling different functions. Needs investigation
Steps/Code to reproduce the bug
plot both with same data
Expected results
same p vals
Actual results

Versions
No response

can you provide the code that generates this ? is it from a notebook ?

@TonyBagnall in scatter plot the wilcoxon from scipy is called as such:

in MCM, the default set of wilcoxon is zero_method="pratt" and one sided for alternative

yeah I will try to recreate, just dumping here as writing a paper, I may just be wrong. scatter also calls the same function, will investigate further

ah thanks @hadifawaz1999 you have saved me a job :)

Definitely default to a standard, I will look into it and choose one

also need to use the same default in CD drawing. @hadifawaz1999 for now I will standardise with whatever is used by CD drawing. I cannot imagine that it will make any difference

so CD and scatter use  zero_method="wilcox", will switch mcm to that if thats ok @hadifawaz1999

so will set to wilcox, but maybe we should pass as argument, possibly as kwargs?

zero_method = "wilcox" is the default for scipy, so will set to wilcox, but maybe we should pass as argument, possibly as kwargs?

For the mcm i added a parameter called pvalue_test_params dictionary, set to None, and if None will set default values of  zero method to Pratt and alternative to one sided
I don't mind whats the default behavior of it, but its good to have the same parameter for scatter plots and cd


New bolt symbol for ai

About the PR

Made the AI bolt action use a lock/unlock sprite instead of the airlock ones.
Why / Balance

For the looks.
Technical details

Modified the code that gets sprites for the bolt action as well as added 2 new sprites to actions_ai.rsi.
Media

Requirements

[X] I have read and I am following the Pull Request Guidelines. I understand that not doing so may get my pr closed at maintainer’s discretion
[x] I have added screenshots/videos to this PR showcasing its changes ingame, or this PR does not require an ingame showcase

Breaking changes

None.
Changelog

:cl: ScarKy0

tweak: Station AI door bolt now uses a new sprite.

Uh oh unrelated error

Merge conflict jumpscare

Im gonna be merging this with my AI Radial branch.


Token tests in transaction snark

Add zkapp_tokens test to the transaction SNARK tests. The test is essentially the same as the tokens test unit test in Mina_ledger.Ledger, except that it uses check_parties_with_merges_exn to apply the parties, and uses valid signatures instead of dummy signatures.
The parties Quickcheck generator contained code to replace dummy signatures with valid signatures. That's factored out here into Parties.For_tests.replace_signatures, so we can use that for the new token tests.
Did a little cleanup: variable names, use ignore when appropriate.
Part of #10373.
Closes #10376.

Note: I'm planning to factor out the forest, node, etc. combinators into a library that can be shared between the Ledger and Transaction_snark tests. That will be in a PR for an integration test.


Reveal secrets with a hack #312

To be able to store all secrets in a password manager: #312
This temporary workflow will write them to a file.

Thanks for looking into this, @louwers. I wonder if we need all of the extracted secrets. Some of them might be not used anymore. Can you make a list of the secrets you would like to extract and say what you think they are used for? Thanks!

@wipfli Yes I can do that, but it would be helpful to merge this first so I can tell which ones are still usable.

Please make the list first. I think the google cloud tokens should just be deleted.

@acalcutt Do you know how the Node pre gyp token is used?

Maybe the node token is actually a personal access token of @birkskyum?

I believe NODE_PRE_GYP_GITHUB_TOKEN is linked to my GitHub user. I made the token to allow the node release workflow to push a commit with the new version number.

GLCLOUD_SERVICE_JSON is needed for the Android Firebase instrumentation tests.
GPG_KEY_CONTENTS is needed for an Android release. I can't find any usages of GPG_PASSPHRASE.
MAPLIBRE_DEVELOPER_CONFIG_XML is neede to make a Test APK.
NODE_PRE_GYP_GITHUB_TOKEN: see comment above, since it is used I think it makes sense to reveal and use it.
BINTRAY_USER / BINTRAY_API_KEY do not seem to be used. MAPBOX_DEVELOPER_CONFIG_XML is not needed it seems. If you want, remove them before merging this temporary workflow.

OK thanks, can you remove the unneeded ones?

@wipfli Done.


VoxelFortress fails to export Heightmap

After loading both maps, VoxelFortress fails to export any file, instead stopping in this state:

It's worth noting that clicking away from the VoxelFortress window & back causes it to toggle the window's view between that state and this one:

Moreover VoxelFortress appears to attempt to restore this bugged window when it's closed & reopened.

Could VoxelFortress be modified to produce a CLI executable as well? That would solve this problem.

@JapaMala I implemented a CLI in #2.


Trim the scope string [1.1.x]

Purpose
Trim the value of the space-delimited scope string [1] starts which starts with white space as ...scope=<white_space>all...
Fixes #20850
Check List

[x] Read the Contributing Guide
[ ] Updated Change Log
[ ] Checked Tooling Support (#)
[ ] Added necessary tests

[ ] Unit Tests
[ ] Spec Conformance Tests
[ ] Integration Tests
[ ] Ballerina By Example Tests

[ ] Increased Test Coverage
[ ] Added necessary documentation

[ ] API documentation
[ ] Module documentation in Module.md files
[ ] Ballerina By Examples

Codecov Report

Merging #20852 into ballerina-1.1.x will not change coverage.
The diff coverage is n/a.

@@               Coverage Diff                @@
##           ballerina-1.1.x   #20852   +/-   ##
================================================
  Coverage            15.21%   15.21%
================================================
  Files                   50       50
  Lines                 1341     1341
  Branches               208      208
================================================
  Hits                   204      204
  Misses                1121     1121
  Partials                16       16

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 c4dd756...a42c3c0. Read the comment docs.


Fixed props saving incorrectly and buildmenu obstructions

When merged this pull request will:

fix objects not saving/respawning in the exact position they were left at - this has been an issue for the longest time and caused player-built FOBs to scramble slightly after a savegame reload, sometimes moving props up to a few meters away from their original spawn location
fix the building menu from detecting ground items (magazines, mags, uniforms, etc.) aswell as corpses as obstructions when attempting to build vehicles or logistics items

Note: due to the fixes done to the save manager, the savegame format will change slightly, in that the buildings data now holds 2 vectors for an object's orientation (vectorDirVisual and vectorUpVisual for use in setVectorDirAndUp) rather than 1 vector (vectorUp?) and 1 number (getDir). However, old savegame formats are fully supported - the code is reverse compatible and will convert old formats into the new one upon loading into the mission. No further changes are required.

Sounds really great, many thanks for this.
Just have a look at the review comment. Without at proper commit where the changes inside the code are really visible it's hard to review. Currently it's all showing as "everything deleted" and "everything added".
How did you get the idea concerning using two vectors? Your test were all successful?
I haven't tested your request until now, but if this really fixes the annoying misplacement behaviour which was always in Liberation it would be a really great addition and many thanks for the willingnes to share it for the official version. 👍

I believe the changes viewer isn't working because Atom was set to use LF while the original text files were using CRLF. Going to reupload them and see if that fixes it.
As for using 2 vectors - I've done a bit of debug console testing on a vehicle to figure this out. My idea was if I could find a way to move an object to its own position and its own orientation, and the object doesn't move/rotate at all, then my code would be suited for saving/loading player-built structures.
The first thing I noticed is that getPos, getPosATL and getPosASL are all orientation sensitive. You can test this by simply doing: cursorTarget setPosATL (getPosATL cursorTarget) on something like a car that is parked on a slope, and it will move slightly everytime the command is executed. The steeper the incline, the more the object will move.
I discussed this issue with some people on the ArmA 3 Discord and learned that those commands use a position that isn't "on the ground", but rather somewhere in the middle of the object's bounding box (roughly). Now, if the object is tilted, the position by those functions is offset relative to the surface's normal (to which the object is aligned). The fix for this was to use getPosWorld, which is unaffected by object orientation.
As for the orientation itself; applying an object's up vector and its direction (as a number) to set its orientation wasn't reliable enough. There were cases where the object rotated slightly when the command was executed, with the amount of rotation depending on the direction (the object stabilises around the 0°-direction (North)). I thought about this some more and realised that if I had an object that was facing straight up, there might be a "gimbal lock"-esque type of situation where setting the direction wouldn't work at all anymore, though admittedly I didn't test this theory. Instead I looked at how other popular mods and gamemodes save their data and it seems the common consensus is setVectorDirAndUp which seems completely failsafe, as you can achieve any orientation in a 3D environment using 2 vectors (since the remaining vector can always be determined using cross product).
Anyhow, I'm going to work on fixing these previews today so that we can (hopefully) get this merged soon. In the meantime, here's two pictures which I took after saving, ending and then reloading the mission in local multiplayer:
https://cdn.discordapp.com/attachments/227027935142477834/428201088299302912/20180327163700_1.jpg
https://cdn.discordapp.com/attachments/227027935142477834/428201334353690624/20180327163711_1.jpg
(yes, I intentionally left that car on there 😉)

Sounds great and now it seems like a really consistent explanation for the cause of the issue and a way to prevent it. Many thanks for the great and complete explanation. I really appreciate the time you spent for this.
Maybe you should also think about joining the Liberation Discord (link in the readme), so we could have a further talk about this issue.
With the tanks DLC there will be a small update on the current build of Liberation with the new tanks and propably all the current "addition" stuff. But afterwards it'll be legacy and many things will be different after 0.97. But no reliable deadline for the refactoring currently.
Just as a heads up, that 0.963 and lower will get deprecated this year.

Noted. I'll hop on the Discord later today.
Also done reuploading the files in the correct newline type, the changes should now be visible.


CosmosClient: Fixes initialization to dispose of client if getting account information fails

Pull Request Template
Description

It now disposes of the CosmosClient if the initialization process fails.
A new object disposed exception is thrown for each task now. The original task will get the original exception.
The old behavior caused the same exception to be shared across all the callers. If the user did 100 requests in parallel all 100 tasks would return the same exception instance. The exceptions are not thread safe. This caused headers to go missing and other weird behavior caused from updating non-thread safe object concurrently.
The new object disposed exception will include the original exception information to prevent the information to avoid confusion on why the client is now disposed.

Type of change
Please delete options that are not relevant.

[] Bug fix (non-breaking change which fixes an issue)
[] New feature (non-breaking change which adds functionality)
[] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[] This change requires a documentation update

Closing issues
To automatically close an issue: closes #IssueNumber

Closing this until we have user reported issue that needs to be fixed.


PHOENIX-5946: Implement SchemaExtractionTool utility to get effective…

… DDL from cluster (Co-authored by Tanuj Khurana)
This is an initial commit and has limited test coverage (have filed PHOENIX-5947 to add tests in the branch)

Could you please review @tkhurana @qinrui.li

Also would be useful to separate the extraction logic from the SQL generation logic (if possible), so that different output formats are possible (e.g, an Avro schema, a protobuf definition, etc) with generator as an interface.

@gjacoby126 except for refactoring to extend the support for different output formats, I fixed all the comments. Maybe we can take this up in the following jira?


how can i pass parameters

i am unable to pass parameters like query, header, body

using "input", I think:
noHassleRouter.use(app, '/test').get('/', {
  description: 'test route',
  tags: ['Users'],
  input: Joi.object({
    query: {
      name: Joi.string(),
      age: Joi.number().required()
    }
  })
}, (req, res) => res.send('test ok'));

Closing this issue as it seems to be resolved. There will be more active development, documentation & testing coming soon


Issue with initials before and after firstname

I wanted to use this library for cleanup of publication authors and map them to a common format like
$name->getLastname()).', '.$name->getFirstname() . ' ' . $name->getMiddlename() . ' ' . $name->getInitials())

This works flawlessly for barely every name. But as my own second given name is my primary one I often don't spell out my first one, like:
Schuler, J. Peter M.
which results in
Array
(
    [firstname] => Peter
    [initials] => J. M.
    [lastname] => Schuler
)

and thus I can't retrieve the correct order of names.
I understand that this is a quite special case, as Germany is one of the few countries were multiple firstnames are possible as well as middle names and where firstnames can be used. Additionally up until a few years ago there was a concept of primary firstname which in my case is/was my second one, thus that kind of writing.
Currently I don't understand all of the parsing, but might supply a pull request if I get this to work while still fulfilling the other test cases.

Hey @jpmschuler . Thanks for reporting this. Off the top of my head i see no issue in pulling initials that precede the firstname into the firstname parts. Although this could lead to Peter being interpreted as middlename, which i'm not sure if that's what you'd want.
The concept of primary name is interesting, too, and could be added as another property.
And finally, i could also imagine adding a position property to the parts that could enable reconstructing the name in the correct order?
I would love to see what you come up with in a pull-request. Let me know if you need any help.

That's the same idea I had: Having Peter as middle name who adhere to the current architecture. However that would create an unintended result probably. But that depends on the definition of firstname. If one would use the lib for a greeting in a letter "Hello " should resolve to Peter and not to J.
I wondered if it would make sense in general to create a fullgivenname property defined as fullgivenname  = fullname - salutation - lastnameprefix - lastname - suffix. Which would prevent a keen mapping, but support all languages.
Alternatively I'd try to make a special language definition which drops the distinguishment between firstname, middlename, initials and moves all parts in firstname.
The concept of primary name was dropped from German legislation, thus I don't think it should be implemented (Their replacement is: You can sort your given names anew as an adult if you want to - and that is no joke).

After some testing it didn't seem reasonable to change the initial detection. The architecture of the mapping is quite keen and shouldn't be adapted and allows an easy adding of fullgivenname. Thus, I think simply adding that new feature will allow broader adoption and will also solve my special case.


Proxy contracts tronbox tailored demo

Hello tronbox team, sorry if this is not the best place to ask, is there a repo we can use as an example to deploy and upgrade proxy and implementation contracts ? Thanks !

if i need use:
import<EMAIL_ADDRESS>i need use a solc version 0.8.21 and tronbox has a maxversion 0.8.20:
Error parsing @openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol: ParserError: Source file requires different compiler version (current compiler is 0.8.20+commit.5f1834bc.Emscripten.clang) - note that nightly builds are considered to be strictly less than the released version
--> ParsedContract.sol:4:1:
|
4 | pragma solidity ^0.8.21;
| ^^^^^^^^^^^^^^^^^^^^^^^^
Compilation failed. See above.

@simbadMarino Please see here. https://github.com/tronprotocol/tronbox/tree/master/test/openzeppelin

@lopeed The next version will support 0.8.21. For now you can use npm i<EMAIL_ADDRESS>first


double-beep: Blacklist legends\W*keto

double-beep requests the blacklist of the keyword legends\W*keto. See the MS search here and the Stack Exchange search here.

legends\W*keto has been seen in 14 true positives, 0 false positives, and 0 NAAs.

Approved by tripleee in Charcoal HQ


add apply_correction_positions

Hello @alexandrmotmom! Thanks for opening this PR. We checked the lines you've touched for PEP 8 issues, and found:

In the file src/komtet_kassa_sdk/lib/helpers.py:

Line 60:1: W293 blank line contains whitespace


Fixing level 2 and level 3 pages

Implementing the below features in page 2 and page 3 as done same in page 1.

Multiple retires in the questions page.
Explanation when user chooses wrong answer.
Redirect to explanation page if user loses.
Amazon kid friendly voucher card text.

As discussed in Discord please just fix one level first. And according to the level you choose, update the title


Pane .addItem throwing error when trying to add text editor to it

Description
My package is broken because it adds a new text editor to a pane by doing something like atom.workspace.getActivePane().addItem(atom.workspace.buildTextEditor()) but gets an error: Uncaught TypeError: Arguments to CompositeDisposable.add must have a .dispose() method
Steps to Reproduce

Run atom.workspace.getActivePane().addItem(atom.workspace.buildTextEditor()) in the console
Notice there is an error

Expected behavior: I would expect a new text editor to be added to the active pane.
Actual behavior: Nothing happens except for an error.
Versions
Atom v1.11.1 - MacOS

I have this issue too. There is a workaround via textEditorRegistry.build but until pane.addItem is called I can't change the editor's settings like its grammar. The root cause is that workspace.buildTextEditor and workspace.subscribeToAddedItems internal handler share this code:
subscriptions = new CompositeDisposable(
....
@textEditorRegistry.maintainGrammar(item)
@textEditorRegistry.maintainConfig(item)
textEditorRegistry.maintainGrammar returns undefined on the second call and breaks CompositeDisposable.

/cc @maxbrunsfeld - is this fixed in 1.12-beta?

Refs https://github.com/atom/tabs/issues/377. I thought @maxbrunsfeld fixed this in 1.11 beta. Seems he either didn't or forgot to include the fix in 1.11 stable or this is a different issue with the same steps.

This is fixed in 1.11.2. Sorry for the delay.

Can't reproduce using "steps to reproduce" in 1.12.0-beta2


[$250] iOS - Chat - When uploading PDF, eye icon is displayed for an instant overlapping the chat

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

Version Number: .0.17-0
Reproducible in staging?: Y
Reproducible in production?: Y
If this was caught during regression testing, add the test name, ID and link from TestRail: N/A
Email or phone of affected tester (no customers<EMAIL_ADDRESS>Issue reported by: Applause - Internal Team
Action Performed:

Open New Expensify app
Go to any chat
Tap on the "+" icon on compose box
Select "Add attachment", then "Choose file"
Send a password protected PDF

Expected Result:
No eye icon should be displayed on chat when uploading a password protected PDF
Actual Result:
When uploading password protected PDF, the eye icon is displayed for an instant overlapping the chat
Workaround:
Unknown
Platforms:

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

[ ] Android: Native
[ ] Android: mWeb Chrome
[x] iOS: Native
[ ] iOS: mWeb Safari
[ ] MacOS: Chrome / Safari
[ ] MacOS: Desktop

Screenshots/Videos
Add any screenshot/video evidence

https://github.com/user-attachments/assets/86df41c8-e42b-42d5-b365-d24b9aecce4b
View all open jobs on GitHub
Upwork Automation - Do Not Edit

Upwork Job URL: https://www.upwork.com/jobs/~0107d30d16efe1ef23
Upwork Job ID:<PHONE_NUMBER>908776016
Last Price Increase: 2024-08-15

Issue OwnerCurrent Issue Owner: @allroundexperts

We think that this bug might be related to #vip-vsp

@kadiealexander  FYI I haven't added the External label as I wasn't 100% sure about this issue. Please take a look and add the label if you agree it's a bug and can be handled by external contributors

Waiting for proposals.

The App doesn't behave like the video now. Could anyone related check it again?

The App doesn't behave like the video now. Could anyone related check it again?

This is so minor, closing to prioritise other issues.


Subscriber Content settings reset

It appears I cannot share subscriber content via the Public Information application.
Workflow
I check the boxes to allow subscriber content to be seen in the application...

Then when I load the application outside my organization account, it prompts a sign-in...the Console shows several token errors.

When I go back to the configuration builder, the boxes are unchecked...:(

Even if there is a setting in my org blocking my sharing subscriber content - the app configuration should notify me of this.
App: http://eaglegis.maps.arcgis.com/apps/PublicInformation/index.html?appid=481aceaee8d64d51881234303ec7453f
Web Map: http://eaglegis.maps.arcgis.com/home/webmap/viewer.html?webmap=535d465272e34df7aefb0d7896338530

OK - so when I make a copy of the same exact web map, this work without issue. Not sure if there is something in the workflow or somehow corrupt on the particular item, but I have found a workaround. You can close this issue, but don't delete it just in case it pops up again. Thanks!


Proxy error in deployment

In deployment, the front-end cannot get resources from the server due to a proxy error, or perhaps something less obvious. When loading a room, you will get the Error fetching room data. Make sure the room ID is valid error.

Interestingly enough, if you call <IP_ADDRESS>:5500/api/room/get?id=35d83160-3c25-460a-b0e7-3a32858ec1c4 directly you can access the JSON of the room. This is the desired effect, but it narrows things down a bit in terms of where the issue could be occurring.


Saving phone number with Authorize.net

Hi!
I tried to pass my customer's phone number to authorize.net but it seems that all fields are saved properly except the phone number.
Here is the option hash I used:
def options
    {
      :interval => { :unit => :months, :length => 1}, # per month
      :duration => { :start_date => self.start_date, :occurrences => self.timespan },
      :billing_address => {
        :first_name => self.first_name,
        :last_name => self.last_name,
        :address1 => self.address1,
        :address2 => self.address2,
        :city => self.city,
        :state => self.state,
        :zip => self.zip,
        :phone => self.phone_number
      }
    }

I see similar options hash in other websites on Google, but I wonder if :phone is incorrect?
This error occurs for both CIM and ARB.
Thanks!

I don't have any way to verify or replicate this; closing. Feel free to re-open with more info and/or a remote test that shows the issue. Thanks!


[BUG] When mounting using the 'drag and drop' option, the pop-up message asking for a confirmation does not appear.

Module Version: v3.3.5
Before open any issue

Enable the module setting "Enable debugging"
Click F12 go to the console tab
make the test you want and replicate the error
Go to the tab console open on point 2) and just right click and click 'Save as' and 'Save' or send a screenshot of the exception on the console.
Attach the text file on the github issue with all the logs related tot he module, or send a screenshot of the messages on the console.

Describe the bug
When mounting using the 'drag and drop' option, the pop-up message asking for a confirmation does not appear. It does seem to automatically attach the rider to the mount, but the movement is a bit broken (they detach and move disconnectedly.
Video4.webm
To Reproduce
Steps to reproduce the behavior:

Make an actor
Make a horse
Drag actor onto horse
See broken

Expected behavior
A pop-up confirmation is meant to appear isn't it? Plus the movement should work the same as the normal 'click icon to mount' behaviour (which works fine)
Screenshots
Video4.webm
Browser:
Foundry app, chrome and edge.

Foundry Version:
10.291
Game System:
Dnd 2.1.2
Additional context
Add any other context (like other modules installed) about the problem here.

THIS MODULES IS DEPRECATED ON V11 IN FAVOR OF Rideable


[AutoDiff upstream] Serialize derivative function configurations.

Serialize derivative function configurations per module.
@differentiable and @derivative attributes register derivatives for
AbstractFunctionDecls for a particular "derivative function configuration":
parameter indices and dervative generic signature.
To find @derivative functions registered in other Swift modules, derivative
function configurations must be serialized per module. When configurations for
a AbstractFunctionDecl are requested, all configurations from imported
modules are deserialized. This module serialization technique has precedent: it
is used for protocol conformances (e.g. extension declarations for a nominal
type) and Obj-C members for a class type.
Add AbstractFunctionDecl::getDerivativeFunctionConfigurations entry point
for accessing derivative function configurations.
In the differentiation transform: use
AbstractFunctionDecl::getDerivativeFunctionConfigurations to implement
findMinimalDerivativeConfiguration for canonical derivative function
configuration lookup, replacing getMinimalASTDifferentiableAttr.
Resolves TF-1100.

Upstreams https://github.com/apple/swift/pull/28608 from tensorflow branch.
Tests will be added when the differentiation transform is upstreamed: TF-1211.

@swift-ci Please smoke test

Linux CI flaked.
@swift-ci Please smoke test Linux


Add example for Custom filters

Simply adding this template to any existing custom filters would work.
eg:
class CustomFilter(SimpleListFilter):
    title = 'custom'
    parameter_name = 'custom'
    template = 'django_admin_listfilter_dropdown/dropdown_filter.html'

    def lookups(self, request, model_admin):
        # Lookups to be used

    def queryset(self, request, queryset):
        # QS filtering

Great, can you send a pull request (to the docs presumably)?

Done

Thanks for your help 👍 :)!


Set Read Concern to majority

What does this PR do?
Set Read Concern to Majority.
Note about Read Concern:
`majority` Read Concern is needed to have `monotonic reads` guarantee,
  that is necessary to avoid collecting metrics values that might be inconsistent between reads.
  Source Read Concern: https://docs.mongodb.com/manual/core/causal-consistency-read-write-concerns/
Monotonic reads ensures that if a process performs read r1, then r2, then r2 cannot observe a state
  prior to the writes which were reflected in r1; intuitively, reads cannot go backwards.
  Source Monotonic Read: http://jepsen.io/consistency/models/monotonic-reads

Motivation
Hypothesis:
Not setting read concern to majority might lead to reading stale data. Hence causing inconsistencies in the metrics collected.
Currently, when the read concern is not set, it default to local or available: https://docs.mongodb.com/manual/reference/read-concern/#read-concern-levels
Review checklist (to be filled by reviewers)

[ ] Feature or bugfix MUST have appropriate tests (unit, integration, e2e)
[ ] PR title must be written as a CHANGELOG entry (see why)
[ ] Files changes must correspond to the primary purpose of the PR as described in the title (small unrelated changes should have their own PR)
[ ] PR must have changelog/ and integration/ labels attached

After some testings, the issue might not be related to read concern, but the endpoint/hostname used to connect to mongo.

Isn't the change still useful?


[suggestion] Add customizable set of colors as settings

First of all, thanks for this great plugin! Awesome work!
My suggestion is to add the option to add your own set of colors in the settings tab. This makes it easier to use pre defined brand colors in the text editor.
For example: I want to color my text with my brand color.

Current "problem": I have to manually copy/paste the HEX/RGB code

For me this isn't a problem, but for clients this might be user unfriendly.

First of all, thanks for this great plugin! Awesome work!
My suggestion is to add the option to add your own set of colors in the settings tab. This makes it easier to use pre defined brand colors in the text editor.
For example: I want to color my text with my brand color.
* Current "problem": I have to manually copy/paste the HEX/RGB code

For me this isn't a problem, but for clients this might be user unfriendly.

Maybe also a dark theme?


[IMPROVEMENT] Master Detail Flow of Chatrooms for Tablets

Currently Rocket.Chat runs on tablets, shows separate screens for Chatrooms and Individual Chatroom. But it is conventional to maintain a Master Detailed flow while working on a Tablet layout.

Would you like to work on this?
Yes

@SyamSundarKirubakaran Yes, please go for it!


[BUG] crc stop on windows taking longer than usual

General information

OS: Windows
Hypervisor: Hyper-V

Logs
PS C:\Users\anath\go\bin> .\crc.exe status
Machine does not exist. Use 'crc start' to create it

PS C:\Users\anath\go\bin> .\crc.exe config view
- consent-telemetry                     : no
- preset                                : podman

PS C:\Users\anath\go\bin> .\crc.exe start
INFO Checking minimum RAM requirements
INFO Checking if running in a shell with administrator rights
INFO Checking Windows release
INFO Checking Windows edition
INFO Checking if Hyper-V is installed and operational
INFO Checking if Hyper-V service is enabled
INFO Checking if crc-users group exists
INFO Checking if current user is in crc-users and Hyper-V admins group
INFO Checking if vsock is correctly configured
INFO Checking if the daemon task powershell script is present
INFO Checking if the daemon task is installed
INFO Checking if the daemon task is running
INFO Checking admin helper service is running
INFO Loading bundle: crc_podman_hyperv_4.4.4_amd64...
INFO Creating CRC VM for Podman 4.4.4...
INFO Generating new SSH key pair...
INFO Starting CRC VM for podman 4.4.4...
INFO CRC instance is running with IP <IP_ADDRESS>
INFO CRC VM is running
INFO Updating authorized keys...
INFO Adding new bearer token for cockpit webconsole
podman runtime is now running.

Use the 'podman' command line interface:
  PS> & crc podman-env | Invoke-Expression
  PS> podman.exe COMMAND

PS C:\Users\anath\go\bin> Measure-Command { .\crc.exe stop }
INFO Stopping the instance, this may take a few minutes...
Cannot stop machine: exit status 1

Days              : 0
Hours             : 0
Minutes           : 10
Seconds           : 2
Milliseconds      : 662
Ticks             :<PHONE_NUMBER>
TotalDays         : 0.00697525905208333
TotalHours        : 0.16740621725
TotalMinutes      : 10.044373035
TotalSeconds      :<PHONE_NUMBER>
TotalMilliseconds :<PHONE_NUMBER>

PS C:\Users\anath\go\bin> .\crc.exe status
CRC VM:          Running
Podman:          4.4.4
RAM Usage:       179.6MB of 1.981GB
Disk Usage:      1.869GB of 32.68GB (Inside the CRC VM)
Cache Usage:     4.073GB
Cache Directory: C:\Users\anath\.crc\cache

PS C:\Users\anath\go\bin> Measure-Command { .\crc.exe stop -f }
INFO Stopping the instance, this may take a few minutes...

Days              : 0
Hours             : 0
Minutes           : 10
Seconds           : 4
Milliseconds      : 992
Ticks             :<PHONE_NUMBER>
TotalDays         : 0.00700223184375
TotalHours        : 0.16805356425
TotalMinutes      : 10.083213855
TotalSeconds      :<PHONE_NUMBER>
TotalMilliseconds :<PHONE_NUMBER>

finally it stops are using crc.exe stop -f
PS C:\Users\anath\go\bin> .\crc.exe status
CRC VM:          Stopped
Podman:          4.4.4
RAM Usage:       0B of 0B
Disk Usage:      0B of 0B (Inside the CRC VM)
Cache Usage:     4.073GB
Cache Directory: C:\Users\anath\.crc\cache

I am concerned about the fact the outcome of this command is unreliable. As can be seen in: https://github.com/crc-org/crc/issues/3801#issuecomment-1692735570 I stopped with stop and got a successful response, but when checking with statusonly the cluster had stopped, but the VM itself was still running. Only usingstop -f` resolved the issue.


Licence

What licence is this package under?

It is MIT, stated in the package.json, added to the README.md


Add PNA to pytorch_geometric

I made a pass to the PR and cleaned up a little bit. The only major difference is that I removed the MLP and FCLayer classes. In addition, I added a ZINC example since that is what you use in your paper. It reaches about 0.222 MAE, so it's not yet fully-reproducing your results. Do you have any idea what might be missing?

Thanks, great! We have often seen the patience wasn't enough, could you try running it with a patience of 20 for example?

Yes, that works :) It now reaches 0.1788 MAE. I'm merging this now. Thank you for contributing and once again, congratz to your work!

Thank you for your work and congrats on your latest model which I heard gets even better results!


.exists() doesn't work as expected

Describe the bug
.exists() returns true when you return null on a component
To Reproduce
function Something () {
  return null
}

test('something exists', () => {
  const obj = shallow(<Something />)
  // throws an error because `obj.exists()` returns true
  expect(obj.exists()).toBeFalsy()
})

Expected behavior
.exists() should return false because there's nothing to be rendered
Additional context
The reason it's failing is because it's testing this.length > 0 which returns true because if you log out the private variable of wrapper[NODES] it returns [ null ].
for now I've just overwritten the default .exists() function  in my setup until this is resolved
Enzyme.ShallowWrapper.prototype.exists = function exists (selector = null) {
  if (arguments.length > 0 && typeof selector !== 'string') {
    throw new TypeError('`selector` argument must be a string, if present.')
  }
  if (typeof selector === 'string') {
    return this.find(selector).exists()
  }
  return this.getNodesInternal().filter(Boolean).length > 0
}

You want .isEmptyRender() instead; .exists() indeed is doing the correct thing - the wrapper exists, whether it renders null or not.

We can either close this ticket, as "answered" or keep it open to discuss how exists should behave int his circumstance.  Or close this issue and create a new issue discussing it.
Notes: As per the documentation and conversation with @ljharb https://airbnb.io/enzyme/docs/api/ShallowWrapper/exists.html, when a selector is not passed in, it should return whether or not the node exists Returns whether or not the current node exists.  The discussion should be about the definition of exists and how to proceed with this question/bug.

@ljharb any idea on the direction we should go with this?
Thanks

I think if we can confirm that both exists and isEmptyRender are behaving as expected for both shallow and mount (possibly with added test cases), then we should improve the documentation for both to avoid confusion.

The docs have been updated.


i18n module is updated

From #3611:

i18n 0.7.0 (and the new 0.8.0) causes the Sails tests to fail. That's pretty disturbing.
0.6.0 seems to work alright, but I'm holding off for the moment. It's possible that the tests failing with 0.7.0 is due to an issue in Sails core, not in i18n; either way, someone needs a patch.

@sgress454 okay, i want fix it.
Tests fails with this error ?
  1 failing

  1) API and adapter generators "before all" hook:
     Uncaught Error: ENOENT: no such file or directory, uv_chdir
      at Error (native)
      at process.chdir (node_modules/fs-extra/node_modules/graceful-fs/polyfills.js:14:9)
      at test/integration/generate.test.js:29:15
      at ChildProcess.exithandler (child_process.js:204:7)
      at maybeClose (internal/child_process.js:821:16)
      at Socket.<anonymous> (internal/child_process.js:319:11)
      at Pipe._onclose (net.js:469:12)

@sgress454 can you say exact tests which fails with<EMAIL_ADDRESS>

@dangreen You can see the failing tests on Travis; they fail the same way for me locally.

@sgress454 https://github.com/mashpie/i18n-node/pull/218

merged - about to release as hotfix 0.8.1

ok released to npm - I was thinking of adding sails to QA... time to do so :)

@mashpie Thank you for very useful lib!)

Thank you for patching :)

@sgress454 what about merge ?

Thanks for staying on top of this, I'll check it out ASAP!

@sgress454 ?

Thanks @dangreen!


Expose interpreter path using API

Update the API as follows by adding a settings section,
interface IExtensionApi {
    /**
     * Promise indicating whether all parts of the extension have completed loading or not.
     * @type {Promise<void>}
     * @memberof IExtensionApi
     */
    ready: Promise<void>;
    debug: {
        /**
         * Generate an array of strings for commands to pass to the Python executable to launch the debugger for remote debugging.
         * Users can append another array of strings of what they want to execute along with relevant arguments to Python.
         * E.g `['/Users/..../pythonVSCode/pythonFiles/ptvsd_launcher.py', '--host', 'localhost', '--port', '57039', '--wait']`
         * @param {string} host
         * @param {number} port
         * @param {boolean} [waitUntilDebuggerAttaches=true]
         * @returns {Promise<string[]>}
         */
        getRemoteLauncherCommand(host: string, port: number, waitUntilDebuggerAttaches: boolean): Promise<string[]>;
    };
    /**
     * Return internal settings within the extension which are stored in VSCode storage
     */
    settings: {
        /**
         * Returns the Python execution command corresponding to the specified resource, taking into account
         * any workspace-specific settings for the workspace to which this resource belongs.
         * E.g of execution commands returned could be,
         * * `['<path to the interpreter set in settings>']`
         * * `['<path to the interpreter selected by the extension when setting is not set>']`
         * * `['conda', 'run', 'python']` which is used to run from within Conda environments.
         * or something similar for some other Python environments.
         * @param {Resource} [resource] A resource for which the setting is asked for.
         * * When no resource is provided, the setting scoped to the first workspace folder is returned.
         * * If no folder is present, it returns the global setting.
         * @returns {(string[] | undefined)} When return value is `undefined`, it means no interpreter is set.
         * Otherwise, join the items returned using space to construct the full execution command.
         */
        getExecutionCommand(resource?: Resource): string[] | undefined;
    };
}

https://github.com/formulahendry/vscode-code-runner/issues/604

We've to make sure all these 4 cases work,

Old version of Code Runner + Old version of the extension -> already works
New version of Code Runner + Old version of the extension
New version of Code Runner + New version of the extension
Old version of Code Runner + New version of the extension

Proposed changes
Code runner
In the new version of code runner,
We would check if user is using the old or the new python extension using the new setting.

If he is using the old one, we would look for the settings in the old way
If he is using the new one, we would look for the settings in the new way using the API
If new version of code runner is being used, the above proposed changes work fine for cases 2 & 3.

Python extension

Expose the interpreter path via API. https://github.com/microsoft/vscode-python/issues/11294
Check if we are using the old version of Code runner or the new one. If using the old one, show a prompt asking user to upgrade Code runner to new version to keep using it.

How to check from extension A if user is using the old version of extension B or the new one
Introduce a flag in package.json of both the extensions. Within extension A, check if package.json of extension B has flag set. If it is set, it's the newer version of the extension.
Python extension

Introduce a feature flag in package.json of the extension, which states if the extension is using the new interpreter storage or not. We're adding the following to our package.json ,

"featureFlags": {
    "usingNewInterpreterStorage": true
}

So you can access the flag using,
const extension = vscode.extensions.getExtension('ms-python.python')!;
const flagValue = extension.packageJSON.featureFlags.usingNewInterpreterStorage;

Code runner
Please add a similar flag in package.json and let us know. You can use the following to call our API, which makes sure the extension is activated before calling the API:
const extension = vscode.extensions.getExtension('ms-python.python')!;
if (!extension.isActive) {
    await extension.activate();
}
const pythonPath = extension.exports.settings.getInterpreterPath(resource);

Note we will have to release Code runnner extension first, followed by the extension release. (which is targeted before May 12)

  * E.g of execution commands returned could be,
         * * `['<path to the interpreter set in settings>']`
         * * `['<path to the interpreter selected by the extension when setting is not set>']`
         * * `['conda', 'run', 'python']` which is used to run fr

This option will not always work.

conda run is busted.

I didn't think we even used this option
Either way it will not work for conda

Solution won't with pyenv

I"m not convinced we should expose the commands to other extensions.
I believe we should merely expose the executable and be done with it.
That's what was done in the past, extensions accessed pythonPath setting to get the executable.
If we want to own running python code on behalf of other extensions, then we need to provide a method that extensions can call to execute arbitrary python code/files. E.g. execFile or execModule or similar (with options to run in terminal, etc) - now it gets complicated for no real benefit.
In summary my suggestion is just return executable path and be done with it.
Provide old behavior and let external extensions deal with conda, pyenv, pipenv, etc. Or if really important we can own it (but thats bigger).
@luabud @karthiknadig /cc

conda run is busted

FYI this is keeping in mind of future that if we ever start using conda run again, we don't have to change the API.

@DonJayamanne

We know conda run is busted, but we don't want to design ourselves into a corner if it does work someday
Why won't this work for pyenv? How it is different from any other path that may be provided?

We don't want to own running code for other extensions, we are just exposing how to run code because we and other extensions have a need for this exact functionality. And we are definitely not going to wrap execution APIs as we would then have to mirror all options provided by Node and VS Code and that is not a business we want to be in.

Apologies for the confusion, I understand this was discussed, my bad.
Hiding my comments & the subsequent comments to avoid confusion


Fixed #5925 -- Mark page as dirty when placeholder is cleared

Fixed #5925

Coverage remained the same at 82.628% when pulling 604cd0bf8b836862c1830ea3ca830eb5763a423a on czpython:fixes/3.4.x/5925 into 3e3a34f81e221192096a0fb761b3f0b3c7df5927 on divio:release/3.4.x.


Unable to sell RAM in one account and distribute proceeds to another

I own 2 accounts: someaccount1 and someaccount2. I'd like to sell RAM in someaccount2 and distribute proceeds into someaccount1. I follow the docs and use -p argument to modify the authorization, because I assume that setting authorization to someaccount2 instructs the system to sell RAM in someaccount2 account. The command looks like this:
cleos system sellram -p 'someaccount2@active' -d someaccount1 4096
However, the generated transaction JSON still has someaccount1 under authorization
...
  "context_free_actions": [],
  "actions": [{
      "account": "eosio",
      "name": "sellram",
      "authorization": [{
          "actor": "someaccount1",
          "permission": "active"
        }
      ],
      "data": "202952d89cdc98530010000000000000"
    }
  ],
  "transaction_extensions": [],
...

Yes, I understand that I can manually do this. Looks like this is still a bug though, because -p should be able to set the authority and it doesn't.

This is fixed in https://github.com/EOSIO/eos/issues/6113


Raise contrast between Black_and_white page background and boxes

Make page bg about as dark as other themes
Addresses https://www.pivotaltracker.com/story/show/90607800

I played around with increasing contrast by (a) changing box colors versus (b) changing page background.  I personally preferred changing the page background, which also makes the styling more parallel to the Agaricus theme (and probably the others).
Try it and see if you like it.  We can always continue to tweak it.

I like it!
On Thu, Mar 19, 2015 at 1:32 PM, Joseph D. Cohen<EMAIL_ADDRESS>wrote:

I played around with increasing contrast by (a) changing box colors versus
(b) changing page background. I personally preferred changing the page
background, which also makes the styling more parallel to the Agaricus
theme (and probably the others).
Try it and see if you like it. We can always continue to tweak it.
—
Reply to this email directly or view it on GitHub
https://github.com/MushroomObserver/mushroom-observer/pull/150#issuecomment-83753418
.


Different behavior between the Github action and the CLI

Steps to reproduce the bug with the above code
I was upgrading a crate from 0.1.0-rc2 to 0.1.0. No actual code changes were present, just exiting the release candidate phase.
Actual Behaviour
I used
      - name: Check semver
        uses: obi1kenobi/cargo-semver-checks-action@v1
        with:
          crate-name: qr-rs-lib

as part of my CD pipeline and got this error:
Crate qr-rs-lib current version: 0.1.0
Versions on crates.io:
0.1.0-rc2
0.1.0-rc1

There is no suitable comparison version.
The current version 0.1.0 is smaller than any version published on crates.io
+ export COMPARISON_TAG=v
+ COMPARISON_TAG=v
+ git fetch --depth=1 origin +refs/tags/v:refs/tags/v
fatal: couldn't find remote ref refs/tags/v
Error: Process completed with exit code 128.

My workflow can be found here and the relevant part is this.
Expected Behaviour
This should not throw an error. The interesting thing is how the CLI does not consider this to be wrong (which is the expected behavior).
In fact, that is how I fixed my pipeline, by using the CLI instead of the action
      - name: Check semver
        working-directory: lib
        run: |
          cargo install cargo-semver-checks --locked
          cargo semver-checks check-release

Generated System Information
Software version
cargo-semver-checks 0.17.1 (af71be0)
Operating system
Windows 6.2.9200
Command-line
C:\Users\anton\.cargo\bin\cargo-semver-checks.exe semver-checks --bugreport

cargo version
> cargo -V
cargo 1.67.1 (8ecd4f20a 2023-01-10)

Compile time information

Profile: release
Target triple: x86_64-pc-windows-msvc
Family: windows
OS: windows
Architecture: x86_64
Pointer width: 64
Endian: little
CPU features: fxsr,sse,sse2
Host: x86_64-pc-windows-msvc

Build Configuration
My config.toml can be found here however, it only contains ~way too many~ lints and was present both in the failing and passing scenarios.
Additional Context
No response

The error seems to originate from here.

It seems that the -rc versions take precedence over the full release which shouldn't be the case. I ran the sh file as if I was uploading a new 0.2.0 version and the OUTPUT variable was set to 0.1.0-rc2, this should be 0.1.0 instead
CURRENT_VERSION="0.2.0"
CRATE_NAME="qr_rs_lib"

EXISTING_VERSIONS="
$( \
    curl 2>/dev/null "https://crates.io/api/v1/crates/$CRATE_NAME" | \
    jq --exit-status -r .versions[].num \
)"
echo >&2 -e "Versions on crates.io:$EXISTING_VERSIONS\n"
# Versions on crates.io:
# 0.1.0
# 0.1.0-rc2
# 0.1.0-rc1

OUTPUT="$( \
    echo -e "$CURRENT_VERSION$EXISTING_VERSIONS" | \
    sort -V | \
    grep -B 1 -A 0 --line-regexp --max-count=1 "$CURRENT_VERSION" | \
    head -n 1 \
)"

echo $OUTPUT


about migrations issues

DBFlow Version:3.1.1
Issue Kind (Bug, Question, Feature):Question
Description:
I have 3 versions, now upgrading from version 1 to version 3. version 2 adds a column of fields to the A table, version 3 modifies the table name of the A table from A1 to A2
I install version 1 from version 3 directly to apk,
@Migration(version = 2, database = OrangeDatabase.class)
public class Migration2 extends AlterTableMigration<AppUpgrade> {
    private static final String TAG = Migration2.class.getSimpleName();

    public Migration2(Class<AppUpgrade> table) {
        super(table);
    }

    @Override
    public void onPreMigrate() {
        Log.d(TAG, "onPreMigrate() called with: " + "");
        addColumn(SQLiteType.TEXT, AppUpgrade_Table.date.toString());
    }
}

@Migration(version = 3, database = OrangeDatabase.class)
public class Migration3 extends AlterTableMigration<AppUpgrade> {
    private static final String TAG = Migration3.class.getSimpleName();

    public Migration3(Class<AppUpgrade> table) {
        super(table);
    }

    @Override
    public void onPreMigrate() {
        Log.d(TAG, "onPreMigrate() called with: " + "");
        renameFrom("AppUpgrade");
    }
}

Error:
android.database.sqlite.SQLiteException: there is already another table or index with this name: app_upgrade (code 1): , while compiling: ALTER TABLE AppUpgrade RENAME TO app_upgrade

You can use the following query (kotlin syntax shown)
val cursor = database.rawQuery("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = '$tableName';", emptyArray())

Then from the resulting cursor you can get the create statement for the table as it currently is. At which point you can examine it and determine the correct migration logic.
val sqlCreateStatement = cursor.getString(0)

Keep in mind that DBFlow creates missing tables first, then attempts to do any migrations. So in your case you can end up doing migration from 1 to 2 with a table that was pre created at the newest level 3 schema.
I would strongly recommend you keep a sqlite file from each schema version you release to the public and write unit tests that walk through the migrations for every version.
The test suite I wrote for my project checks my master.sqlite file against the schema of a freshly created database file to ensure that my master file is up to date. From there you have one test for each version of the schema, the test needs to copy the sqlite file from resources and place it where dbflow will try to open it, then initialize the flow manager to trigger migrations. once the migration is finished you need to compare the result with the master.sqlite file schema to ensure it is a correct migration.
So in your case you would have 3 tests.
testMasterIsUpToDate() this ensures that the file your other tests will compare against is up to date.
testVersionOneThroughLatest() this ensures that your version one schema database correctly migrates to version two then to version three.
testVersionTwoThroughLatest()this ensures that your version two schema database correctly migrates to version three.

@trevjonez
Thank you for answering my question.
This is my creat table sql:
CREATE TABLE `AppUpgrade`(`versionCode` INTEGER,`info` TEXT,`url` TEXT,`localPath` TEXT,
`forceUpgrade` INTEGER,`ignore` INTEGER, PRIMARY KEY(`versionCode`))

I think it's no problem, but i through renameFrom("AppUpgrade") rename table to app_upgrade is fail. In cmd execute sql ALTER TABLE 'AppUpgrade' RENAME TO 'app_upgrade' is success;

Can you post a copy of each different versions create schema for me? Im still confused as to what is going on and what your intent is.


getUnreadMessages Error

Hey guys, I'm getting this error today. Does anyone else?
webwhatsapi.wapi_js_wrapper.JsException: Error in function getUnreadMessages (Tried to run command without establishing a connection). Command: return WAPI.getUnreadMessages(true,false,false, arguments[0])

I'd the same problem. I've found this fork with a resolution for this:
https://github.com/abhik1505040/WebWhatsapp-Wrapper


Update egui to 0.26.0

Hello @ItsEthra, I update egui and eframe versions to 0.26.0

Thanks, I'll publish a new crates version shortly.


Save records with BelongsTo relations using the relation name without having to set fillable in the model

Description
When using Select fields with BelongsTo relations, we had to set the relation field (mostly a foreign key) as $fillable in the Model or had to set the whole Model as Unguarded. To protect this foreign key fields in other parts of the application we don't want to set these fields as fillable normally.
Example:
The model Project.php has the relation company and only the  attribute name is set as fillable
class Project extends Model
{

    protected $fillable = [
        'name',
    ];

    public function company(): BelongsTo
    {
        return $this->belongsTo(Company::class);
    }
}

The ProjectResource has the following form with a Select Field company
    public static function form(Form $form): Form
    {
        return $form
            ->schema([
            Select::make('company_id')
                ->relationship(name: 'company', titleAttribute: 'name')
                ->preload()
                ->searchable(),
            TextInput::make('name')
                ->required(),
        ]);
    }

The Select field is using the relation registered in the model. In the current situation, when creating a new record using this example form and Model, would throw an Exception: Add fillable property [company_id] to allow mass assignment on [App\Models\Project]..
With minor changes to the CreateRecord and EditRecord, we are now able to save the records using Filament without the need to set the relation fields as $fillable.
For now, this implementation is using forceFill() to keep the implementation more simple. This will also fix the issue https://github.com/filamentphp/filament/issues/11204 as intended.
Code style

[x] composer cs command has been run.

Testing

[x] Changes have been tested.

Documentation

[x] Documentation is up-to-date.

To be honest, this does feel like an overly complex solution to me. I understand the problem - you don't want to add the foreign key as fillable. That's fine. But in that case, Filament should probably just switch to using forceFill(), which would solve the problem in all cases. I don't see any issues with this since all the data we pass to the model is validated anyway.

@danharrin forceFill() is an option too, but then we can't name the Select field using the relation name.
Select::make('company')
                ->relationship(name: 'company', titleAttribute: 'name')
                ->preload()
                ->searchable(),

But we are forced to use the field name:
Select::make('company_id')
                ->relationship(name: 'company', titleAttribute: 'name')
                ->preload()
                ->searchable(),

Next to that we are not using the Eloquent associate() method to associate the related model but just force the mass assignment to the model directly (what is some how bad practice in my opinion) and  that can  potentially expose the application to vulnerabilities.
I'm hoppy to change this implementation to a forceFill() implementation for the time being btw.

Naming the select field after the relation name (for BelongsTo at least) is not the guidance of the documentation, the docs should use the foreign key for this reason
What vulnerabilities are there in mass assignment if we are passing validated data only?

I have updated the implementation to use the forceFill() as suggested for now.
There are no vulnerabilities in mass assignment using Filament so i don't see problems using mass assignment in this part of the application with validated data only.

@danharrin thanks for taking care of the Actions and documentation too! Looks promising!

I updated to 3.2.30 and my $guarded arrays are now ignored. I suspect this change is the root problem. Reverted to prior release and all works now.

It's deliberate, please read our discussion. We only use validated data when passing to models.

If you want to prevent a field from being saved, this option has been available since September 2021 as a feature of Filament - https://filamentphp.com/docs/3.x/forms/advanced#preventing-a-field-from-being-dehydrated

To be honest, I think I'm going to revert this in the next release, it feels a little too risky for my liking if people were relying on guarded when they should have been using dehydrated(false). It's user error, but I think we need to protect them in this case

@johanzandstra you can override any of the methods we added in this PR / abstract to traits if you want to preserve that behaviour. Or make your foreign key fillable

It's deliberate, please read our discussion. We only use validated data when passing to models.
I saw that before, but in my case, I have a number of fields in my form that have no corresponding db column and need to be present in the data array, so I used the guarded array to block them from the generated SQL. Things like toggles whose values are used when creating or editing records.  If my problem is so unusual, I must not be using Filament correctly. Wouldn't be the first time, I think

The idea is that everything in the resulting data array is saveable. But I think we will have to wait until v4 for this change.

The idea is that everything in the resulting data array is saveable. But I think we will have to wait until v4 for this change.

I get it now, but where I got confused and perhaps others have as well is that there are more than one "data" array.  There's the one in the parameter passed into mutateFormDataBeforeCreate/Edit, etc functions and there's the data object array at the component level. The data array you send to the function has apparently been copied from the component and stripped of the fields marked with dehydrated(false) so it can be saved as is, but if you use any of the field types for options that don't correspond with a database column, you have to refer to them with $this->data([]). A fine distinction which escaped my 67 year old brain back when I programmed the form in question.

Or make your foreign key fillable

This should be documented instead of applying forceFill for every v2~3 forms out there, it will make upgrading to v4 a difficult process (yes I know we should have tests)
Since Filament internal process of record creation and linking requires foreign key fillable, and only validated foreign key are filled by Filament 😉, it should be safe to just add that to $fillable. Userland code should validate the data anyhow or use the attach/associate.

The idea is that everything in the resulting data array is saveable. But I think we will have to wait until v4 for this change.

@danharrin I understand that the change has maybe more impact then initially thought. For now we will work around this in projects with the unguarded solution.
The forceFill() was not my initial idea but I wanted to go for the more complex attach/associate concept as @wychoong mentioned without breaking the existing fillable logics in models as I first proposed in https://github.com/filamentphp/filament/pull/11329/commits/89536107a332f99132b5e33b6996a118a71a5afe

One option you can use in your panel provider is ->bootUsing(fn () => Model::unguard()) which only unguards models when the panel is being used

@danharrin I was looking for the right place to unguard the models instead of app::boot(), as my app has an admin panel interface using filament, as well as a regular mobile app where Model::unguard() is risky. Your comment finally answered it for me.

One option you can use in your panel provider is ->bootUsing(fn () => Model::unguard()) which only unguards models when the panel is being used

This should be in the documentation, and not making developers add Model::unguard() everywhere. Some might not know the risk of doing that.


/etc/apache2/envvars or equivalent for library/httpd docker container

Hello,
I am trying to refer to envvars such as APACHE_RUN_DIR when using library/httpd docker container as our base image, but I am unable to locate any envvars.
Please could anyone advise how I can go about installing or generating envvars for the httpd?
The container which I am using: https://hub.docker.com/layers/httpd/library/httpd/latest/images/sha256-20eedff39b927f5bbf82e9b40ca8980b3f268f3de9918bed53d43c039d7a411b
Please advise.  Thanks!

This thread might be relevant https://github.com/docker-library/php/issues/1082
The easiest solution is probably to provide your own config https://github.com/docker-library/docs/tree/master/httpd#configuration

If you need further help you could also try asking over at the Docker Community Forums, Docker Community Slack, or Stack Overflow. Since these repos aren't really a user-help forum


Drop Node.js 4 from build

It's end-of-life since April 2018.

Coverage remained the same at 98.982% when pulling 7681f5b497a04eb49128fba3343ec9825a85897c on ulrichb:DropNode4FromCi into ed50e9ca8ca69c57ba4f43a5b1d1b3b081f77e21 on mariocasciaro:master.

Thanks


Refs #35194 -- Adjusted a generated field test to work on Postgres 15.6+.

Trac ticket number

ticket-35194
Branch description
Postgres >= 12.18, 13.14, 14.11, 15.6, 16.2 changed the way the immutability of generated and default expressions is detected in postgres/postgres@743ddafc7124604c1f59b5d9f661be47a987a8d0.
The adjusted test intent is preserved by switching from __icontains to __contains as both make use of a % literal which requires proper escaping.
Refs ticket-35336.
Thanks @bcail for the report.

Thanks for the merge @sarahboyce! I think that this particular one should be merged on 5.0.x as well since fead2dd52303505f30007df5e3c198b48b3ce9ae made it there.

I think that this particular one should be backported to 5.0.x since https://github.com/django/django/commit/fead2dd52303505f30007df5e3c198b48b3ce9ae made it there.

Without a backport the test suite will start failing on 5.0.x the moment we upgrade Postgres to the latest minor versions on djangoci.com.

Thank you! I will do that now 👍


New test for legacy privacy transactions

Add a privacy test using legacy privateFrom instead of privacy groups.
Acceptance Criteria

Test that submits a private transaction deploying a contract without privacy groups similar to the existing PrivacyContractDeploymentTest.
Test must use EthSigner, Besu and the Enclave
Test both Orion and Tessera

Orion will be deprecated as of end of Nov (tomorrow!) so no need to add new tests for it


Asterisk (*) should be a valid game end.

From the PGN specs:
The game termination marker is a symbol that is one of the following four values: "1-0" (White wins), "0-1" (Black wins), "1/2-1/2" (drawn game), and "*" (game in progress, result unknown, or game abandoned).
Currently it seems everything else is accepted, but not "*".

Fixed in recent PR, thanks for the report!


Crop button doesn't work

BUG
Current Behavior
Not able to crop the photo which is preventing people from reporting back.
Desired Behavior
You can use the crop functions and crop the photo to upload
Steps to Replicate

go to a campaign
sign up
upload a photo
resize
try to click crop (might not work)

Why This Matters
people can't reportback
OS/Browser (optional)
On whatismybrowser.com/w/T5ADRGE and was able to use the resize cropping thing, but wasn't able to click Crop.
Relevant Screenshots + Links
Zendesk problem ticket (click 'incidents' at top of ticket to see all tickets): https://dosomethingorg1.zendesk.com/agent/tickets/274340
Video example of not being able to click crop button: https://dosomething.slack.com/files/jen/F3ZH6V3E3/cant_click_crop.mov
Seemed like refreshing the page and then reuploading made it work...

This one was pretty strange – the best guess I have is that a cached version of the script for that page was being loaded and somehow failed to register the client-side validation function.
@ngjo, @hbghidey, and I were all able to reproduce this issue at the time, and then magically refreshing the page seemed to fix it for all of us... not sure if that means something changed server-side, or anyone experiencing this issue should just refresh to clear it up.

We should see the number of incidents decline over time if it's a cached-script problem.

Per @hbghidey this issue has been resolved!
There was an issue with the jump link and it was causing users to have issues zooming + submitting reportbacks.  We were able to recreate by using the broken URL > uploading a photo (which doesn’t show up) > clicking submit > photo shows up zoomed in.
• Here’s the URL: https://www.dosomething.org/us/campaigns/love-letters-challenge?source=gladiator&utm_source=dosomething&utm_medium=email&utm_campaign=Gladiator#prove
• Here’s my RB: https://www.dosomething.org/us/reportback/231796?fid=338718


performance issue

I'm running the following (from the docker image):
dish_grpc_influx.py -t 10 --all-samples -v status obstruction_detail ping_drop ping_run_length ping_latency ping_loaded_latency usage alert_detail

This is using 100% CPU constantly.  That seems excessive to convert starlink data to influxdb.  Are there any known performance issues here?

I've modified my flags to something a bit less intense:
dish_grpc_influx.py -t 10 --all-samples -v status usage alert_detail

I'm still seeing consistent core consumption.

Seems to be working as expected with
dish_grpc_influx.py -t 10 -v status alert_detail

-t 10 is a little frequent to be polling the history buffer, which the usage group will still need, but even that should not saturate CPU time.
Running outside docker, I get about 1.3% CPU usage average running your original command (writing to a local InfluxDB instance, but that shouldn't matter to the python process running the script), and this is on a PC that is something like 15 years old.
I do see the CPU usage spike when it wakes up when I run the published neurocis/starlink-grpc-tools docker image, but not so much when I build my own docker image. Are you running the published image? What OS are you using to run Docker?

To answer your original question: There are a few areas where the code is not well optimized, either for simplicity sake or to better allow for code sharing among the 4 dish_grpc_*.py scripts, but as far as I could tell, the performance impact of those decisions should on the order of milliseconds per loop iteration.
If I had to guess, I'd say the most likely culprit for performance issues is the grpc package, especially if it is not using a native implementation. I tried building a docker image based on the Alpine python base and it was hella slow, I think for that reason.

I'm running nixos 20.09.  A nix derivative could probably make for an ideal implementation, but there's an intersection of things I'm not super familiar with.  I'm currently in an acceptable state, but I thought it would be interesting since a small change seems to require tons of CPU.

It's definitely interesting, but removing the usage mode group is not a small change. Without that, it won't need to poll the get_history grpc request, and will only need the get_status request, which responds with much less data than get_history. It also doesn't parse the history buffer at all, though, and since the code in starlink_grpc will compute all the history stats data regardless of what specific history mode groups were requested, it's still possible it's the parsing logic that is the performance drag.
I think I figured out what it is about my own build of the docker image that was making it faster than the published image. I have some Dockerfile changes related to the generated pb2 files and those appear to have resulted in different versions of the grpc and protobuf Python packages being installed for reasons I don't understand. Anyway, when I revert those changes, I see the same CPU spikes as the published neurocis/starlink-grpc-tools image, which looks like it's about 2 CPU seconds per loop iteration (vs the .02 CPU seconds per loop iteration either outside docker or with my changes).
That's still less a lot less than 100% constantly, but it does look like the published docker image is missing the native build of the protobuf internal implementation, so maybe that combined with some weird interaction between docker and your OS config is blowing things up.

Sorry, just jumping in, are there Docker optimizations that need to be pulled for the protofiles?

I think I figured out what is going on. It's not my changes, it's because my changes are causing docker build to not use a cached build image that has the Python packages already installed. Somehow, a protobuf Python package that doesn't have the native build got installed and that is now in the build cache.
If you rebuild the Docker image as-is with 'docker build --no-cache' and publish that, I think it should pick up the native protobuf build. This can be verified by shelling into the running container and doing:
ls /usr/local/lib/python3.9/site-packages/google/protobuf/internal/

If you see a file that looks like _api_implementation.cpython-39-x86_64-linux-gnu.so, that's the native build. If not, protobuf will wind up using a pure Python implementation.
We should discuss my other changes, too, but we can do that in a separate context. I'll open a specific issue for that when I get a chance. The thing I believe to have caused this issue has led me to rethink that change a little and I want to mull it over for a bit.
I don't think this issue is particularly urgent, though, so there's no rush.

OK, sorry for taking so long to get to this, but the published starlink-grpc-tools docker image has now been updated with a version of the protobuf Python package that has a native Linux binary for Python 3.9. I retested with the command line options from the original comment on this issue and observe an average 0.2% CPU time usage similar to what I observe running outside docker.
@dustin, could you pull the latest neurocis/starlink-grpc-tools image and retest to confirm that this addresses the performance issue you originally reported? I expect it will at least improve things significantly. If you already have an earlier image on your system, you will need to update it with something like:
docker pull neurocis/starlink-grpc-tools

I'm going to assume things are sufficiently OK now and close out this issue. Please reopen or file a new issue if performance issues persist.


Update to 2.0.12543

@mathewc @ahmelsayed, pulled down the latest image for validation. Is it intended that mesh.Dockerfile has 2.0.12544 instead of 2.0.12543?

Yes - Ahmed says that's the way we do it (+1 for mesh)

@maiqbal11 Yes, I usually have the version slightly different because I would like to be able to tell if a custom image has been based on the wrong image. Also sometimes there are Mesh only releases, or bug fixes, so I always keep the version at least 1 ahead.


Add WGS npcs

Ghommal and Duradel probably also got varbits like Nieve after WGS. Preferably they'd be added to this plugin with some config options to enable/disable.
Edit: I think some other npcs like Turael and Sloane also die during WGS.

I came here to request the same thing.
After the quest, the following four NPCs who died are replaced. (Hazelmere or Cyrisus aren't replaced; and Mazchna doesn't die)
Turael → Aya
Duradel → Kuradal
Ghommal → Laidee Gnonock
Sloane → Yadech Strongarm

Hey,
I wouldn't mind adding these, but I currently haven't done the quest yet and am not aware of the varbits that are being used to swap them out.
Once I do it and know more, I wouldn't mind adding them, but until that time (dunno when I get around to it) feel free to PR these if you know how, or to add varbit details etc. to this issue if you've got them, so that I can take a look at this sooner.

It might be difficult and/or impossible, sadly. E.g. for some reason Ghommal is a different base npc than Laidee, and the server doesn't send them if they are multinpc'd into nothing. Thus setting the varbit to 0 just makes Laidee disappear without showing Ghommal. For more info see https://discord.com/channels/301497432909414422/419891709883973642/1264362492365373500 (continue reading for a bit, see Abex's and Polar's comments)
The varbits themselves can mostly be found in the cache, and have also been mentioned in the discord https://discord.com/channels/301497432909414422/419891709883973642/1261099767400890508


Missing commands in autocompletion

I noticed there are some commands missing from autocompletion. These include

\subsection
\textit
\texttt
and probably others.

Beside these well-known standard commands, is it possible to figure out what additional commands become available from \usepackage declarations? An example would be that when \usepackage{csquotes} is present, \enquote{...} becomes a valid autocompletion.
I know, the latter is probably more complicated but I guess this would be an awesome feature.

Answers to the two questions.

Now the plugin "learns" from what you input in tex files. If a command appeared at any tex files in your latex project, the plugin will show autocomplete for it. I agree that there are some necessary ones and I will consider adding them. But the list will not be very long.

Short answer is: no, it is not possible due to the infamous latex language design. Detailed explanation can be found in this link. Another work around is to manual list commands for each packages. However as there are more than 4k (or significantly more) packages, it's a very tedious task.

I will close this issue for now. If you find something wrong or have other suggestions, please feel free to re-open it or create a new one. :p

I expected something like this for the second question :P too bad.
But yes, I think you are right that the most important commands which are considered "standard" are worth adding.


Unexpected token with react-css-modules (can't see why)

I have a react component:
AppContainer.js
// @flow
import React from 'react';
import CSSModules from 'react-css-modules';
import AppNavbar from './components/AppNavbar';
import styles from './styles.scss';

type Props = {
  children: Array<Object>,
  admin: boolean,
};

const AppContainer = ({
  children,
  admin,
}: Props) => (
  <div data-root styleName="container">
    <AppNavbar admin={admin} />
    <div styleName="inner">
      {children}
    </div>
  </div>
);

export default CSSModules(AppContainer, styles);

And the SCSS:
AppContainer.scss
.container {
  background-color: #fafafa;
  height: 100%;
}

.inner {
  margin: 0 36px;
  height: 100%;
}

My server starts and uses a middleware to render the React application server side. In the middleware file I import the css-modules-require-hook/preset. The example:
server.js
// loads of imports
import 'css-modules-require-hook/preset';

export default (req: $Request, res: $Response, next: $NextFunction) => {
  // loads of configuration stuff

  const content = renderToString(
    <Provider store={store}>
      <ServerRouter location={req.url} context={reactRouterContext}>
        <MuiThemeProvider muiTheme={muiTheme}>
          <Root />
        </MuiThemeProvider>
      </ServerRouter>
    </Provider>,
  );

  const initialState = store.getState();

  const html = renderFullPage({
    content,
    initialState,
  });

  const renderResult = reactRouterContext.getResult();

  return res.status(renderResult.missed ? 404 : 200).send(html);
};

Then I have the cmrh.conf.js file.
cmrh.conf.js
const sass = require('node-sass');
const path = require('path');

module.exports = {
  generateScopedName: '[path]___[name]__[local]___[hash:base64:5]',
  preprocessCss: (data) => {
    console.log('Uhul!');
    return sass.renderSync({
      data,
      includePaths: [path.resolve(__dirname, './src/client/components/**/*.scss')],
    }).css;
  },
};

These are my loaders from the webpack.config.server.js (obviously, the server side build).
{
  test: /\.js$/,
  exclude: /node_modules/,
  loader: 'babel',
  query: {
      presets: [
      'react',
      'es2015',
      'stage-0',
      ],
      plugins: [
      [
          'babel-plugin-webpack-loaders',
          { config: path.resolve(__dirname, './webpack.config.babel.js'), verbose: false }
      ],
      ]
  },
},
{
  test: /\.json$/,
  use: 'json-loader'
},
{
  test: /\.scss$/,
  loders: ['css?modules&importLoaders=1&localIdentName=[path]___[name]__[local]___[hash:base64:5]', 'sass']
}

My server does not run webpack. This webpack build is just for production. For development I run cross-env NODE_ENV=development babel-watch ./server.js (it's the same as babel-node but with nodemon instead of pure node).
Guys, I'm really struggling to get this running. The configuration seems to be okay for me, but I get this in my console (server side only):
SyntaxError: /home/andrey/Projects/Datarisk/app-frontend/src/client/components/AppContainer
/styles.scss: Unexpected token (1:0)
> 1 | .container {
    | ^
  2 |   background-color: #fafafa;
  3 |   height: 100%;
  4 | }
    at Parser.pp$5.raise (/home/andrey/Projects/Datarisk/app-frontend/node_modules/babylon/
lib/index.js:4333:13)
...more

And I simply don't know why it's not working. Does someone give me some help?

@andreyluiz looks like you use .scss as a file extension. Try to add extensions option to the config:
module.exports = {
  extensions: ['.css', '.scss'], // <--
  generateScopedName: '[path]___[name]__[local]___[hash:base64:5]',
  preprocessCss: (data) => {
    console.log('Uhul!');
    return sass.renderSync({
      data,
      includePaths: [path.resolve(__dirname, './src/client/components/**/*.scss')],
    }).css;
  },
};

Wow, completely missed that.
$ cross-env NODE_ENV=development babel-node src/server
Uhul!
Listening...
webpack built 3503be3d6e8bd713ff73 in 25743ms

Now it compiled. :D
I'll adjust my code and see if everything works together. Thank you @sullenor. :)
I more problems come up, I comment here. ;)

sure :)