Parent Process Object is Missing

Background
I want to list the processes on my system.
Get-Process

 NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName
 ------    -----      -----     ------      --  -- -----------
      0     0.00       3.75       0.00    1270 …69 (sd-pam)
      0     0.00       9.84       1.25     962 962 accounts-daemon
      0     0.00       0.00       0.00     117   0 acpi_thermal_pm
...

Further, I would like to sort the processes by parent.
I'm on Linux. And I have a Parent property. I'm not sure if that is available on Windows.
Get-Process | Select-Object @{name='Parent'; expr={$_.Parent.Id}}, Id, Name | Sort-Object Parent, Id

Parent     Id Name
------     -- ----
       105455 Web Content
1        2617 firefox
1      135731 code --no-sandbox --force-user-env --unity-launch --enable-crashpad
1284     1362 Thunar
1370   127909 thunderbird
1667     1688 pwsh
1688    11884 vim

Issue
The issue I noticed was that some of the Parent Process IDs (PPID) were missing.
Note there are no IDs in the Parent column below.
Get-Process | Select-Object @{name='Parent'; expr={$_.Parent.Id}}, Id, Name | Sort-Object Parent, Id

Parent     Id Name
------     -- ----
            1 systemd
            2 kthreadd
          847 UVM global queue
          848 UVM deferred release queue
          849 UVM Tools Event Queue
...
       105455 Web Content
       105458 Web Content
...

It is not clear to me if there is a bug with PowerShell, a bug with .NET, or something I don't understand.
The one-liner I'm issuing seems correct to me.
But I'm not getting a Parent Process ID for worker processes, which is the output I expect.
I don't think there is a permission issue because I am the only user. And the native task manager shows the correct parent and child relationships for processes.
The affected processes are mostly Mozilla Firefox and Thunderbird workers.

Environment
$PSVersionTable | Format-Table -Wrap

Name                           Value
----                           -----
PSVersion                      7.2.4
PSEdition                      Core
GitCommitId                    7.2.4
OS                             Linux 5.18.5-1-MANJARO #1 SMP PREEMPT_DYNAMIC
                               Thu Jun 16 12:28:47 UTC 2022
Platform                       Unix
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           <IP_ADDRESS>
WSManStackVersion              3.0

What version of PowerShell are you running on Windows. I still see the Parent property there. The Parent property is a code property added by PowerShell, I believe it was in 6 so it won't be present in Windows PowerShell (powershell.exe v5.1).

You appear to be referring to the property which is always available.
Get-Process | Get-Member | Where-Object { $_.Name -match "parent" } | Format-List

TypeName   : System.Diagnostics.Process
Name       : Parent
MemberType : CodeProperty
Definition : System.Object Parent{get=GetParentProcess;}

I'm referring to the instances. No PPID value is shown using my calculated property.
I do not use and do not have Windows.
 Looking into the code PowerShell is essentially looking at /proc/$pid/stat as per https://github.com/PowerShell/PowerShell/blob/9f722ef95072fddd975b1b7b584bf11b2e857a69/src/System.Management.Automation/CoreCLR/CorePsPlatform.cs#L882-L905. The 4th column is the parent process id. Does the following work or does it error for you?
Function Get-ParentProcess {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory, ValueFromPipeline)]
        [System.Diagnostics.Process[]]
        $Process
    )

    process {
        foreach ($proc in $Process) {
            $stat = Get-Content -LiteralPath "/proc/$($proc.Id)/stat" -Raw
            $ppid = $stat.Split(' ')[3]

            Write-Verbose -Message "PPID is $ppid"
            Get-Process -Id $ppid
        }
    }
}

Get-Process ... | Get-ParentProcess -Verbose

If this fails for some reason it will at least indicate what the problem was unlike the Parent property which just silently ignores any exceptions.

Function Get-ParentProcess {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory, ValueFromPipeline)]
        [System.Diagnostics.Process[]]
        $Process
    )

    process {
        foreach ($proc in $Process) {
            $stat = Get-Content -LiteralPath "/proc/$($proc.Id)/stat" -Raw
            $ppid = $stat.Split(' ')[3]

            Write-Verbose -Message "PPID is $ppid"
            Get-Process -Id $ppid
        }
    }
}

Get-Process -Id 105455 | Get-ParentProcess -Verbose

VERBOSE: PPID is S
Get-Process:
Line |
  15 |              Get-Process -Id $ppid
     |                              ~~~~~
     | Cannot bind parameter 'Id'. Cannot convert value "S" to type "System.Int32". Error: "Input string was not in a correct format."

After some digging, it appears the bug is splitting on space.
Most of the affected processes contain spaces in their apparent names.
var parts = stat.Split(' ', 5);

Get-Process |
  Where-Object { $null -eq $_.Parent.Id } |
  ForEach-Object {
     Get-Content -LiteralPath "/proc/$($_.Id)/stat" -Raw
  } |
  ForEach-Object {
     $_.Substring(0,75)
  }

3177 (Isolated Web Co) S 2937 1284 1284 0 -1 4194560 172529 0 924 0 3529 12
82263 (Isolated Web Co) S 82104 1284 1284 0 -1 4194560 9421304 0 84997387 0
82450 (Isolated Web Co) S 82104 1284 1284 0 -1 4194560 187535 0 2112 0 3049
83835 (Isolated Web Co) S 2617 1284 1284 0 -1 4194560 259935 0 8260 0 23795
105212 (Isolated Web Co) S 82104 1284 1284 0 -1 4194560 21147 0 0 0 128 43
141300 (Isolated Web Co) S 3229 1284 1284 0 -1 4194560 25914 0 2791 0 771 3
141355 (Isolated Web Co) S 3229 1284 1284 0 -1 4194560 9323 0 0 0 29 19 0 0
185104 (Isolated Web Co) S<PHONE_NUMBER> 1284 0 -1 4194560 255626 0 10621 0 1
201038 (Isolated Web Co) S<PHONE_NUMBER> 1284 0 -1 4194560 56720 0 173 0 493
201127 (Isolated Web Co) S<PHONE_NUMBER> 1284 0 -1 4194560 55610 0 151 0 392
201174 (Isolated Web Co) S<PHONE_NUMBER> 1284 0 -1 4194560 70349 0 77 0 441 9
203995 (Isolated Web Co) S<PHONE_NUMBER> 1284 0 -1 4194560 38886 0 35 0 146 4
204042 (Isolated Web Co) S<PHONE_NUMBER> 1284 0 -1 4194560 35830 0 75 0 362 1
204434 (Isolated Web Co) S<PHONE_NUMBER> 1284 0 -1 4194560 15414 0 81 0 66 25
205640 (Isolated Web Co) S<PHONE_NUMBER> 1284 0 -1 4194560 39121 0 29 0 148 3
209752 (Isolated Web Co) S 2937 1284 1284 0 -1 4194560 62907 0 158 0 336 50
209819 (Isolated Web Co) S 2937 1284 1284 0 -1 4194560 17616 0 385 0 97 23
2 (kthreadd) S 0 0 0 0 -1 2129984 0 0 0 0 0 22 0 0 20 0 1 0 22 0 0 18446744
2714 (Privileged Cont) S 2617 1284 1284 0 -1 4194560 41170 0 6 0 294 157 0
3034 (Privileged Cont) S 2937 1284 1284 0 -1 4194560 6521 0 0 0 56 36 0 0 2
3324 (Privileged Cont) S 3229 1284 1284 0 -1 4194560 13953 0 4 0 119 77 0 0
82201 (Privileged Cont) S 82104 1284 1284 0 -1 4194560 14005 0 0 0 207 184
185046 (Privileged Cont) S<PHONE_NUMBER> 1284 0 -1 4194560 7142 0 0 0 32 19 0
200891 (Privileged Cont) S<PHONE_NUMBER> 1284 0 -1 4194560 9790 0 0 0 47 24 0
2930 (RDD Process) S 2617 1284 1284 0 -1 4194560 3913 0 1 0 18 16 0 0 20 0
82555 (RDD Process) S 82104 1284 1284 0 -1 4194560 9689 0 8690 0 681 581 0
2678 (Socket Process) S 2617 1284 1284 0 -1 4194560 3623 0 1 0 16 19 0 0 20
2999 (Socket Process) S 2937 1284 1284 0 -1 4194560 3639 0 0 0 39 26 0 0 20
3292 (Socket Process) S 3229 1284 1284 0 -1 4194560 3596 0 0 0 17 18 0 0 20
82167 (Socket Process) S 82104 1284 1284 0 -1 4194560 3601 0 0 0 9 12 0 0 2
184971 (Socket Process) S<PHONE_NUMBER> 1284 0 -1 4194560 3602 0 0 0 6 4 0 0
200858 (Socket Process) S<PHONE_NUMBER> 1284 0 -1 4194560 3604 0 0 0 6 3 0 0
1 (systemd) S 0 1 1 0 -1 4194560 32765 74580425 169 404020<PHONE_NUMBER>895
848 (UVM deferred release queue) S 2 0 0 0 -1 2129984 0 0 0 0 0 0 0 0 20 0
847 (UVM global queue) S 2 0 0 0 -1 2129984 0 0 0 0 0 0 0 0 20 0 1 0 726 0
849 (UVM Tools Event Queue) S 2 0 0 0 -1 2129984 0 0 0 0 0 0 0 0 20 0 1 0 7
105455 (Web Content) S 82104 1284 1284 0 -1 4194560 5027 0 0 0 20 16 0 0 20
105458 (Web Content) S 82104 1284 1284 0 -1 4194560 5033 0 0 0 19 16 0 0 20
128011 (Web Content) S<PHONE_NUMBER> 1284 0 -1 4194304 7705 0 0 0 49 21 0 0 2
144932 (Web Content) S 3229 1284 1284 0 -1 4194560 4852 0 0 0 15 9 0 0 20 0
158355 (Web Content) S 82104 1284 1284 0 -1 4194560 5026 0 0 0 13 11 0 0 20
174293 (Web Content) S 3229 1284 1284 0 -1 4194560 4840 0 0 0 7 10 0 0 20 0
174296 (Web Content) S 3229 1284 1284 0 -1 4194560 4838 0 0 0 11 6 0 0 20 0
185323 (Web Content) S<PHONE_NUMBER> 1284 0 -1 4194560 4757 0 0 0 11 8 0 0 20
185407 (Web Content) S<PHONE_NUMBER> 1284 0 -1 4194560 4754 0 0 0 11 7 0 0 20
185556 (Web Content) S<PHONE_NUMBER> 1284 0 -1 4194560 4757 0 0 0 9 8 0 0 20
192103 (Web Content) S 2617 1284 1284 0 -1 4194560 4782 0 0 0 8 5 0 0 20 0
199060 (Web Content) S 2617 1284 1284 0 -1 4194560 4778 0 0 0 8 4 0 0 20 0
200119 (Web Content) S 2617 1284 1284 0 -1 4194560 4775 0 0 0 6 5 0 0 20 0
208265 (Web Content) S<PHONE_NUMBER> 1284 0 -1 4194560 4905 0 0 0 10 5 0 0 20
208700 (Web Content) S<PHONE_NUMBER> 1284 0 -1 4194560 4917 0 0 0 8 6 0 0 20
209208 (Web Content) S<PHONE_NUMBER> 1284 0 -1 4194560 4896 0 0 0 8 5 0 0 20
209987 (Web Content) S 2937 1284 1284 0 -1 4194560 4683 0 0 0 7 3 0 0 20 0
210030 (Web Content) S 2937 1284 1284 0 -1 4194560 4689 0 0 0 6 4 0 0 20 0
210152 (Web Content) S 2937 1284 1284 0 -1 4194560 4611 0 0 0 5 1 0 0 20 0

A minority of processes appear to spawn directly from process 0. And I am picking those up as $nulls.
I assume these child processes should have a parent object in their output so I could $_.Parent.Id.
Get-Process |
  Where-Object { $null -eq $_.Parent.Id } |
  ForEach-Object {
     Get-Content -LiteralPath "/proc/$($_.Id)/stat" -Raw
  } |
  ForEach-Object {
     $_.Substring(0,75)
  } |
  Select-String '\(\w+\)'

2 (kthreadd) S 0 0 0 0 -1 2129984 0 0 0 0 0 22 0 0 20 0 1 0 22 0 0 18446744
1 (systemd) S 0 1 1 0 -1 4194560 32765 74619170 169 404034<PHONE_NUMBER>207

I don't know C# or the /proc/$($_.Id)/stat format well.
But you need something that properly captures the second column.
Then you can access the fourth column correctly.
This might also affect macOS.
Get-Process |
  Where-Object { $null -eq $_.Parent.Id } |
  ForEach-Object {
     Get-Content -LiteralPath "/proc/$($_.Id)/stat" -Raw
  } |
  ForEach-Object {
     ($_.Substring(0,75)) -match '^(\d+) (\(.+\)) (\w) (\d+)' | Out-Null
     $matches[4]
  } |
  Select-Object -First 5

2937
82104
82104
2617
82104

Mike

After some digging, it appears the bug is splitting on space.

That does seem to be the case, the docs for /proc/[pid]/stat can be found at https://man7.org/linux/man-pages/man5/proc.5.html with the 2nd column stating

The filename of the executable, in parentheses. Strings longer than TASK_COMM_LEN (16) characters (including the terminating null byte) are silently truncated.  This is visible whether or not the executable is swapped out.

Looking into fs/proc/array.c I can see https://github.com/torvalds/linux/blob/a111daf0c53ae91e71fd2bfe7497862d14132e3e/fs/proc/array.c#L567-L572 which indicates it's a simple value wrapped in (...) limited to 64 characters (not 16). I think you are right though and the logic in PowerShell needs to be better than to split by space. We could try and beef up the matching with regex but there's no way to guarantee the 2nd column record doesn't contain ( or ) itself like 2 (testing (123) name) S 0 0 0 ... making it quite difficult to parse properly. What might be a better method is to read /proc/[pid/status and find the line starting with PPid: \d+
Get-Content /proc/$pid/status | Select-String -Pattern 'PPid:\s+\d+'

This is helpful because each line is a new record and the labels clearly indicate what the value is for. The label also does not appear to be localized so this should be fine across languages https://github.com/torvalds/linux/blob/a111daf0c53ae91e71fd2bfe7497862d14132e3e/fs/proc/array.c#L183.

This might also affect macOS.

macOS uses a different method to get the ppid, there's a system call that seems to be available, or at least accessible through libpsl-native as per https://github.com/PowerShell/PowerShell/blob/9f722ef95072fddd975b1b7b584bf11b2e857a69/src/System.Management.Automation/CoreCLR/CorePsPlatform.cs#L441-L444

Dup #12908 (PR #12925)

I've created an alternative solution to #12925, hopefully one of the 2 can move forward https://github.com/PowerShell/PowerShell/pull/17545.

Thanks for taking a look at this.
I'm sorry I didn't see the duplicate issue earlier. The connection was not obvious to me until after your comments.
Hopefully, one of the patches will be accepted.
Mike


chore: add NPM badge

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

[ ] The commit message follows Conventional Commits
[ ] Tests for the changes have been added (for bug fixes / features)
[ ] Docs have been added / updated (for bug fixes / features)

PR Type
What kind of change does this PR introduce?

[ ] Bugfix
[ ] Feature
[ ] Refactoring (no functional changes, no api changes)
[ ] Other... Please describe:

What is the current behavior?

Closes #
What is the new behavior?
Does this PR introduce a breaking change?

[ ] Yes
[ ] No

Other information

:tada: This pull request is included in version<EMAIL_ADDRESS>:tada:
The release is available on GitHub release


Update README.md

Updates cloud-init data generation link text

This change is

Reviewed 1 of 1 files at r1.
Review status: all files reviewed at latest revision, all discussions resolved.

Comments from Reviewable


Define "SIM" to fix sim build errors in user_proj_example

ifdef SIM was added to caravel.v but these Makefiles don't define SIM at the moment.

Closing this as I see it's now resolved in develop


Allow VSCode to show parsing output same as pest.rs website.

Disclosure, I'm senior engineer but new to Rust (using Pest.rs to learn Rust). Currently I am porting my logic from Peggy.js into Rust so I run the code with a CLI or WASM without the need for a Node runtime. I'm no doubt doing things incorrectly being new to Rust, but here is my process. As far as I can tell, the VSCode extension just validate, highlight, and help with the writing syntax. Since I'm new to Rust, I currently I find myself using the Pest.rs website to quickly create complex grammars and check the parse tree, then write the code in Rust to do what i need on the AST.
Or is this just the wrong approach entirely? Is there a way to do use Rust Analyzer and the compiler to do what I'm doing on the website?
Feature Request:
Assuming I'm not overlooking the obvious, It would be great if I could just use VSCode to define some my grammar, my input string, and get the same parse tree output on pest.rs inside of VSCode. Perhaps its in the output tab in the console, or perhaps its like markdown previews work and I can split screen with the editor on one side, and preview on the other. Parsing errors of course would still do the same thing it does now.
PS, I love the Pest.rs parser and website. Very well done. It happened to be the perfect excuse to learn Rust and starting to replace Node with better tools.

This was on my personal radar but didn't have a specific issue. I think it can be done, just not sure what the best UI for it is yet

Cool, thanks for the reply. The UI is definitely a bit of a challenge inside VSCode.


Open SMB shared files with backup intent

Summary of the new feature / enhancement
As a server administrator, I want to be able to open SMB file share (\server\shared_folder) files and bypass NTFS permission checks. This is because administrators can override NTFS permissions so there should be a way to skip the check altogether.
In this scenario, we have two computers, a file share server (called server) and another computer called client. I would like to achieve the same output on the client as is possible on the server.
On the server
Import-Module NTFSSecurity # other modules exist that provide this functionality such as EnableAllTokenPrivs  and PoshPrivilege
PS D:\> hostname
server
PS D:\> Get-ChildItem d:\secret
Get-ChildItem : Access to the path 'D:\secret' is denied.
At line:1 char:1
+ Get-ChildItem d:\secret
+ ~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (D:\secret:String) [Get-ChildItem], UnauthorizedAccessException
    + FullyQualifiedErrorId : DirUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand

PS D:\> Enable-Privilege
PS D:\> Get-ChildItem d:\secret

    Directory: D:\secret

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        23/11/2023     22:40                secret

On the client
Import-Module NTFSSecurity
PS D:\> hostname
client
PS D:\> Get-ChildItem \\server\d$\secret
Get-ChildItem : Access to the path '\\server\d$\secret' is denied.
At line:1 char:1
+ Get-ChildItem \\server\d$\secret
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (\\server\d$\secret:String) [Get-ChildItem], UnauthorizedAcce
   ssException
    + FullyQualifiedErrorId : DirUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand

PS D:\> Enable-Privileges
PS D:\> Get-ChildItem \\server\d$\secret
Get-ChildItem : Access to the path '\\server\d$\secret' is denied.
At line:1 char:1
+ Get-ChildItem \\server\d$\secret
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (\\server\d$\secret:String) [Get-ChildItem], UnauthorizedAcce
   ssException
    + FullyQualifiedErrorId : DirUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand

Proposed technical implementation details (optional)
If a file request over SMB has the FILE_OPEN_FOR_BACKUP_INTENT https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-smb2/e8fb45c1-a03d-44ca-b7ae-47385cfd7997 flag set, then an administrator can open NTFS files where the administrator is not in the ACL (as long as the administrator is not explicitly denied access). The SeBackupPrivilege would need to be enabled for this to work.
For reference, see robocopy's /B switch https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/robocopy
smbclient's backup command https://www.samba.org/samba/docs/current/man-html/smbclient.1.html

While it would be super handy, I do not think it appropriate to do this across the board and would likely require changes within the DotNet to support it.  PowerShell is also used for non-administrative purposes and regularly bypassing AWindows built-in security layers would normalize sensitive privilege use in logs.
That said, years ago I wrote a generic wrapper to make any executable enable the necessarily privileges and open the files with backup intent that can be used with PowerShell.  Check it out here if interested:
WinPrivCmd.exe /BypassFileSecurity pwsh.exe

@NoMoreFood If I understand correctly from my testing, your tool enables the Backup privilege. That's not what I'm looking for.
I'm looking to set the FILE_OPEN_FOR_BACKUP_INTENT detailed in the following link
https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-smb2/e8fb45c1-a03d-44ca-b7ae-47385cfd7997
Having the backup privilege enables you to bypass the NTFS security layer on the local system. I'm trying to achieve this on a remote system via its shared drives.

@smolattack It does both.  It intercept all file open commands and adds the intent flag. Here is the source code if interested:
https://github.com/NoMoreFood/WinPriv/blob/e341acf5be7c80fdf583fcf5d50f6dd25f4c9e51/WinPrivLibrary/WinPrivLibraryDetours.cpp#L173


docs: fix combobox.mdx

Closed as a duplicate of https://github.com/shadcn-ui/ui/pull/4330. Thank you.


Rename Mouse Filter Pass to Bubble for clarity

related (closes?) https://github.com/godotengine/godot/issues/55432
related https://github.com/godotengine/godot-proposals/issues/3613
related https://github.com/godotengine/godot-proposals/issues/1775
related https://github.com/godotengine/godot-proposals/issues/7167

MOUSE_FILTER_PASS is replaced by MOUSE_FILTER_BUBBLE.
The functionality is the same and this should not break compatibility.
In the inspector everything that was set to Pass should now show as Bubble.
The enum constant MOUSE_FILTER_PASS has the same value but is deprecated.
Lots of people get confused by MOUSE_FILTER_PASS, thinking it means that events should be passed to Controls behind it, not to its parent Controls. The new name should make it clear it is not intended to do that.

I'm not necessarily against this but is MOUSE_FILTER_BUBBLE really a better name for it? I don't personally find it to be clearer or more explicit than MOUSE_FILTER_PASS for most users, although from a web developer's perspective the name would make some sense.

I'm not necessarily against this but is MOUSE_FILTER_BUBBLE really a better name for it? I don't personally find it to be clearer or more explicit than MOUSE_FILTER_PASS for most users, although from a web developer's perspective the name would make some sense.

Having done web development, I think the name is a lot clearer per its description, and I think it makes sense to follow popular convention since many of these platforms can overlap.

I'm a web developer myself and I'm more-so concerned from the perspective of users that come to engine to... make games. I agree on the sentiment to use some form of the convention, it's just...
The improved description of this PR is great, and I feel like it would reduce a lot of confusion about this, just by itself. That, combined with a link mentioning event bubbling, and there may be less need to deprecate the current name.

is MOUSE_FILTER_BUBBLE really a better name for it?

I was also thinking about MOUSE_FILTER_BUBBLE_UP or MOUSE_FILTER_PROPAGATE_UP.
Here are some of the suggested alternatives I didn't use:

MOUSE_FILTER_HANDLE_WITH_PARENT is pretty long and needs MOUSE_FILTER_STOP to also be renamed.
EVENT_PROPAGATION_PARENT needs mouse filters to be renamed entirely. (Which makes sense, but I wanted to deprecate as little as needed)
MOUSE_FILTER_PARENT isn't very clear.

I'm not sure if there is another term for event bubbling, but if there is a better name let me know.
For non-web development, I know Unity also uses Event Bubbling.

That, combined with a link mentioning event bubbling

I could add a link to the Wikipedia page. It's focused on web development but I think most resources about event bubbling are.
https://en.wikipedia.org/wiki/Event_bubbling

and there may be less need to deprecate the current name.

I think that when users see 'Pass', they may assume they know what it does without checking the docs, so I feel it is still important to change the name.

I understand the want for not deprecating the current name, just putting out my 2 cents.
In my opinion the name of the various data members and functions are arguably more important than its description.  Self-documenting code and all that. The name pass to me suggests some kind of pass(through) functionality which is where the confusion stems from. Even with the documentation, when I read the code there will always be that hiccup.
Whether it's game of web development the concepts are the same, and I think you'd be doing all developers a favor by reinforcing that knowledge every time they read the code.

I don't think it's acceptable to rename this enum as it's reasonably correct, and renaming it is a major breaking change that'll break any code using this value, the documentation should be changed for clarity instead, we're at a point in 4.x where breaking this level of compatibility IMO is completely unacceptable for anything that isn't a broken behavior
Adding an alias for the name would be reasonably acceptable with the old name deprecated, but I still think that's too drastic a change, there's nothing wrong with the current name as such, so better and clearer documentation is the way to go, especially as "Bubble" isn't any more clear without insight than "Pass" is IMO, either name requires you to know what's meant

Could a proposal be made for this to gather some further feedback?

A proposal sounds like the way forward indeed, keep in mind possible confusion from 3.x though as well, this PR should also add a conversion from 3.x to rename the enum used to help with this

I figured the 5 issues I linked would be enough, especially https://github.com/godotengine/godot-proposals/issues/3613 which has ongoing discussion of changing the name.
If I opened another proposal it feels like it would be a duplicate.

While mouse_filter_bubble_up would probably be a better name for the current behavior, a name change would not fix any of the issues it has.
Users want a mouse_filter_pass, not a mouse_filter_bubble_up behavior.

The current behavior works as intended, and I think that people mostly want it to be changed because the name causes misleading expectations.
Changing it to have pass-through behavior would be a breaking change, so its not going to happen. Adding a separate pass-through mouse filter may be possible, but then it is even more important that this current behavior is renamed.

As someone not coming from web-devalopment buble means really nothing to me. On the other end pass means immediatly something to me and I know the pass means it is passed to the parent for it to handle but sometime I think the other way around I need to do something ie let it pass through the node to node behind and I'm like this seems so basic as this is something a lot could want that their should be one that does it. Since it can't be the other two it should be this one. Sometime I'm even remembering it pass to the parent and I'm twisting like maybe then the parent will check if the nex child wants to handle it. Obviously it does not work like this and I'm always feeling dumb. But what I wanted to say is I think the problem stems more from the missing functionality then the miss-leading name. As I think most people using the engine don't know about event bubbling I don't feel it would help them as they would still assume b elimination it should be the last one they don't understand. Obviously they might not complain about it as much but they might just start complaining that their is none doing what they want which in the end was what they wanted from the start. Just adding a PASSTHROUGH would make clear PASS is not PASSTHROUGH.
On another not I feel like MOUSE_FILTER_PROPAGATE_UP is way clearer then current and MOUSE_FILTER_BUBBLE

Updated to use Propagate Up instead of Bubble.
I thought conversions were only for things that need to be changed, but I guess not. I added a conversion from 3 to 4 in editor\renames_map_3_to_4.cpp, let me know if I didn't do it correctly.

I'll still recommend to open a detailed proposal about this because it is unlikely this will be accepted due to lack of consensus.

I'd just rename the inspector hint from Pass to Pass (Propagate Up), so we don't have to break compatibility.

This PR doesn't break compat, but that is a good idea.

opened a new PR for it https://github.com/godotengine/godot/pull/93363


seqlock: Enforce C11 Atomics

Pull Request Summary
This pull request aims to enhance the existing seqlock implementation by making it more portable, improving code readability, and adhering to coding standards. The changes involve modifications to both the Makefile and the seqlock code itself.
Changes Made
Makefile Enhancements

Added compilation flags to improve code quality and compliance:

-Wextra: This flag enables additional warnings beyond -Wall, helping catch potential issues in the code.
-pedantic: Enforced strict adherence to the C standard, promoting standardized and portable code.

Code Improvements

Transitioned to using <stdatomic.h> for atomic operations, which enhances synchronization and makes the code more standardized.
Employed atomic_thread_fence for memory barriers, enhancing portability across different architectures.
Replaced architecture-dependent inline assembly instructions with standardized atomic operations. This improves cross-architecture compatibility and maintainability.
Revised the ATOMIC_COPY macro to utilize atomic load and store operations for atomic data copying.

Data Types and Typedefs

Redefined the seqlock_t type using _Atomic(uint32_t) to ensure atomic access to the variable, further improving synchronization.

Motivation
These enhancements were motivated by the goal of creating a more reliable and maintainable seqlock implementation. The changes aim to address portability concerns across various architectures while improving the overall readability and standardization of the codebase.
Request for Review
Kindly review the changes made in this pull request. Your feedback is highly valuable, and any suggestions for further improvements are welcome.
Thank you for considering this pull request.
Best regards,
scc
Feel free to customize the context further to suit the specifics of your project and the details you'd like to emphasize.

Remove seqlock/tests, which was generated.

I'm sorry for that commit. I fixed it.


Dataset restricted data

Text to show why the dataset has restricted data
Add to the side nav as a red tag. the modal pops up and lets the user know what columns are restricted and links to the associated term for more information.
The admin has to manually add the restricted columns to the dataset on the edit page. It uses type ahead.js
Wait modal for dataset download
The download for tableau in datasets takes a while. Tableau server gets the request and has to build the download before it can send it back to the user. This looks like nothing is happening to the user. Add a modal that at least tells the user that something is happening.

Closing, since this was never merged and hasn't been touched in months.


Domain-scoped clients are not usable initially

Domain scoped clients should default to the default provider, which is always usable (no-ops) but doesn't not emit READY events.
This seems to be a regression around our new stateless provider functionality implemented in https://github.com/open-feature/go-sdk/pull/299
Background
          Reported in Slack: https://cloud-native.slack.com/archives/C06HAN9KP9Q/p1732715248777879?thread_ts=1732656743.817279&cid=C06HAN9KP9Q

From Roman:
It has a breaking change from client usage. Before client := of.NewClient("app")  fallbacks to default provider, but now it says that provider not yet initialized.

Originally posted by @beeme1mr in https://github.com/open-feature/go-sdk/pull/296#pullrequestreview-2465098493

Great work @warber !
Could we close this?  Github haven't done it automatically

Resolved by https://github.com/open-feature/go-sdk/pull/309


DOCS-#2944: Document modin.engines.ray

Signed-off-by: Igoshev, Yaroslav<EMAIL_ADDRESS>
What do these changes do?

@YarShev @vnlitvinov the branch was rebased on the latest master.

@kvu35 Could you please take a look on cuDF part of modin.engines.ray to make sure all are correct?

Rebased on master.

@devin-petersohn , conflicts are resolved but CI is red because of #3089.

@devin-petersohn , friendly reminder.


Fix bugs with token creation flow in plan wizard, form validation on general step, and polling in token modal

Fixes #930
When the user is creating a plan and there are no available tokens for the selected cluster, they can open the add token modal right from the token select dropdown and then have that token selected once it is finished being added/loaded. My previous logic for this was flawed: the token name from the modal was immediately set in Formik state on submitting the modal, but the token doesn't immediately load into tokenList in redux so we'd end up in a state where the selected value is not one of the available options. Also, if somehow the created token does not match the selected cluster, we'd be stuck with that "loading" message indefinitely.
This PR fixes that issue by keeping the name of the token being created in state and waiting for a matching token to load before trying to set the Formik value. If the new token loads but does not match the selected cluster, it gives up and just hides the loading message. I also made that message a little nicer-looking by rendering it inside the placeholder text of the Select component, with a spinner and "Adding token..." instead of "Loading...":

See the fixed flow in action:

This PR also fixes the behavior of the AddEditTokenModal around polling. Previously when it was opened it would stop polling, but never resume it on close. We want polling to be paused while the modal is open and resumed on close, but when it is open inside the wizard we don't want to resume polling on close because the wizard also keeps polling paused. (Modal-in-a-modal is a fun use case 😄 ) So, this PR adds a prop preventPollingWhileOpen that defaults to true, and has a false value when mounted in the wizard. As part of this, I just tied that polling pause/resume to the component being mounted and unmounted, so instead of mounting it all the time and using the isOpen prop to hide/show the modal, I only mount the modal when isOpen would be true. (this also results in less cruft in the <body> caused by the z-index hack; that wrapper will only be present when the modal is open instead of all the time).
Lastly, there was an issue where selecting a source or target cluster would cause the "Required" validation message to appear even though there is a selected value, and it would only go away when some other field was changed. It seems like this was caused by the setFieldTouched method being called on change instead of on blur, so I fixed that. I also cleaned up a few things around TypeScript types for SimpleSelect, to enable non-string values in the OptionWithValue type (yay, generics!)

This will invalidate https://github.com/konveyor/mig-ui/pull/939, so if we merge it before that we can close #939. If it needs time for review though, #939 is worth merging to remove that warning in the meantime, and I'll rebase.

Seeing this break the next button validation from the general step in the wizard. The Next button is disabled with no apparent validation errors?

Crap, I think I know what I did there. Sorry, I didn't have a token for my target cluster so I faked that data to test it, I guess I didn't fake it well 😆

Opened https://github.com/konveyor/mig-ui/issues/941 to track the issues we started seeing here


Exclude the vim wsdl mapping registry from test code coverage

The vim wsdl mapping registry translated to ruby will never be covered.
Their library's wsdl should be tested by them, not us.
Having it in the coverage_helper provides us no benefit since we won't
be adding code coverage in our test suite for this.
Additionally, it's dropping our coverage as reported by coveralls:
Coverage File Lines Relevant Covered Missed Hits/Line
0.02 VMwareWebService/wsdl/vimws25MappingRegistry.rb 81435 5863 1 5862 1.0

cc @matthewd @bdunne @Fryguy

cool :+1:

Revised this PR to exclude the wsdl41 directory as @Fryguy is removing the old wsdl directory that coveralls is currently reporting via the coverage helper.

@jrafanie Why did coverage drop significantly in this PR?

@chessbyte coveralls as we have it configured has lots of issues including the cross suite files being reported twice (so our total coverage is not accurate since some files are duplicated in the results):

I suspect that random test order for each test suite can cause some fluctuations in the code paths through our suites where we use global state such as global variables, cached class methods, database, etc.
I rebased following #4613's merge so we'll see what it does now.
We'd have to really dig into it but as of now, we should probably not fail PRs based on the coverage report... we should look at coverage results and see why they change and fix any bugs in our coverall/test suite configuration or in the PR changes itself.  @Fryguy bumped this value in coveralls yesterday since half of the PRs fail for coverage changes that are seemingly unrelated.

@chessbyte I really don't understand coveralls at all in this case, all of the "coverage changed" values show increased coverage (up arrows), the only other thing that's interesting is the number of files in this report 2220, was 2222 in the Pull request base - master #15204.  Maybe there number of files detected each time is sporadically changing with some builds.  Or in the case of this PR, I'm excluding anything in VMwareWebService/wsdl41 from being required in the coverage_helper so perhaps some of those files had more than 50% coverage and no longer loading them dropped our total coverage.  I really don't know.

including the cross suite files being reported twice

To clarify this...We think that the path to a file is reported based on pwd of the test.  For example, vmdb suite ends up reporting "gems/pending/util/miq-password", but if you are running the gems_pending suite, since we cd into the directory, it reports "util/miq-password".  Coveralls doesn't know they are the same file and double-reports.  cc @jrafanie @bdunne @matthewd

:+1: @Fryguy, thanks for clarifying


Bug report: td-sidenav-content is not resized properly

Bug Report
Hi guys,
The 'td-sidenav-content' used in 'Manage list Layout' is often not resized correctly. This issue can be reproduced also on the live
https://teradata.github.io/covalent-quickstart/users demo:

This can be fixed in browser simply by reapplying the 'display:flex' of the 'mat-toolbar' class. It seems like the flex is not applying under some circumstances when navigating from one component to another.
Which version of Angular and Material, and which browser and OS does this issue affect?
Latest Chrome + Opera (haven't tried FF)
Did this work in previous versions of Angular / Material?
Yes, this actually worked before I upgraded to latest version of both Angular & Material.
Ps: Thank you for doing awesome job on this project!

Huh, this is weird. It might be a problem with the animations in 4.2.0.. gonna start debugging and see whats happening.
Thanks for the report! 😄

I think I reported this a couple of weeks ago in gitter, was a weird bug, and it continues to be. I have the same issue with the latest releases on different projects 😭

I think a new issue like is arose with the latest version that might be related to this.
In admin layout the back button in md-toolbar is supposed to be visible when screen is smaller than gt-sm, but if the text in toolbar is assigned after the view was initialized (e.g. when title is changed by subscription) the button stays visible. For now I've solved it with
tdMediaToggle="gt-sm" [mediaStyles]="{display: 'none'}"
But its probably not ideal.

I still havent been able to replicate it, not even in the quickstart demo 😞 .. maybe im missing something?

What about if you try these steps:

Go to https://teradata.github.io/covalent-quickstart/
Go to Menu -> Manage users
Click '+' button in the bottom right corner
Click 'CANCEL' button in the user form

After clicking cancel, you should be redirectet back to users page which has the issue. I've been able to reproduce it like this on multiple PC across different browsers so I don't think its related to my environment.

Those are the exact same steps i've been doing without any luck 😞 ..
Tried it in:

Chrome Version 59.0.3071.115 (64 bit)
Firefox 54.0.1 (64-bit)
Safari

Is this an intermittent bug? or does it always happen for you?

Thank you for the effort!
Yeah, this happens consistently. I have exactly the same version of Chrome as you do. See here:

Kind of strange you can't reproduce it on the same site with the same browser. What else could be different? Is there some 'hidden' loggin on the sample demo site? What about if you try it in an anonymous window?

Yeah, gonna keep trying diff screen sizes and stuff like that to see if i can replicate it.

So, I just upgraded to latest version of Angular (4.3.2) and the issue was resolved :-)

Ah cool cool! still havent been able to figure out what the problem is haha but atleast that solves it

Closing since there hasnt been any issues with this anymore

the problem still for me with angular 5
more over when open the demo for the quickstart it's there !!!!


CMake: Check for known bad configurations with LLVM Flang

Some features either don't compile or don't work correctly with LLVM Flang before version 17.
This PR tries to help users to avoid these known-bad configurations by emitting a message and adapting the corresponding flags.
It's still unclear if both of these known-bad configurations will actually be fixed in LLVM Flang 17 or if one of them is actually an issue that is platform-dependent (i.e., only Windows or MinGW). In the latter case, the conditions could still be adapted in the future.
The flags need to be adapted early on. At least, before system_check.cmake is included via system.cmake. That required to move the check for the Fortran compiler to earlier in the configuration process.

Updated the PR and rebased on a current head.
Building with AVX512 still leads to failing tests with LLVM Flang 17 on Windows.

Any update with flang-18.1?

All tests pass with flang-18

avx512 too ?

avx512 too ?

I don't know, I haven't passed NO_AVX512 and It builds (after applying #4616) and all tests pass.

I see - actually passing the tests on an avx512 cpu used to be the problem with recent llvm, but I will probably not get to recheck this before monday

Try again after MSYS2 updated to LLVM 19.
If I understand correctly, there was a lot of activity around LLVM Flang in OpenBLAS recently. I don't know which were the findings around compatible versions on which platform.
Please, let me know if I got some of the conditions wrong.

My current understanding is that LLVM/flang works on non-Windows platforms since version 17, and on Windows since 19 (bar some small issues that may be misunderstandings on my part, which I hope to resolve this week).

Do you recall what the situation was regarding OpenMP? I have a faint memory that something didn't yet work correctly with LLVM Flang 17 and LLVM libomp. (But it's very much possible, I'm remembering incorrectly.)

ISTR flang17 did not yet have the necessary omp_lib module (at least early on) and possibly implementation issues on the C side too - in any case it does not seem far-fetched to me to require a fairly recent version of a compiler that is officially still not fully stable.

in any case it does not seem far-fetched to me to require a fairly recent version of a compiler that is officially still not fully stable.

Sounds reasonable to me. 👍
With the proposed changes, CMake would disable AVX512 instructions with LLVM Flang before version 17 (on anything but Windows) or before version 19 (on Windows). OpenMP would be disabled for LLVM Flang before version 19 (on any operating system).
If I understand correctly, that more or less reflects what is actually supported when using that compiler.
Is the PR acceptable in this form?

I think the easiest here might be to just error on flang <19 (or require an explicit opt-in with a scary CMake variable). Otherwise this seems like a good idea to me.
I think there's also still some CMake issues with CMake's openmp+fortran detection on flang. For our current openblas builds, we have to use
:: https://discourse.cmake.org/t/how-to-find-openmp-with-clang-on-macos/8860
set "CMAKE_EXTRA=-DOpenMP_ROOT=%LIBRARY_LIB%"
:: not picked up by `find_package(OpenMP)` for some reason
set "CMAKE_EXTRA=-DOpenMP_Fortran_FLAGS=-fopenmp -DOpenMP_Fortran_LIB_NAMES=libomp"

I'm actually unsure right now if flang+openmp wasn't purely a Windows problem with flang18 , so excluding it for Linux and others would be a step backwards.
And given that the llvm team are planning to provide flang in their "official" Windows binary package only after the rename back from flang-new that seems to be scheduled for llvm20, maybe the Windows options including current CMake specials should simply be added to the documentation ?

OK.
So, should all changes to the build rules be removed from this PR? And given that MSYS2 updated to LLVM 19, should only the CI rules be adapted?

At least I think so - there should be no (more) need to fight outdated versions on Windows where they are&were not readily available, and similarly on Linux where llvm/flang matured a good bit earlier

Re-titled and dropped all changes but for the CI rules on MinGW.

Thank you

I think there's also still some CMake issues with CMake's openmp+fortran detection on flang.

@h-vetinari: Unrelated to OpenBLAS - but potentially interesting for you: @MehdiChinoune opened a merge request for upstream CMake to implement better built-in support of OpenMP with LLVM Flang:
https://gitlab.kitware.com/cmake/cmake/-/merge_requests/10052


Add Oracle Linux support

Add support for Oracle Linux

You should probably add it to the Readme.md as well.

You should probably add it to the Readme.md as well.

Done. Added Rocky Linux to README as well, while I was in there adding Oracle Linux. It seemed logical to group them together since they are both based on sources from Red Hat Enterprise Linux.


Table quality query

For the ML work in #1877 (and #1767) I implemented a QualityQuery for astropy tables.
In the long run this might best be suited inside the currently existing QualityQuery, but for a quick small PR I added this here.

+1 for switching everything to use numexpr.
I think it would also be easy to keep track of statistics here as well, and maybe we could just merge the two classes so the same configuration can be used event-wise or for a full table? It seems to me it would be easy to have it work in both cases.  E.g. just add a QualityQuery.query_table(table: astropy.table.Table) method.

just add a QualityQuery.query_table(table: astropy.table.Table) method.

with you on that one.  will implement both with numpexpr in a single class

Problems

We have some cuts like ["enough_charge", "lambda im: im.sum() > 50"], which numexpr cannot do (Docs):

>>> import numexpr
>>> import numpy as np
>>> image = np.arange(10)
>>> numexpr.evaluate('sum(image) > 10')
Traceback (most recent call last):
  File "/home/nbiederbeck/.local/conda/envs/cta-dev/lib/python3.8/site-packages/numexpr/necompiler.py", line 820, in evaluate
    compiled_ex = _numexpr_cache[numexpr_key]
KeyError: ('sum(image) > 10', (('optimization', 'aggressive'), ('truediv', False)), (('image', <class 'numpy.int64'>),))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/nbiederbeck/.local/conda/envs/cta-dev/lib/python3.8/site-packages/numexpr/necompiler.py", line 822, in evaluate
    compiled_ex = _numexpr_cache[numexpr_key] = NumExpr(ex, signature, **context)
  File "/home/nbiederbeck/.local/conda/envs/cta-dev/lib/python3.8/site-packages/numexpr/necompiler.py", line 623, in NumExpr
    return interpreter.NumExpr(inputsig.encode('ascii'),
RuntimeError: invalid program: reduction operations must occur last

Regarding the table-query and counting: having a single AND-query (x > 0) & (y > 0) is effectively n times faster than combining n evaluations (but we can't count anymore)

Also using numexpr one cannot use subscriptions (value.othervalue or value['othervalue']):

>>> import numexpr
>>> import numpy as np
>>> from astropy.table import Table
>>> hillas = Table({'intensity': np.arange(10)})
>>> numexpr.evaluate("hillas['intensity'] > 0")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/nbiederbeck/.local/conda/envs/cta-dev/lib/python3.8/site-packages/numexpr/necompiler.py", line 809, in evaluate
    _names_cache[expr_key] = getExprNames(ex, context)
  File "/home/nbiederbeck/.local/conda/envs/cta-dev/lib/python3.8/site-packages/numexpr/necompiler.py", line 696, in getExprNames
    ex = stringToExpression(text, {}, context)
  File "/home/nbiederbeck/.local/conda/envs/cta-dev/lib/python3.8/site-packages/numexpr/necompiler.py", line 289, in stringToExpression
    ex = eval(c, names)
  File "<expr>", line 1, in <module>
TypeError: 'VariableNode' object is not subscriptable

Suggested Solutions

support in a single class both numexpr and the current lambda-style for the Query and try to be smart when building the _selectors
or: keep it as is in this PR in two seperate classes (one lambda-style event-wise, one numexpr table-wise where the problems above would not occure) (would then still have to implement the counting for table selections)

We have some cuts like ["enough_charge", "lambda im: im.sum() > 50"], which

I haven't looked at this in detail to see what the exact problem is, but is it possible to re-write those cuts in a form that numexpr likes?  those are just examples, so we can easily change them as long as they achieve the same result.

@kosack Unfortunately we didn't find a way of expressing all queries we will need using numexpr due to this specific current limitation:
https://numexpr.readthedocs.io/projects/NumExpr3/en/latest/user_guide.html#supported-reduction-operations

Note: because of internal limitations, reduction operations must appear the last in the stack.

So for some internal reason, numexpr cannot do e.g.: image.sum() > 50

This was superseded by  #1943


DOC: Request for example that uses create_tool_calling_agent and antropic or ChatBedrock

Issue with current documentation:
No response
Idea or request for content:
Most of the examples use create_openai_functions_agent, which according to langchain's docs, is deprecated.
I couldn't find an any results for searching for create_tool_calling_agent in this repo yet.
Request: adapt one of the docs that uses create_openai_functions_agent to instead use the more generic create_tool_calling_agent, preferably with some non-OpenAI LLM (for diversity).

@hinthornw indeed, all of the results for create_openai_functions_agent are in the examples directory. Is there something I should do to recategorize this request? It sounds like the DOC issue prefix is meant to be more explicit to the docs subdir?

Do you have a specific request? We use Anthropic in many places in our docs. We don't use create_tool_calling_agent because langgraph is designed to replace most instances where you'd use that.

the base langgraph examples should all work with LangChain models that support bind_tools, which Anthropic should support: https://langchain-ai.github.io/langgraph/tutorials/introduction/


Running tests in a specific order

🚀 Feature Proposal
Allow define which files should run before others.
Motivation
Some times, we need to define a specific test to be ran before others. As we want to maintain different test cases in different files, would be essential define the order for some tests. This case implies on environment tests when we are using Jest with other frameworks, like Selenium, for example.
Example
I need to test an email client (browser-oriented). As Jest is a robust framework, we'll use it with Selenium for environment, unit and integration coverage. The following tests are focused only in environment coverage with Selenium. The tests are:

Add an account and make sure that it was added successfully;
Check messages in the account;
Perform other actions (Open an message, download file, perform filtering, etc);
Remove the account.

The idea is to define in the Jest settings an array containing the file names and the order of files that should be ran firstly. For example:
{
    runFirstly: [
        'A.test.js',
        'B.test.js',
        'C.test.js',
        'D.test.js'
}

So, the that would run firstly would be A.test.js, B.test.js, etc.
Once these tests are done, then jest could run other tests sequentially or not.
Pitch
Why does this feature belong in the Jest core platform?
Because we already have a feature that run sequentially --runInBandbut we don't have a way to define which files should run firstly.
I believe that the way that I described before, is goes beyond the --runInBand feature, allowing define files that must ran first and then, keep the tests according the default behavior of Jest.

We have a similar need ; we have a bug somewhere in our 600 spec files where changing the order of execution changes code coverage %.. but we have no way to narrow down the problem...

+1.

@zGrav @sandorvasas @lukeapage work around would be to have an index file, call it index.spec.js,  that dictates the order in which you'd execute:
require('./test1.js)
require('./test2.js)
require('./test3.js)

just make sure that there are no other related tests that match against the jest default testMatch unless o/w custom defined

@steventle
It's not good enough,   include all tests into one file, will break the http://jestjs.io/docs/en/configuration.html#bail-boolean option,  so the test process can only be stoped after all tests run.

@sapjax bail option for jest is only after each test suite. To the original ask of this feature proposal-it was to gain control of the order in which tests are run, not to break at the granularity of a breaking test within a test suite.
If you're looking for that type of feature, try Mocha for your test runner as they support that with their bail option & no additional set up.

Note, reading the original issue, I wouldn't want a field in the package.json - it would be workable / better than nothing but not ideal. Maybe what I really need is a --testTheTests option that does everything within jest.
For the original reporter I would define 1/2/3 jest setups and then run them one after another. wouldn't that work?

@lukeapage the idea is let the programmer define:

A procedural test which may respect a order of tests according a flow until some point;
The order of few tests as primary tests;
The order should respect what was defined in a array of filenames, and not alphabetically or numerally way;
That would respect a flow (when your tests need a flow);
After running these primary tests in the order that was defined, all other tests would run in any order asynchronously or even serially (using the --runInBand parameter);

Also, avoid writing huge tests.
I believe that using a index is not a good approach for many reasons, but, most focusing in maintenance, allowing me to test or perform small pieces of code as well.
Defining a 1/2/3 jest setups would work for small projects, but, for more complexes tests, I don't think that it would be a good approach.

I agree with DanZeuss about runFirstly: array to allow the programmer defines the order in which the tests will be done. I'm arranging everything to implement the DanZeuss solution. Do everybody agree?
As you can see, I'm new here. In order to begin the development I cloned the repository locally. Now I'm trying to execute Jest locally. Which way you develop? Any IDE or only and editor like notepad++ and command line?

Something else you could consider is to name your files something like:
testStuff1.set1.spec.js
testStuff2.set1.spec.js
// these next tests depend on stuff (like data in a database for example) from the first set
// so they have to run 'after' set1
testStuff3.set2.spec.js
testStuff4.set2.spec.js

then you can run your jest command (from your script in package.json or command line) as:
jest .set1.spec && jest .set2.spec

I got a hold on this by creating files of the functions then importing them in the main tests.spec.js describing all the tests in order and assigning them with the imported functions:
`
test.spec.js
import { signuptests } from './signup'
describe('Signup', signuptests)
`
`
signup.js
export const signuptests = () => {
it('Should have login elements', () => {});
it('Should Signup', () => {}});

}
`

I got a hold on this by creating files of the functions then importing them in the main tests.spec.js describing all the tests in order and assigning them with the imported functions:
`
test.spec.js
import { signuptests } from './signup'
describe('Signup', signuptests)
`
`
signup.js
export const signuptests = () => {
it('Should have login elements', () => {});
it('Should Signup', () => {}});
}
`

I got a hold on this by creating files of the functions then importing them in the main tests.spec.js describing all the tests in order and assigning them with the imported functions:
`test.spec.js
import { signuptests } from './signup'
describe('Signup', signuptests)`
`signup.js
export const signuptests = () => {
it('Should have login elements', () => {});
it('Should Signup', () => {}});
}`

I got a hold on this by creating files of the functions then importing them in the main tests.spec.js describing all the tests in order and assigning them with the imported functions:
test.spec.js

import { signuptests } from './signup'
describe('Signup', signuptests)

signup.js
export const signuptests = () => {
it('Should have login elements', () => {});

it('Should Signup', () => {}});
}

I got a hold on this by creating files of the functions then importing them in the main tests.spec.js describing all the tests in order and assigning them with the imported functions:
test.spec.js

import { signuptests } from './signup'
import { logintests } from './login'
describe('Signup', signuptests)
describe('Signup', signuptests)

signup.js
export const signuptests = () => {
it('Should have login elements', () => {});
it('Should Signup', () => {}});
}

login.js
export const logintests = () => {
it('Should Login', () => {}});
}

I got a hold on this by creating files of the functions then importing them in the main tests.spec.js describing all the tests in order and assigning them with the imported functions:
test.spec.js

import { signuptests } from './signup'
import { logintests } from './login'

describe('Signup', signuptests)
describe('Signup', signuptests)

signup.js

export const signuptests = () => {
     it('Should have login elements', () => {});
     it('Should Signup', () => {}});
}

login.js

export const logintests = () => {
    it('Should Login', () => {}});
}

I doubt we'll implement this, see https://github.com/facebook/jest/issues/4032#issuecomment-315210901

Well, that's too bad because it could definitely help, especially when testing crud operations to run create-read-update-read-delete in a specific order, and avoid lots of boilerplate from using beforeEach everywhere, and alike.

Well I am would very much appreciate such a feature as I am currently in desperate need of it, because I use Jest together with Puppeteer and it would help me lot. Was someone to come up at least with some reliable workaround ?

If you need tests to run in a specific order you can automated this yourself with a bash script to execute specific tests/patterns in a particular order. Jest likely won't provide this functionality because it can absolutely lead to situations where tests HAVE to be run in a particular order and it also makes it insanely hard to parallelize tests.
But you could, yourself, write a npm/bash script similar to so:
testInOrder: "jest path/to/test1.js && jest path/to/test2.js"

@palmerj3 unfortunately that prevents those becoming a single run for report & coverage purposes.

Other test frameworks I've used randomly order tests, and output the seed value on each run. You can then re-run with that random seed value to re-run in that order if you end up with a test order dependency issue. (Being able to use enforced randomness on CI, but being to recreate a particular run locally is probably the best of both)

PR #8209 implements this (and it looks like a lot of effort put in, thanks @WeiAnAn), but I do share the concerns about adding this feature stated by @palmerj3 .
To propose an alternative that might help move this forward: What about making TestSequencer (which is the key component that sorts the tests, where most of the changes in PR #8209 are) pluggable so that users can provide a custom implementation that could do stuff like this?
I know there were ideas of doing this with TestScheduler - for TestSequencer it should be way easier because it is more isolated.
cc @SimenB

I agree making it pluggable might make sense, if we wanna support this. I don't think it makes sense in core, so I think plugability is the thing we should explore.
@cpojer @scotthovestadt thoughts?

Providing something almost exactly like the filter API that sorts the tests is something I'd be comfortable with and should be a very simple implementation.

Or moving TestScheduler into @jest/test-scheduler and making it possible to swap out just like runner etc is what I thought of

I agree that this shouldn't be a default feature part of core but I wouldn't mind if the scheduler can be adjusted via plugins.

(I meant moving TestSequencer into @jest/test-sequencer, sorry)

I think move TestSequencer to individual package is great. It keep jest-core clean.
Should I just move the TestSequencer or making different sequencer to handle different situation.

@WeiAnAn the custom sequencer would be an external package, Jest itself would only need to have the default sequencer extracted to a package and a config option to allow using a custom one, similar to runner. @scotthovestadt this is not quite like filter but it's something we have for runner, testEnvironment, testRunner etc. Any objections?

This needn't be complex.  I've spiked out something which looks like this:
import TestSequencer from './TestSequencer';

export default class NullSequencer extends TestSequencer {
  sort(tests: Array<Test>): Array<Test> {
    return tests;
  }
}

...and the CLI flag to select it.  That's enough for my use case.  The order's arbitrary, but I can control it from the command line by explicitly naming files, in the order I want them to run.

Creating a @jest/test-scheduler, and no other changes, would be a great first step. Will make the diff adding an option for it to be replaced by something else trivial

I'll call this closed via #8223. Will be available whenever the next release of Jest happens (no timeline)

Released in 24.7.0

Have jest-test-sequencer been released as well?

Yes https://yarnpkg.com/en/package/@jest/test-sequencer

Note that this package contains the default implementation though, one that orders tests in a specific order will have to be user-provided (I'm sure someone will publish an alphabetic test sequencer to npm 😅)

Yes https://yarnpkg.com/en/package/@jest/test-sequencer

How should it be used?

Please refer to the docs https://jestjs.io/docs/en/next/configuration#testsequencer-string

Please refer to the docs https://jestjs.io/docs/en/next/configuration#testsequencer-string
Thanks @SimenB
How to run "it" synchronous in integration tests?

Hey guys,
Someone could send a clear example of how can I use the test sequencer? I need to run in order my test but the --runInBand is not working properly.
I will really appreciate it.
Cheers!

Hey guys,
Someone could send a clear example of how can I use the test sequencer? I need to run in order my test but the --runInBand is not working properly.
I will really appreciate it.
Cheers!

Suppose you have 3 files, a, b, c, and you want to run in the order of b, a, c.
CustomSequencer.js
const TestSequencer = require('@jest/test-sequencer').default;

class CustomSequencer extends TestSequencer {
  sort(tests) {
    const orderPath = ['b', 'a', 'c'];
    return tests.sort((testA, testB) => {
      const indexA = orderPath.indexOf(testA.path);
      const indexB = orderPath.indexOf(testB.path);

    if (indexA === indexB) return 0; // do not swap when tests both not specify in order.

    if (indexA === -1) return 1;
    if (indexB === -1) return -1;
    return indexA < indexB ? -1 : 1;
  }
}

module.exports = CustomSequencer;

note: you need to ensure you orderPath is in absolute path, you can do it with path.join(__dirname, './path/to/test')
You can refer to jest default TestSequencer sort implementation .
And run
jest --testSequencer=<path-to-CustomSequencer>

Or set in jest config
testSequencer: "<path-to-CustomSequencer>"

If you want to make sure the next test start running after previous test completed, add --runInBand option.

Hey guys,
Someone could send a clear example of how can I use the test sequencer? I need to run in order my test but the --runInBand is not working properly.
I will really appreciate it.
Cheers!

Suppose you have 3 files, a, b, c, and you want to run in the order of b, a, c.
CustomSequencer.js
const TestSequencer = require('@jest/test-sequencer').default;

class CustomSequencer extends TestSequencer {
  sort(tests) {
    const orderPath = ['b', 'a', 'c'];
    return tests.sort((testA, testB) => {
      const indexA = orderPath.indexOf(testA.path);
      const indexB = orderPath.indexOf(testB.path);

    if (indexA === indexB) return 0; // do not swap when tests both not specify in order.

    if (indexA === -1) return 1;
    if (indexB === -1) return -1;
    return indexA < indexB ? -1 : 1;
  }
}

module.exports = CustomSequencer;

note: you need to ensure you orderPath is in absolute path, you can do it with path.join(__dirname, './path/to/test')
You can refer to jest default TestSequencer sort implementation .
And run
jest --testSequencer=<path-to-CustomSequencer>

Or set in jest config
testSequencer: "<path-to-CustomSequencer>"

If you want to make sure the next test start running after previous test completed, add --runInBand option.

Thank you very much! Helped me a lot :)

I got a hold on this by creating files of the functions then importing them in the main tests.spec.js describing all the tests in order and assigning them with the imported functions:
test.spec.js

import { signuptests } from './signup'
import { logintests } from './login'

describe('Signup', signuptests)
describe('Signup', signuptests)

signup.js

export const signuptests = () => {
     it('Should have login elements', () => {});
     it('Should Signup', () => {}});
}

login.js

export const logintests = () => {
it('Should Login', () => {}});
}

Is there any way that i can pass parameters from the describes to the IT(tests)?
Like this below:
describe('Signup', signuptests('name', 'username'))

How do you use the test sequencer to randomize tests? instead of the usual sort?

import TestSequencer from '@jest/test-sequencer';

export default class CustomSequencer extends TestSequencer {
  sort(tests) {
    return tests.sort(() => Math.random() > 0.5);
  }
}

@SimenB here's a ❤ for you. Thanks.

I tried @SimenB but tests were still not random.

Per file, tests within a file is always ran in declaration order

@SimenB Any solution to sequence tests per test block?

Hi guys.
I'm facing this problem:
Jest Sequencer jest.sequencer.js cannot be found. Make sure the testSequencer configuration option points to an existing node module.
What am I doing wrong?
Thanks

Would it be an idea to add a parameter to the it and describe blocks to declare that they should be run in order and the ones which do not run in parrarell?
I have tests in a file, some of which I wish to run in sequence and some that I do not care and could be run in parrarell to anything.
it('example test to be run in sequal', () => {

});

it('example test to not be run in sequal', () => {

}, undefined, true);


kubeeye 0.5.0 installation fails

The installation of https://github.com/kubesphere/kubeeye fails for version 0.5.0.
That is because they changed the package name format, adding the v.
Old: https://github.com/kubesphere/kubeeye/releases/download/v0.5.0/kubeeye-0.5.0-linux-amd64.tar.gz
New: https://github.com/kubesphere/kubeeye/releases/download/v0.5.0/kubeeye-v0.5.0-linux-amd64.tar.gz

Also, to make the matter more entertaining, the binary has been renamed to "ke" :)


Add speed setting of "3/4" to FIX-IT+

Details
After our last transcript-a-thon a few weeks ago, I mentioned that I would find a playback speed setting of 3/4 really useful for hearing a difficult bit of the audio.  Henry said this would be one of the easier changes to make to FIX-IT+.  So I'm noting it here as a suggestion to consider!
Submitted by: Owen
CC in communications:
Priority: Low (whenever)
URL:
Slack message thread:

duplicate


Remove mention to preview for Flexible Server

@dvaleror : Thanks for your contribution! The author(s) have been notified to review your proposed change.

#label:"aq-pr-triaged"


How to determine the version of zstash being used?

Is there a way to determine the version of zstash being used?
This can be particularly useful to (i) know that the version being used is the latest, and (ii) reporting errors.
I could not find this in the documentation, and guessing at arguments, such as --version, didn't work for me.

Yes, there is:
$ zstash version

Hmm, this error message defined by usage should have been printed when asking for help. It must mean that you have a version older than v0.3.0.
With an older version (or even the most recent version), I think you can check the version like so:
python -c 'import zstash; print(zstash.__version__)'

The reason as to why zstash -v or zstash --version doesn't work is due to the way users already interact with the software, via zstash <command>. I guess we can have a special case where if zstash -v or zstash --version is given, just print the version. However, the current parser expects the format to be zstash <command> [<args>].

That syntax is fine with me.  However, it would be good to add it to the list of commands discussed on the usage page (https://e3sm-project.github.io/zstash/docs/html/usage.html).
Your python command says that I am using v0.2.0 (I am working on Cori at NERSC).   However, when I try to update using the command given in the installation documentation conda update zstash -c e3sm -c conda-forge (https://e3sm-project.github.io/zstash/docs/html/installation_and_updating.html) it outputs the following, but leaves me with v0.2.0:
(zstash_env) pjc@cori03:~> conda update zstash -c e3sm -c conda-forge
Solving environment: done

==> WARNING: A newer version of conda exists. <==
  current version: 4.4.7
  latest version: 4.7.11

Please update conda by running

    $ conda update -n base conda

# All requested packages already installed.

When I try to update conda using conda update -n base conda, it does a bunch of stuff but ultimately fails because of a lack of permissions.

I'm not sure why that's no longer working, as you can see, we have v0.3.0 in the e3sm channel on Anaconda. I guess for your own sake, you can just create a new env from scratch, making sure that you get the latest version.
However, this should be investigated.

The zstash instructions for Cori (https://e3sm-project.github.io/zstash/docs/html/installation_and_updating.html) say to load python-2.7 and zstash_env, which is what I was doing.  When I load the e3sm_unified environment I get zstash v0.3.0.
Do the instructions just need to be updated?

Pinging @golaz to make him aware of this discussion.

Yes, good idea. I don't work at LLNL anymore. ¯\_(ツ)_/¯

Thank you for staying engaged and moving this forward :-).

For updating the installation documentation (https://e3sm-project.github.io/zstash/docs/html/installation_and_updating.html), would the easiest thing be to point to the e3sm_unified instructions (although not everyone has access to the E3SM Confluence pages)?

@cameronsmith1 Thanks for the suggestion! Using e3sm_unified will be the most straightforward approach to use zstash . I'm happy to help update the installation doc by adding a section to use zstash via e3sm_unified. But please us know if you encounter issues specific to run it in the e3sm_unified.

Thanks for your help, @chengzhuzhang .  On the basis of the recent discussions on this issue and https://github.com/E3SM-Project/zstash/issues/30, I think there are 3 opportunities to improve the documentation for zstash:

Update the installation & update instructions to include e3sm_unified.
Add 'zstash version' to the usage page.
For 'zstash create', clarify that the argument to --hpss should include the sub-directory the user wants to put the tar files into.

@cameronsmith1 : thanks for your suggestions. I have now updated the documentation to include the changes you suggested.


precompile

Uses PrecompileSignatures.jl to reduce TTFX

Codecov Report

Merging #176 (87a9878) into master (28a0b55) will decrease coverage by 1.64%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master     #176      +/-   ##
==========================================
- Coverage   93.71%   92.06%   -1.65%
==========================================
  Files           8        8
  Lines         970      970
==========================================
- Hits          909      893      -16
- Misses         61       77      +16

Impacted Files
Coverage Δ

src/Xtals.jl
100.00% <ø> (ø)

src/bonds.jl
90.35% <0.00%> (-4.07%)
:arrow_down:

src/distance.jl
76.59% <0.00%> (-2.13%)
:arrow_down:

src/misc.jl
96.25% <0.00%> (-1.25%)
:arrow_down:

src/crystal.jl
93.58% <0.00%> (-1.11%)
:arrow_down:

:mega: We’re building smart automated test selection to slash your CI/CD build times. Learn more


Transaction stuck at Mempool // Failed to send // old version

Issue Template
Context

Hi there,
was trying to send my Verge to Binance Wallet since i wanted to transfer to a online Wallet.
Well Story first had Version 4.0 Installed and tried to send - that didnt work since it was Out of Sync to fix that i tried to get the Blockchain updated and installed the newest Version.
SO now my Transaction is just unconfirmed/ Stuck at Mempool.
Status: im Speicherpool/unbestätigt
Datum: 17.04.2021 18:05
An: Binance Adress D9ixUSiGF7eLWne7zSMr9sekhNyP2EtUZC
Belastung: -115 023.267912 XVG
Transaktionsgebühr: -0.100000 XVG
Nettobetrag: -115 023.367912 XVG
Transaktionskennung: 52ababb3b393e2bbfa006e40615ce2841d46135703d057de39a4ee68981436ae
Gesamte Transaktionsgröße: 196 bytes
Transaction virtual size: 196 bytes
Ausgabeindex: 0
Thanks in advance.
Prerequisites

[ x] Are you running the latest version?

User Story:

"I'm submitting a ... "

[ ] bug report
[ ] feature request
[ x] support request
[ ] translation request

Expected Behavior

Current Behavior

Screenshots

Possible Solution

Steps to Reproduce (for bugs)

Steps :

Your Environment

Verge Release:
CPU:
GPU:
RAM:
OS:

[ ] I'm using Mac
[ ] I'm using Linux
[ ] I'm using Mac

Any extra information that might be useful in the debugging process.

how many active connections do you have on the wallet ?
If you go to like Help -> Debug , you should see a place where it tells you how many peers or connections you have.  Do you have more than 0?  Or do you have 0 ?

Hi there,
so this has now "Evolved" when starting the Verge Septem wallet it just show that its trying to update New Transaction and is doesn't change within the last 8 Hours....
Also thanks for you answer Jrsikors the first times I always had 1 Network connection to the Verge network - now I just have Zero.

Just an update - didnt get it to work installed the wallet on another pc and dl blockchain andmoved wallet there - worked!

glad to hear it worked. maybe the first computer is having an issue with tor? do you have other wallets running on it? tor already running perhaps?


Added LumberMill to Logging Category

Project URL
https://github.com/ubclaunchpad/LumberMill
Description
Added LumberMill to Logging Category
Why it should be included to awesome-ios (optional)
Because it's one of the smallest and simplest logging libraries out there.
Checklist

[x] Only one project/change is in this pull request
[x] Addition in chronological order (bottom of category)
[x] Supports iOS 9 or later
[x] Supports Swift 3
[x] Has a commit from less than 2 years ago
[x] Has a clear README in English

          1 Error

  :no_entry_sign:
  Found 2 link issues

Link issues by awesome_bot

Line
Status
Link

1017
502
https://boxcar.io

1586
301
https://github.com/recisio/IncrementableLabel redirects tohttps://github.com/tbaranes/IncrementableLabel

  Generated by :no_entry_sign: danger

Thanks for contributing!


[BUG] Fix application title

So it fits more with our goals

Codecov Report

Merging #137 (7b92442) into master (6b65860) will not change coverage.
The diff coverage is n/a.

@@            Coverage Diff            @@
##             master     #137   +/-   ##
=========================================
  Coverage     68.66%   68.66%
  Complexity      745      745
=========================================
  Files           116      116
  Lines          2365     2365
  Branches        277      277
=========================================
  Hits           1624     1624
  Misses          628      628
  Partials        113      113

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 6b65860...7b92442. Read the comment docs.


(optionally) add github-action to run tests

some devs might want to have a github action included in the initial scaffold to run their tests. not sure if it should be included by default. but having the option would be good I think

I don't think support for a specific CI environment is in scope for aeproject

I don't think support for a specific CI environment is in scope for aeproject

maybe we could generalize it by providing a flag for the CI environment of choice and then add additional environments based on requests. but I agree that it's definitely not sth. important. personally I would like to have it

we can start feature overload again in aeproject, but last time nobody used all the specific features

let's keep it open and wait for comments of the community


renderblocks in controller does not work

Describe the bug
TypeScript embedded in a renderblocks message and passed from the controller to MakeCode is not rendered in the Block editor.
To Reproduce
Steps to reproduce the behavior:

In a pxt target, run pxt staticpkg then http-server -c-1 built/packaged
Open http://localhost:8080/controller.html
Press "renderblocks"

Expected behavior
while(true){ } is transformed to blocks, which are then added to the Block editor
Desktop (please complete the following information):

OS: Windows 10 1803
Browser: Edge, Chrome 69, Firefox 62

Closing old bugs. If this still reproduces please reopen.


Another Issue

So, The "node ." Wasn't working. It just says 'TOKEN INVALID'
So I tried "npm start" It worked,

But this happend.
This is the same issue a few days ago, How am i gonna scrape username and pfp if this issue won't fix.

Can you try to change your password on github it reset's your user token so node . might work with that

and it is pretty intresting i have never seen guild members timeout in my whole coding experience you can try an vpn for network

I tried reseting my password, But it still didn't work.

and it is pretty intresting i have never seen guild members timeout in my whole coding experience you can try an vpn for network

I don't have any vpn, I can't find any free vpn.

Can i try using replit instead?

just change your ip to another location any service allowed

Okay that could be something about your account. If you have an alt account just use it instead of you account also delete project from locale and reclone it from git. then create your .env file using .env.example. you can invite your alt account to guild which is you want to scrape 👍🏻

Okay that could be something about your account. If you have an alt account just use it instead of you account also delete project from locale and reclone it from git. then create your .env file using .env.example. you can invite your alt account to guild which is you want to scrape 👍🏻

Thanks, It works very well. My token was nuked, Maybe that was the problem. it cause error

Okay that could be something about your account. If you have an alt account just use it instead of you account also delete project from locale and reclone it from git. then create your .env file using .env.example. you can invite your alt account to guild which is you want to scrape 👍🏻

By the way, How to scrape all of the users?

we cannot scrape all of the users cause of discord api limitions but you could use opcode 8 but it also have limitions thats the problem why we cannot scrape all of the users

Okay that could be something about your account. If you have an alt account just use it instead of you account also delete project from locale and reclone it from git. then create your .env file using .env.example. you can invite your alt account to guild which is you want to scrape 👍🏻

Thanks, It works very well. My token was nuked, Maybe that was the problem. it cause error

Im glad to hear that. Good lock with that script!


Builds are incorrectly skipped on root_path mismatch

Environment

Elixir & Erlang versions: Elixir 1.12.0 (compiled with Erlang/OTP 24)
Operating system: macOS 11.4
Editor or IDE name: Nova
Editor Plugin/LSP Client name: nova-elixir-ls

In the latest version of Nova elixir-ls is not rebuilding on save. I'm seeing this error in the logs:
skipping build because cwd changed from /Volumes/Macintosh HD/Users/raulchedrese/projects/Rayo to /Users/raulchedrese/projects/Rayo.
Best I can tell Nova is sending these values on start up.
"rootPath" => "/Volumes/Macintosh HD/Users/raulchedrese/projects/Rayo",
"rootUri" => "file:///Volumes/Macintosh%20HD/Users/raulchedrese/projects/Rayo/",

This check then fails. https://github.com/elixir-lsp/elixir-ls/blob/6a786d7d9e7ca97a2c9c77ea4acd0057a98734d8/apps/language_server/lib/language_server/build.ex#L5
It is expecting root_path to be /Users/raulchedrese/projects/Rayo.
I was able to work around this locally by replacing the above line with:
if !String.ends_with?(Path.absname(root_path), Path.absname(File.cwd!())) do

We need to handle it during initialise. I think the correct solution would be to cd into root_path, then get pwd and use it as root_path.
"/Users/lukaszsamson"

Hey @lukaszsamson, thanks for the response!
https://github.com/elixir-lsp/elixir-ls/blob/d3fda3b12db7aea529298f7afae63e0c16a1b513/apps/language_server/lib/language_server/server.ex#L524
Replacing this line with:
cwd_uri = SourceFile.path_to_uri(File.cwd!())
%{state | root_uri: cwd_uri}

Seems to resolve the issue. Does that seem like a reasonable solution?

Does that seem like a reasonable solution?

@raulchedrese Yes, thats what I had in mind. Do you want to make a PR?

Opened a PR here: https://github.com/elixir-lsp/elixir-ls/pull/579


GDash time inaccuracy

Sometimes (always?) recorded videos are much longer then the Cave Time.
For example: https://youtu.be/cucIAqzmUvk
Cave Time = 255
The Video is 290 s long and the difference cannot be explained by intro and outro video segments.
In fact, the video from 0:00:05.467 to 0:04:46.167 has a duration 0:04:48.700 or ~ 288 s, while the Cave Time is reduced from 255 to 26, which is 229 s.
It seems that GDash timer is different from the system timer.

From what I remember, when the cave has a PAL system, then it is longer by 0.2 seconds.
By default, Gdash at the new cave does not select the PAL option, and so 1 second equals 1 second

So, "Software PAL emu" should be set to "no" to fix the problem?

Yes.
Note that once programmers had to make games for PAL or NTSC.
A very large database of Boulderdash games from the 80s is the PAL system.

Sorry, not quite like that.
For each cave you need to uncheck the "cave properties" in "Difficulty" tab "PAL timing"

Oh, no!
I can't do it for each cave!
There must be some simpler solution.

Note that there are caves, if you tick PAL you won't make it in time.
Because 10 seconds is 12 seconds in PAL.

Taking off "Pal timing" and adding 20% time to each such cave I suspect won't be easy.
So we have to accept that there used to be a PAL system.

288 : 229 ≈ 1,257642

PAL Timing: on
Cave Time: 256s  -> OS time: 318s. 318 : 256 ≈ 1,2422
PAL Time: off
Cave Time: 256s  -> OS time: 260s.
So there is some time inaccuracy even with PAL Timing off.

Hi, yes indeed, PAL timing is the reason. But a lot of fancaves were made with PAL timing (as zsommk already pointed out). So if a game had PAL timing in original and also in GDash, then I think it's just good emulation, nothing to be fixed.
I mean, who says that one Boulder Dash time unit must equal one second...? :D

I mean, who says that one Boulder Dash time unit must equal one second...? :D

I guess, it should.
Otherwise, it looks like a some kind of cheat.
Regarding PAL Timing, everything is clear, thanks for the explanation.
But again, GDash time unit should be 1.2s for PAL Timing caves. Not 1.25s, not 1.15s.

So can I close the issue?

If you decide you can do nothing, you can close as wontfix.
But if you ask my opinion I want you to investigate, why does the game takes longer than it claims, and what could be done to emend that. 256 time unit game should last no longer than 256 seconds, not 260 seconds. Otherwise it's some kind of cheat: "I can't pass the cave on C64 or Atari, but I can try to do that on GDash, 'cause it's it's a bit slower and gives me a few extra ms."

Maybe it has something to do with the fps?


Adding Python 3.8 as supported version

@kulkarnisonia16 : Thanks for your contribution! The author(s) have been notified to review your proposed change.

These commits are now in MicrosoftDocs/azure-docs-pr#106383 #please-close


Texteditor ctrl d

Please merge this in your code, and then I can merge in upstream project.
Thanks

I have merged your PR although I do not fully understand why you did some changes. For example what is scintilla?

Scintilla is a C++ library that many editors use. For example Notepad++, or Geany.
Text Editor also uses this library from wxPython, wx.stc.

So the existence of this library already adds certain shortcuts? Is this to be read somewhere? So I will not make this mistake again?


Failure to decode Python 2.7 Code Object

First off, thanks for doing the hard work for this crate. I have a project where I'd like to just read data from a marshalled Python object and this solution fits the bill.
The code object I'm trying to deserialize is from Python 2.7 which appears to have a slightly different layout for TYPE_CODE. If you try to deserialize this data currently, the code object will advance the stream beyond where it should be and you'll start deserializing incorrect data.
I wrote a patch to add basic support for Python 2.7:
diff --git a/Cargo.toml b/Cargo.toml
index aed85a2..4faa7ce 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -18,3 +18,7 @@ num-bigint = "0.2"
 num-complex = "0.2"
 error-chain = "0.12"
 owning_ref = { version = "0.4", optional = true }
+
+[features]
+default = []
+python27 = []
\ No newline at end of file
diff --git a/src/lib.rs b/src/lib.rs
index 73e9402..a4e6e27 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -115,12 +115,12 @@ pub struct Code {
     pub flags:           CodeFlags,
     pub code:            Arc<Vec<u8>>,
     pub consts:          Arc<Vec<Obj>>,
-    pub names:           Vec<Arc<String>>,
-    pub varnames:        Vec<Arc<String>>,
-    pub freevars:        Vec<Arc<String>>,
-    pub cellvars:        Vec<Arc<String>>,
-    pub filename:        Arc<String>,
-    pub name:            Arc<String>,
+    pub names:           Vec<Arc<Vec<u8>>>,
+    pub varnames:        Vec<Arc<Vec<u8>>>,
+    pub freevars:        Vec<Arc<Vec<u8>>>,
+    pub cellvars:        Vec<Arc<Vec<u8>>>,
+    pub filename:        Arc<Vec<u8>>,
+    pub name:            Arc<Vec<u8>>,
     pub firstlineno:     u32,
     pub lnotab:          Arc<Vec<u8>>,
 }
@@ -920,12 +920,12 @@ pub mod read {
                 re: r_float_bin(p)?,
                 im: r_float_bin(p)?,
             })),
-            Type::String => Some(Obj::Bytes(Arc::new(r_bytes(r_long(p)? as usize, p)?))),
+            Type::String => { let obj = Some(Obj::Bytes(Arc::new(r_bytes(r_long(p)? as usize, p)?))); println!("{:?}", obj); obj },
             Type::AsciiInterned | Type::Ascii | Type::Interned | Type::Unicode => {
-                Some(Obj::String(Arc::new(r_string(r_long(p)? as usize, p)?)))
+                Some(Obj::Bytes(Arc::new(r_bytes(r_long(p)? as usize, p)?)))
             }
             Type::ShortAsciiInterned | Type::ShortAscii => {
-                Some(Obj::String(Arc::new(r_string(r_byte(p)? as usize, p)?)))
+                Some(Obj::Bytes(Arc::new(r_bytes(r_byte(p)? as usize, p)?)))
             }
             Type::SmallTuple => Some(Obj::Tuple(Arc::new(r_vec(r_byte(p)? as usize, p)?))),
             Type::Tuple => Some(Obj::Tuple(Arc::new(r_vec(r_long(p)? as usize, p)?))),
@@ -948,8 +948,8 @@ pub mod read {
             Type::Dict => Some(Obj::Dict(Arc::new(RwLock::new(r_hashmap(p)?)))),
             Type::Code => Some(Obj::Code(Arc::new(Code {
                 argcount: r_long(p)?,
-                posonlyargcount: if p.has_posonlyargcount { r_long(p)? } else { 0 },
-                kwonlyargcount: r_long(p)?,
+                posonlyargcount: if cfg!(not(feature = "python27")) && p.has_posonlyargcount { r_long(p)? } else { 0 },
+                kwonlyargcount: if cfg!(not(feature = "python27"))  { r_long(p)? } else { 0 },
                 nlocals: r_long(p)?,
                 stacksize: r_long(p)?,
                 flags: CodeFlags::from_bits_truncate(r_long(p)?),
@@ -996,9 +996,9 @@ pub mod read {
     fn r_object_not_null(p: &mut RFile<impl Read>) -> Result<Obj> {
         Ok(r_object(p)?.ok_or(ErrorKind::IsNull)?)
     }
-    fn r_object_extract_string(p: &mut RFile<impl Read>) -> Result<Arc<String>> {
+    fn r_object_extract_string(p: &mut RFile<impl Read>) -> Result<Arc<Vec<u8>>> {
         Ok(r_object_not_null(p)?
-            .extract_string()
+            .extract_bytes()
             .map_err(ErrorKind::TypeError)?)
     }
     fn r_object_extract_bytes(p: &mut RFile<impl Read>) -> Result<Arc<Vec<u8>>> {
@@ -1011,15 +1011,15 @@ pub mod read {
             .extract_tuple()
             .map_err(ErrorKind::TypeError)?)
     }
-    fn r_object_extract_tuple_string(p: &mut RFile<impl Read>) -> Result<Vec<Arc<String>>> {
+    fn r_object_extract_tuple_string(p: &mut RFile<impl Read>) -> Result<Vec<Arc<Vec<u8>>>> {
         Ok(r_object_extract_tuple(p)?
             .iter()
             .map(|x| {
                 x.clone()
-                    .extract_string()
+                    .extract_bytes()
                     .map_err(|o: Obj| Error::from(ErrorKind::TypeError(o)))
             })
-            .collect::<Result<Vec<Arc<String>>>>()?)
+            .collect::<Result<Vec<Arc<Vec<u8>>>>>()?)
     }

     fn read_object(p: &mut RFile<impl Read>) -> Result<Obj> {

There's a lot going on here, but the basic change is this:
-                posonlyargcount: if p.has_posonlyargcount { r_long(p)? } else { 0 },
-                kwonlyargcount: r_long(p)?,
+                posonlyargcount: if cfg!(not(feature = "python27")) && p.has_posonlyargcount { r_long(p)? } else { 0 },
+                kwonlyargcount: if cfg!(not(feature = "python27"))  { r_long(p)? } else { 0 },

This on its own is not enough, however. At least for the object I'm trying to deserialize, things break again once the filename field is deserialized. r_object is invoked again to read the filename string, and then you hit this block:
Type::String => Some(Obj::Bytes(Arc::new(r_bytes(r_long(p)? as usize, p)?))),

Note the change to r_object_extract_string:
-    fn r_object_extract_string(p: &mut RFile<impl Read>) -> Result<Arc<String>> {
+    fn r_object_extract_string(p: &mut RFile<impl Read>) -> Result<Arc<Vec<u8>>> {
         Ok(r_object_not_null(p)?
-            .extract_string()
+            .extract_bytes()
             .map_err(ErrorKind::TypeError)?)
     }

Type::String currently returns an Obj::Bytes but extract_string expects an Obj::String. I'm not sure what the right approach is here. I ended up just changing all of the strings to be Vec<u8>s since, at least in my case, the strings may contain wildly invalid UTF-8.
I wanted to ask: are you interested in supporting Python 2.7 deserialization? I wouldn't mind cleaning up this patch a bit and adding tests. I would need to study the Python 2.7 marshal code a bit more though to understand what the right approach here is for handling these strings correctly.

I am so sorry for not noticing this until now, but if you're still interested...
Rather than adding a feature flag, I feel like it would make sense to just use the has_posonlyargcount in-code configuration option, and add another has_kwonlyargcount option, which are designed to accommodate for differences between Python versions. (The way they work is that if you use marshal_load_ex, you can specify a MarshalLoadExOptions struct with the configuration options describing the behavior of the relevant Python version.)
Re: strings vs bytes: any idea what encoding the strings you are encountering are in? Latin-1? Or something else? If the encoding is predictable, would converting to UTF-8 AKA String be okay? If so, the code for creating the Obj::Code (https://github.com/sollyucko/py-marshal/blob/master/src/lib.rs#L949-L966) could probably be changed to automatically convert a Obj::Bytes from the correct encoding into a String.
FYI: I'm happy to support as wide of a range of versions and use-cases as possible. However, I'm not really working on this much anymore myself, so feel free to submit a PR.

I am so sorry for not noticing this until now, but if you're still interested...

No worries, I know how it goes :)
For full context, I started using this crate as I didn't want to write my project in Python. I also was not aware of how different the Python 2.7 and Python 3 marshal format was. As I've worked on the project since creating this issue some other changes have been made. You can view them here: https://github.com/sollyucko/py-marshal/compare/master...landaire:master
Note the change looks a lot larger than it really is since somewhere along the way I had energy to add support for serializing data, refactored some things, then quickly lost that energy. Here's a rough list of major changes:

String refs appear to be handled differently in Python 2
The types that can be deserialized may have a different marker (https://github.com/sollyucko/py-marshal/commit/787c3248e02140d0beea0e91952db93d49c94b23)
This isn't committed and pushed but I ended up changing strings to be based on https://docs.rs/bstr/0.2.14/bstr/ as a cheap workaround

Rather than adding a feature flag, I feel like it would make sense to just use the has_posonlyargcount in-code configuration option, and add another has_kwonlyargcount option, which are designed to accommodate for differences between Python versions. (The way they work is that if you use marshal_load_ex, you can specify a MarshalLoadExOptions struct with the configuration options describing the behavior of the relevant Python version.)

This makes sense.

Re: strings vs bytes: any idea what encoding the strings you are encountering are in?

They should be UTF-8, but I think the problem is that in Python 2.7 strings aren't guaranteed to be UTF-8 -- I think they're just arbitrary bytes but I could be wrong. As I eluded to above, I ended up just using the bstr crate for Strings/Bytes -- and this has worked out pretty well. I'll push this change soon.

FYI: I'm happy to support as wide of a range of versions and use-cases as possible. However, I'm not really working on this much anymore myself, so feel free to submit a PR.

Totally understand. My work on the project has been sort of off-and-on, so when I get a chance I'll package things up and submit a PR. Hopefully you don't feel any pressure -- I've been moving along just fine with a git source specified for the crate.

Things I'm fine with:

Changing error-chain to thiserror
Renaming Result to ParseResult
Changing String to BString: I guess this is fine, due to Python 2's use of non-strict UTF-8
Moving mod read to its own file: Great idea, I was even thinking about this myself
Adding Python 2 type characters

Things I'm not fine with:

Removing Python 3 type characters: Is there any reason this is necessary?
Adding the fictitious Bytes type: Shouldn't the mapping be Obj::Bytes => Type::String and Obj::String => Type::Unicode?
Removing posonlyargcount and kwonlyargcount: Is there any reason these can't just be 0 in Python 2?
Modifying existing test data to remove the posonlyargcount and kwonlyargcount fields: I'd rather have multiple tests using different MarshalLoadExOptions values

AFAICT from my testing:

Python 2 displays str as UTF-8 and marshals it as s + possibly-invalid UTF-8
Python 2 displays unicode as UCS-1/2/4 (UCS-4 = UTF-32) and marshals it as u + UTF-8
Python 3 marshals bytes as s
Python 3 displays str as characters rather than escapes and marshals it as u/z (ignoring interning and FLAG_REF) + UTF-8
Basically, str/bytes is marshalled as s, unicode/str is typically marshalled as u, and everything is marshalled using UTF-8. However, Python 2 isn't strict about having proper UTF-8.

To summarize: I'm happy to support Python 2, but without removing support for Python 3. I'm fine with making breaking changes if needed, though.