fix: loading indicator display when deleting vague distance Expense

Explanation of Change

Fixed Issues

$ https://github.com/Expensify/App/issues/50022
PROPOSAL: https://github.com/Expensify/App/issues/50022#issuecomment-2388317609
Tests

Click on Global Create > 'Submit Expense'.
Select the 'Distance' option.
Disable the internet connection.
Enter a vague start location using random characters.
Enter a vague end location using random characters.
Complete the expense submission flow.
Enable the internet connection.
Open the distance expense report.
Click on the close icon of the displayed error message.
Verify that the app navigates back to the workspace IOU report without displaying any intermediate screens such as a loading screen or a "Hmm it's not here".
Verify that the vague distance expense is deleted.

[x] Verify that no errors appear in the JS console

Offline tests

QA Steps

Same as tests

[x] Verify that no errors appear in the JS console

PR Author Checklist

[x] I linked the correct issue in the ### Fixed Issues section above
[x] I wrote clear testing steps that cover the changes made in this PR

[x] I added steps for local testing in the Tests section
[x] I added steps for the expected offline behavior in the Offline steps section
[x] I added steps for Staging and/or Production testing in the QA steps section
[x] I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[x] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
[x] I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).

[x] I included screenshots or videos for tests on all platforms
[x] I ran the tests on all platforms & verified they passed on:

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

[x] I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
[x] I followed proper code patterns (see Reviewing the code)

[x] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
[x] I verified that comments were added to code that is not self explanatory
[x] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[x] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method

[x] If any non-english text was added/modified, I verified the translation was requested/reviewed in #expensify-open-source and it was approved by an internal Expensify engineer. Link to Slack message:

[x] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[x] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is either coming verbatim from figma or has been approved by marketing (in order to get marketing approval, ask the Bug Zero team member to add the Waiting for copy label to the issue)
[x] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[x] I verified the JSDocs style guidelines (in STYLE.md) were followed

[x] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[x] I followed the guidelines as stated in the Review Guidelines
[x] I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
[x] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[x] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[x] I verified that if a function's arguments changed that all usages have also been updated correctly
[x] If any new file was added I verified that:

[x] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[x] If a new CSS style is added I verified that:

[x] A similar style doesn't already exist
[x] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))

[x] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[x] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[x] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[x] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[x] If the PR modifies the UI (e.g. new buttons, new UI components, changing the padding/spacing/sizing, moving components, etc) or modifies the form input styles:

[x] I verified that all the inputs inside a form are aligned with each other.
[x] I added Design label and/or tagged @Expensify/design so the design team can review the changes.

[x] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[x] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.

Screenshots/Videos

Android: Native

https://github.com/user-attachments/assets/49753af4-0d49-4f3b-9437-2cfe4de18454

Android: mWeb Chrome

https://github.com/user-attachments/assets/48abce50-49b2-40f2-a190-8b08c0e3508d

iOS: Native

https://github.com/user-attachments/assets/fd617a35-665d-44d7-ae6f-1beb5775c879

iOS: mWeb Safari

https://github.com/user-attachments/assets/367c4870-d2fa-4d76-bc55-36a30c791480

MacOS: Chrome / Safari

https://github.com/user-attachments/assets/07448f0a-4ded-4239-bd49-9df9b899da4f

MacOS: Desktop

https://github.com/user-attachments/assets/fbae13c6-7f88-46c5-8f4d-188518be9777

@rayane-djouah I updated the PR based on your suggestion

@rayane-djouah @flodnv After we click on "x" button, the report preview is displayed for a while before it is removed. Do we treat it as a regression:
https://github.com/user-attachments/assets/49753af4-0d49-4f3b-9437-2cfe4de18454

@rayane-djouah I updated PR to fix issue:

Web:

https://github.com/user-attachments/assets/73ddf3d5-5ba0-4e0d-a5e2-5843a43e201b

Native:

https://github.com/user-attachments/assets/2085c28a-5ebc-44da-90b4-82d7a532c64e

@rayane-djouah I applied your suggestion. Here is result:
https://github.com/user-attachments/assets/296457ff-3ab6-4b75-9769-9e41075f975a
https://github.com/user-attachments/assets/6784a6f1-0efc-4841-9e9d-58aeba5a2556

@rayane-djouah I updated PR

:hand: This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release.


whether CLIP can embedding chinese text ?

See #7 and #142

Hi, maybe you can refer to this repo! https://github.com/OFA-Sys/Chinese-CLIP @fengmingfeng


Fix clusters that use LB expose strategy with a custom port

In https://github.com/openshift/hypershift/pull/1614 the KAS was changed
to always listen on port 6443 in oder to support privileged external
ports by doing the mapping external port -> internal port in the service
object.
This resulted in an invalid KAS networkpolicy if the external port is
not 6443, as it would allowlist the external port rather than 6443 where
the KAS is actually listening.

What this PR does / why we need it:
Which issue(s) this PR fixes (optional, use fixes #<issue_number>(, fixes #<issue_number>, ...) format, where issue_number might be a GitHub issue, or a Jira story:
Fixes #
Checklist

[ ] Subject and description added to both, commit and PR.
[ ] Relevant issues have been referenced.
[ ] This change includes docs.
[ ] This change includes unit tests.

/test ci/prow/e2e-kubevirt-gcp-azure

/test e2e-kubevirt-azure-ovn

@csrwng could you have a look?

/lgtm


Add statistics page

@zombie Where do I go to find the new menu item? I'm not seeing it in the hamburger or context menus.  (I'm running web-ext run --verbose --url=https://www.telegraph.co.uk/ )

Should show up in the right click on the extension browser_action (toolbar) button.

I see it, thank you, looks good.


Add Guy Gavergun to Contributors.md

Hi  @guygaver, I'm quite elated about your pull request. I wanna evolve this project to addresses various problems faced by first-time contributors. I'd love to learn about your journey in open source community, the problems, pain points you had etc.
Could you explain how you felt when you went through the tutorial, made a pull request and learned that I merged it?
We’ve recently added social share  to our web app. Could you please go to https://roshanjossey.github.io/first-contributions/#social-share and share your first contribution to open source?
Also, check out projects with easy issues while you’re there.

Hi @Roshanjossey !
Thank you for creating this project and giving me the opportunity to commit to my first open source project. Although simple, it felt exciting. The flow was easy to follow and makes me feel prepared to follow the process with another project.
Contributing to open source and giving back to the community has always been important for me. Whats mostly stopping me is my own ego saying that maybe I dont have enough experience yet. But as i've found its not only about contributing software, but also documentation, information, and tips. I hope this first commit and the information you provided will be the start of my open source journey.
Thanks again!


How can I synchronize my data on local?

Describe the bug
Using local, with cookies available, postwoman can't log me using Github connection method.
To Reproduce
Steps to reproduce the behavior:

Go to the key icon top right
Click on it to deploy connections methods
Click on Github
The popup opens and closes itself instantly, without get any connection

Expected behavior
Open github or google auth window
Desktop (please complete the following information):

OS: Macos Catalina
Browser Chrome Dev
Version 84.0.4115.5 (Official Build) dev (64-bit)

Additional context
Also i tried with Vivaldi, Opera, Safari Browsers.
I am not sure its a bug. Maybe the real question is how can I sync with firebase on my local?

sync with Firebase on local development is disabled intentionally to minimise unwanted write / read to Firestore, we're currently operating on free plan :)
When signed out on web app, we sync with localstorage and once user signs in, we syncs with Firebase.
In local development, only sync with localstorageis available. As we grow further, we'll consider allowing Auth on local development. Thanks for understanding.


How to find current editor theme?

Like for setting a theme I can use method monaco.editor.setTheme, how can I find current theme. I am unable to find any method like monaco.editor.getTheme.

You can see that in editor._themeService.getTheme()

Thanks!


fix the empty tag

To guarantee a non-empty string for image tag

I take it the goal is to always tag latest, and tag with the git commit hash, and to optionally also tag the image with the git release tag (depending on what kind of event triggered the pipeline).
I do have a reservation, in that this looks like 30 lines of bespoke code to accomplish something common that github actions ought be able to achieve with a one-liner. Just noting this (aiming to revisit sometime in the future).


Support Windows Server Nano

Not sure if you want random questions posted here or if there's a forum elsewhere, but are you planning on supporting running the agent on Windows Server Nano?

@peder the agent should be able run on any platform that dotnet core supported.
I would like to ask @bryanmacfarlane to answer whether we will support WinServer Nano.

Theoretically it should
https://github.com/dotnet/cli/issues/2967
If it runs on it, we will support it.
Interesting question would be what you would be automating (powershell scripts).  Not sure, you'll get VS etc.. on a nano server but I could see deploying to it.
Try it out and let us know what you find.

Hi,
Can we re-open this issue. I tried to run it on Nano-Server and didn't work.

Can you add details about what didn't work?  What error did you get?

Yes, sure.
So when I run config.cmd file, it first gives the following error
-Sta : The term '-Sta' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is
correct and try again.
At line:1 char:1

-Sta -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Comman ...

  + CategoryInfo          : ObjectNotFound: (-Sta:String) [], CommandNotFoundException
  + FullyQualifiedErrorId : CommandNotFoundException

Which is followed by prompt to enter my server URL, authentication type and PAT. Once I gave it, I get the following errror

An error occurred while sending the request. Failed to connect.  Try again or ctrl-c to quit

Had a look at the diag folder and saw the following in the logs
[2016-10-18 07:29:46Z ERR Terminal] System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.Http.WinHttpException: The parameter is incorrect at System.Net.Http.WinHttpAuthHelper.SetWinHttpCredential(SafeWinHttpHandle requestHandle, ICredentials credentials, Uri uri, UInt32 authScheme, UInt32 authTarget) at System.Net.Http.WinHttpAuthHelper.CheckResponseForAuthentication(WinHttpRequestState state, UInt32& proxyAuthScheme, UInt32& serverAuthScheme) at System.Net.Http.WinHttpHandler.d__101.MoveNext() --- End of inner exception stack trace --- at Microsoft.VisualStudio.Services.Common.VssHttpRetryMessageHandler.d__3.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Net.Http.HttpClient.d__58.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.ConfiguredTaskAwaitable1.ConfiguredTaskAwaiter.GetResult()
at Microsoft.VisualStudio.Services.WebApi.VssHttpClientBase.d__45.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable1.ConfiguredTaskAwaiter.GetResult() at Microsoft.VisualStudio.Services.WebApi.VssHttpClientBase.d__421.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable1.ConfiguredTaskAwaiter.GetResult() at Microsoft.VisualStudio.Services.Location.Client.LocationHttpClient.d__6.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult() at Microsoft.VisualStudio.Services.WebApi.Location.VssServerDataProvider.d__41.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.VisualStudio.Services.Agent.AgentServer.d__3.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.VisualStudio.Services.Agent.Listener.Configuration.ConfigurationManager.d__10.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.VisualStudio.Services.Agent.Listener.Configuration.ConfigurationManager.d__7.MoveNext() [2016-10-18 07:29:46Z ERR Terminal] WRITE ERROR: Failed to connect. Try again or ctrl-c to quit
Following are the details of my OS
Windows Version: Microsoft Windows [Version 10.0.14393]
.Net Core Version : 1.0.1
.Net Core Build : cee57bf6c981237d80aa1631cfe83cb9ba329f12

I have stored the container in a tar file, in case you need to access it

@hamidshahid Can you check the PAT you used hasn't expired and has agent pool manage scope?
Also what version of PowerShell you have on that box?

No, it hasn't expired yet. I used it from my host machine and it worked fine.
Below is my PS version info
Major  Minor  Build  Revision

5      1      14393  1000

HI,
Any luck with finding a solution to this issue please?

It's likely not just this issue. The Windows build of the agent currently makes an assumption that Full .NET is installed. It has validation checks that verify that .NET >= 4.5 is installed. It sounds like it's missing validation to distinguish between .NET Full and .NET Core.
My understanding is that Nano doesn't have .NET Full, and only has .NET Core. We'll need to take a pass through the agent, given Nano constraints, and figure out what it means for an agent running on Nano.

Thank you for the update. I had to install dotnet core on Windows Nano. Please update the issue when there is progress on this. Many thanks.

Hi, I tried to run vsts-agent on microsoft/windowsservercore image. The image had full .Net 4.5 installed on it. Got the same error there as well.

I could really use Windows NanoServer support too.
I have a requirement to run a VM as a release agent in every one of my Azure subscriptions, and using NanoServer is preferable because of the ease of management and small footprint of the NanoServer OS.

This is caused by Nano server having a different version of powershell.exe that does not support all of the flags as on other OS versions. For example, running powershell -? on Windows 10 returns many flags, including -Sta, but on Nano it only returns this:
USAGE: powershell [-Verbose] [-Debug] [-File <filePath> <args>] [-Command] <CommandLine>

So, it looks like the -Sta flag is not available on Nano.
The config.cmd file uses many powershell.exe flags, such as:
powershell.exe -NoLogo -Sta -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command ...

This may be a way to check if the OS is nano: http://www.dexterposh.com/2016/05/powershell-check-script-running-on-nano.html

Was there any workaround or update installing vstsagent on a Windows Nano Server as I'm having the same issues running config.cmd with '-Sta' is not recognized as the name of a cmdlet error.

That flag should not even be necessary. Powershell 3.0 starts in a single threaded apartment by default and that is the minimum required for the agent.
https://docs.microsoft.com/en-us/vsts/build-release/actions/agents/_shared/qa-windows-agent-powershell-version
https://docs.microsoft.com/en-us/vsts/build-release/actions/agents/_shared/qa-windows-agent-powershell-version

@ericsciple any update on this?

Nope, user voice might be a good place to gain traction on this
Note, the work involved isn't just about making the agent startup. It's about making the capability scripts work, making the source providers work, making tasks work, proxy settings, run as service/autologon, etc. Many of the implementations for tasks on Windows leverage the powershell task execution handler. Today we don't have a powershell-core execution handler - but I think we are probably going to add one. So it might make sense to do that work at the same time.

See the following issue for why this would be a gr at idea: https://github.com/Microsoft/vsts-agent-docker/issues/33

Thanks @bryanmacfarlane! This will be excellent. Yaml only? I’m really looking for my teams to be able to manage their own image/build deps off our base image with all the basics. They still will want the ui for managing their pipelines though.

It will start in yaml then make it's way to the UI.  yaml might still end up with more controls and flexibility.  But the UI will at a minimum offer run this phase in a container.

That’s fine. Most of my teams want 4 things: an ephemeral build environment, the ability to maintain their own build image, the ability to use the same build steps on their desktop for compilation/testing, and a simple way to layout their task sequence. This covers most of those it looks like.

@ericsciple PowerShell team was been making improvements to more portable support via https://github.com/PowerShell/PowerShellStandard
Please reexamine feasibility of making vsts agent run on Nano Server... As is a great platform !
Let's all embrace .net core, even on Windows

We embraced .net core on windows :)  The agent is written in .net core
We will take another look.  The issue will likely not be in the agent.  There's tasks written in powershell (released in the market place) that have scripts that likely have expectations on full .net desktop and full powershell.
We propbably would need to introduce the ability to create tasks in powershell core and then deprecate full powershell / .net to increase our reach

@bryanmacfarlane this line is a problem... In agent.listener.program.cs there is no .NET 4.5 on Nano Server
https://github.com/Microsoft/azure-pipelines-agent/blob/3cd0b5dd4331c83f235887735bf546c161ade7d4/src/Agent.Listener/Program.cs#L103
Removing this line is first step, 3rd party plugins, are responsibility of there authors.

Any news 7 months later?
Besides the release of formal docker support @bryanmacfarlane mentioned on Feb 20, 2018 do you really plan to support Azure pipelines agent running on nano server containers?
I have to go with a servercore image which has much bigger footprint. It’s annoying to be forced to use Linux to build .Net Core on containers even if has been partly designed for that.
Please tell us where do we stand on that.

@jtpetty can discuss with Zac and have a fresh look at this issue.

We embraced .net core on windows :) The agent is written in .net core
We will take another look. The issue will likely not be in the agent. There's tasks written in powershell (released in the market place) that have scripts that likely have expectations on full .net desktop and full powershell.
We propbably would need to introduce the ability to create tasks in powershell core and then deprecate full powershell / .net to increase our reach

@bryanmacfarlane Are there any up-for-grabs issues for this so the community can help? There is a Nano Image that comes with Powershell Core now, but unfortunately as stated, there is a Powershell dependency. Example error I get when I attempt to run the agent:

Running Azure Pipelines agent...
'powershell.exe' is not recognized as an internal or external command,
operable program or batch file.
Error reported in diagnostic logs. Please examine the log for more details.
- C:\azp\agent_diag\Agent_20191206-180945-utc.log
An error occurred: PowerShell is not installed. Minimum required version: 3.0
Cleanup. Removing Azure Pipelines agent...
'powershell.exe' is not recognized as an internal or external command,
operable program or batch file.
Error reported in diagnostic logs. Please examine the log for more details.
- C:\azp\agent_diag\Agent_20191206-180946-utc.log
An error occurred: PowerShell is not installed. Minimum required version: 3.0

Use Case:
I want to roll out a slim self hosted agent to each developers VM so they can run "local" builds. The Windows Server core image is just too large.

Hi, tried running this on mcr.microsoft.com/windows/nanoserver:1903 & 2004 but failing due to issue with PowerShell:
An error occurred: PowerShell is not installed. Minimum required version: 3.0
Notes below:
Running ado-agent on nano

remove ado-agent container: docker rm ado-agent --force
launch ado-agent container:

$vsts_container = @{
    FilePath     = "docker"
    ArgumentList = @(
        "run"
        "--name ado-agent"
        "--restart=on-failure:1"
        "-d=true"
        "-it"
        "--volume=`"C:\Program Files\PowerShell`":`"C:\Program Files\PowerShell`""
        "mcr.microsoft.com/windows/nanoserver:1903"
    )
}
Start-Process @vsts_container

append to PATH: docker exec -u administrator ado-agent cmd /c setx /M PATH "%PATH%;C:\Program Files\PowerShell\"
set VSTS_TOKEN: docker exec -u administrator ado-agent cmd /c setx /M VSTS_TOKEN $env:VSTS_TOKEN
set url to functions: $url = "https://raw.githubusercontent.com/SQLHorizons/functions/master/public"
set functions: docker exec -u administrator ado-agent cmd /c setx /M functions $url
create ado agent deployment script block:

$deploy = {
    $ServerParams = @{
        DeploymentGroup = "UKDB-DEVOPS"
        role            = "deployment"
        dns             = "ado-agent.sqlhorizons.com"
    }

    Invoke-WebRequest -UseBasicParsing "$env:functions/Install-VSTSAgent.ps1" | Invoke-Expression
    Install-VSTSAgent -ServerParams $ServerParams
}

deploy ado agent: docker exec -u administrator ado-agent pwsh -Command $deploy -NoLogo -NoProfile
start interactive shell inside the container: docker exec -u administrator -it ado-agent pwsh.exe

[2020-08-14 15:57:05Z ERR  Terminal] WRITE ERROR: An error occurred: PowerShell is not installed. Minimum required version: 3.0
[2020-08-14 15:57:05Z ERR  AgentProcess] System.InvalidOperationException: PowerShell is not installed. Minimum required version: 3.0
   at Microsoft.VisualStudio.Services.Agent.Util.PowerShellExeUtil.GetPath()
   at Microsoft.VisualStudio.Services.Agent.Listener.Program.MainAsync(IHostContext context, String[] args)

This issue has had no activity in 180 days. Please comment if it is not actually stale

The bot doesn't seem to recognize the no-stale label?


.save.cson not working

on Win 10 x64 pro,
config.cson:
"*":
  "atom-beautify":
    general:
      _analyticsUserId: "61a4bd99-c0e7-4477-9568-90cea835a67e"
  autosave: {}
  core:
    disabledPackages: [
      "markdown-preview-plus"
      "terminal-plus"
      "remote-edit"
      "language-clojure"
      "language-coffee-script"
      "language-csharp"
      "language-gfm"
      "language-go"
      "language-hyperlink"
      "language-less"
      "language-mustache"
      "language-make"
      "language-objective-c"
      "language-perl"
      "language-php"
      "language-property-list"
      "language-python"
      "language-ruby"
      "language-ruby-on-rails"
      "language-sass"
      "language-shellscript"
      "language-toml"
    ]
  editor:
    fontSize: 16
  "exception-reporting":
    userId: "2983d2c3-ed35-a4c1-d230-9df38a3d3faa"
  "language-babel": {}
  "make-executable": {}
  minimap:
    displayMinimapOnLeft: true
  "save-autorun": {}
  welcome:
    showOnStartup: false

.save.cson
# Save Autorun Definitions
#
# For more details on how to create definitions see:
# https://atom.io/packages/save-autorun

#"**.test": "command"

"*": {
  "**/*.js": [
    "babel ${file} -o _${file}"
    "node _${file}"
  ]
  "*.js": [
    "babel ${file} -o _${file}"
    "node _${file}"
  ]
}

and now, I have a index.js on root dir, I use ctrl-s to save the file, but nothing happened...
I don't know what's wrong.

@walfud did you ever figure this out?

No.
I'm sorry that I am not using this plugin now.

I had this same issue and to "solve" it, I had to save .save.cson and reload atom (Ctrl+Shift+F5). I wonder if that would work for you.

Actually I see what's going on. This is a duplicate of Issue #14


Add transmission prerender pass when using KHR_materials_transmission

To better support transmission as defined in the glTF KHR_materials_transmission extension, here's an example of a Helper that can setup the rendering of the opaque scene behind the transmissive object(s).
To enable it, add this line:
var transHelper = new BABYLON.TransmissionHelper({renderSize: 1024}, scene);
Currently, transmissive surfaces just show the IBL through them like shown here:

With the helper running, transmissive surfaces will show the opaque scene behind instead:

Looking for feedback. Is this even the right way to handle this issue?

I am also wondering at what extend we could rely on our realtime filtering feature to ensure an accurate roughness ?

I also wonder if it should be derived into ScreenSpaceRefraction as we are doing for reflection as it can be extended to standard mat ?
I know it is a lot of questions but I love the idea very much !!!

I've added dispose and removed getRenderTargetTextures = null (I think it was necessary in an earlier version of this).
I didn't know that there was an option for realtime-filtering a texture. That sounds great but I'll have to dive into how it works. It looks like it's a flag on a material and not a texture right now and when I enable it, I get shader compile errors.

yup it is only at the material level as we did not split refraction from reflection in this mode which is smthg I could add later.
I bet the error comes from texture 2d not being supported at the moment (only cube) but it would be so awesome to introduce this part :-)

It would be great to have this for 2D refraction textures, for sure.
I have a version of this helper for our viewer's transparency code which is far more complicated (and horribly messy) to handle multiple layers of transmissive objects but, ultimately, it still generates a 2D refraction texture to be used by the material.

We have some checks issue (mostly doc and linting)

Actually, @MiiBond, what is calling dispose on the transmission helper ? I am wondering if it would not leak ?

@sebavan the helper has global scope and only one should ever be created. We don't want it to be cleaned up when the loader is and we don't want another one to be created when another loader is.

@MiiBond  I was thinking on scene.dispose, should we add a scene.onDisposeObservable to call the helper dispose function ?

@sebavan Quite right. I'll open another PR.


Use empty slots in Vehicle.Flags2 to store some info on vehicles?

We could store driver characteristics in Vehicle.Flags2 spare capacity - the remaining 28 flags are unlikely to all get used by any future DLC.
Flags:

IgnoresSpeedLimits: ± value defined elsewhere
IgnoresTrafficLights
IgnoresPrioritySigns
IgnoresVehicleRestrictions
IgnoresLaneRouting: igores lane arrows, and can also change lanes while going straight ahead at junctions
IgnoresBlockedJunctions: likely to cut across oncoming traffic
OpportunisticDriver: weaves through traffic like emergency vehicles do (but to lesser extent)
LearnerDriver: reduced acceleration, increased breaking & nod
DrunkDriver: small random offset on next frame (gives appearance of "wobbly driving")
RecklessDriver: doesn't slow down during bad driving conditions
ImpatientDriver: likely to repath if they get stuck in congestion (eg. see #1518)
etc...

The flags would be derived from info about the driver, and thus can be passed to pathfinder (mainly for IgnoresLaneRouting and IgnoreVehicleRestrictions). Mod options such as Individual Driving Styles, Reckless Drivers, Road condition has a bigger impact on vehicle speed, and Dynamic Lane Selection might become obsolete; they'd just be standard features - maybe keep Individual Driving Styles as a master switch?
We could have our own Enum with the flags for use prior to vehicle spawning, then just | it with the vehicle flags2 when necessary, thus making our custom stuff readily available to vehicle AI.
As citizen state changes, their driving style will change. For example, if they become criminal, they ingore more rules. As they get older, they might drive slower and poor eyesight results in some rule violations. Tourists might not be aware of stuff like Old Town policy. Drivers on way to work are more aggressive. More drunk drivers at night/weekends.

Why reuse existing field and fight with limitation? I don't think it's a good idea to leave "invalid" flag values there in case of mod removal.
The other problem is you will see them as numbers in ModTools and cannot cast value to get names (you can't add named "entries" to the enum) so any tries of m_flag2 to string will return e.g.: 1892323, not a names separated with commas.
I would see that either as new flags field in ExtVehicle or as new flags to existing (like I've already added in Aircraft DLC support PR - ExtVehicleFlags)

ExtDriverFlags? - calculated prior to a cim starting a journey
We'd need a very fast way to cross-reference them to a vehicle b/c vehicle AI will need to interact with them.

There are better options, no need to reuse existing vanilla structure, leave junk when mod gets unsubscribed and most importantly make the mod a way more complex to fix if they decide add few more flags.


Is this normal?

Issue Description:
When launching wifi4wofi it works but he following error messages are displayed in the terminal:
wifi4wofi scan: no process found
/usr/bin/wifi4wofi: line 31: 35207 Killed yad --title="wifi4wofi scan" --text="Scanning for networks" --no-buttons width=300 height=200 --undecorated --splash --fixed --center --skip-taskbar

(wofi:35297): Gtk-CRITICAL **: 11:56:38.109: gtk_widget_set_size_request: assertion 'height >= -1' failed
Error: unknown connection ''

Steps to Reproduce:

Launch wifi4wofi through the terminal.
Observe the error messages mentioned above.

Additional Information:

Arch Linux OS
The issue occurs consistently and persists after updating the system.
Attempts to remove and reinstall the application have been unsuccessful.

Please let me know if you need any further information. Thank you.

It's normal. It has always done the same thing for me, even with the code I forked it from. It's basically a non-issue, but I definitely understand the concern.
FYI, you'll find a lot of programs and scripts will have similar error messages. I get these kinds of errors when running a web browser from the command line, for example.

I'll go ahead and mark this as closed, as ultimately it's a non-issue.


Documentation for 'expect'

My test was failing because I was using a function called 'expect'. I can't seem to find anywhere in the documentation that urges caution of using that name. Having looked through the midje code, I see it's a basic building block on which much is built, so it seems like it's worth documenting.

Sorry for the delay.
Actually, I think the correct approach is for expect not to be exported from midje.sweet.

Sounds like a reasonable option to me. I'll have a stab at fixing it when I'm more awake.

expect will remain an internal detail and probably go away in 2.0


Harbor can not start up after upgrading from 1.2 to the latest version

Set up Harbor with root user and after upgrading 1.2 to the latest version the adminserver can not start up due to permission issue:
Jun  5 01:16:40 <IP_ADDRESS> adminserver[1065]: 2018-06-05T08:16:40Z [FATAL] [main.go:46]: failed to initialize the system: open /etc/adminserver/key: permission denied

it should be introduced by v1.5.0, and impact the upgrade scenario.

This is impacts only master not v1.5
Fixed by #5111


feroxbuster: 2.9.2 -> 2.9.3

Diff: https://github.com/epi052/feroxbuster/compare/refs/tags/v2.9.2...v2.9.3
Changelog: https://github.com/epi052/feroxbuster/releases/tag/v2.9.3
Description of changes

Things done

Built on platform(s)

[ ] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
23.05 Release Notes (or backporting 22.11 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[ ] Fits CONTRIBUTING.md.

Result of nixpkgs-review pr 225854 run on x86_64-linux 1

1 package built:

feroxbuster


web-app-manifest: Update browser support for consistency

Continued discussion from #4357.

Removed footnote 1 (this is just stating how to use the feature and doesn't add any information about how it is supported).
Downgraded Edge support from "yes" to "no". (Technically, Edge does not implement app installation at all. Bing interprets the manifest for store listing, but that is not the Edge user agent. Added a footnote to explain this.)
Downgraded other browsers from "yes" to "partial" to match Chrome. Chrome on desktop is considered to have "partial" support due to not supporting the appinstalled and beforeinstallprompt events on macOS. These events are, to my knowledge, not implemented on any other browser except Chrome on Android. So downgrading all of them to "partial" with a footnote.

@marcoscaceres (editor). Does this match your understanding?
Also I'll note that beforeinstallprompt technically never needs to be fired by a user agent, so arguably a user agent that doesn't fire it is still compliant. But you do need to fire appinstalled when an app is installed. So I think we could just remove "and beforeinstallprompt" from the footnote. Are there any browsers that implement appinstalled but not beforeinstallprompt that would thus become fully supported?

Also I'll note that beforeinstallprompt technically never needs to be fired by a user agent, so arguably a user agent that doesn't fire it is still compliant.

True, tho BeforeInstallPromptEvent interface should be on the global object and whatever attribute is supposed to be the event handler for it (even if the AU doesn't fire it).

But you do need to fire appinstalled when an app is installed. So I think we could just remove "and beforeinstallprompt" from the footnote. Are there any browsers that implement appinstalled but not beforeinstallprompt that would thus become fully supported?

Not sure.

@patrickkettner Any comments?

as usual, @mgiuca is correct

Thanks @patrickkettner!  Ok, bar the merge conflict, then we should be good to go on this!

Thanks folks. Resolved the merge conflict.

Thanks!


Add custom error with variants to parser module

Closes #38
This PR adds the parser::errors submodule using thiserror to handle different variants.
In the parser::parser module, almost all calls to unwrap() have been replaced and functions now return Result<T, JsonPathParserError> instead.
Changing the signature of the public method parse_json_path from Result<JsonPath, pest::error::Error<Rule>> to Result<JsonPath, JsonPathParsingError> is considered a breaking change so I'll leave it you you @besok on how you want to handle bumping versions etc.
There's a bit of extra boilerplate added to the existing functions where Option<T> is now Result<Option<T>, JsonPathParserError> but I've tried to make it as concise as possible.

Closes #38
This PR adds the parser::errors submodule using thiserror to handle different variants. In the parser::parser module, almost all calls to unwrap() have been replaced and functions now return Result<T, JsonPathParserError> instead. Changing the signature of the public method parse_json_path from Result<JsonPath, pest::error::Error<Rule>> to Result<JsonPath, JsonPathParsingError> is considered a breaking change so I'll leave it you you @besok on how you want to handle bumping versions etc. There's a bit of extra boilerplate added to the existing functions where Option<T> is now Result<Option<T>, JsonPathParserError> but I've tried to make it as concise as possible.

Great, Thank you for this PR. It is great and looks very good. I just left a couple of comments in the parser mod.

Changing the signature of the public method parse_json_path from Result<JsonPath, pest::error::Error<Rule>> to Result<JsonPath, JsonPathParsingError> is considered a breaking change so I'll leave it you

The way you do that seems  fine to me, just ensure the error can be converted to_string method as we use it here

Closes #38
This PR adds the parser::errors submodule using thiserror to handle different variants. In the parser::parser module, almost all calls to unwrap() have been replaced and functions now return Result<T, JsonPathParserError> instead. Changing the signature of the public method parse_json_path from Result<JsonPath, pest::error::Error<Rule>> to Result<JsonPath, JsonPathParsingError> is considered a breaking change so I'll leave it you you @besok on how you want to handle bumping versions etc. There's a bit of extra boilerplate added to the existing functions where Option<T> is now Result<Option<T>, JsonPathParserError> but I've tried to make it as concise as possible.

The PR looks very good. Nice job! I added just a couple of comments, just to correct a little.

Changing the signature of the public method parse_json_path from Result<JsonPath, pest::error::Error<Rule>> to Result<JsonPath, JsonPathParsingError> is considered a breaking change so I'll leave it you you @besok on how you want to handle bumping versions etc.

Yeah, it seems fine, but I would ensure the new error enum has a to_string implementation as we convert it to string here and either change TryInto or add to_string

@besok  thank you for the feedback! I'll implement these changes in the coming week.

@besok I've refactored out most of the unwrap_or statements, but I'm a bit unsure of what the error messages returned from ok_or actually should be. Open to any and all suggestions 😄

@CalemRoelofs
Yeah, looks good to me. The messages just say where is the error and we can have a look there. It is enough I think.

Ah, the build error with Clippy, you need to fix a small warning
Just run locally:
cargo clippy --workspace --tests --all-features -- -D warnings

Ah, the build error with Clippy, you need to fix a small warning Just run locally:
cargo clippy --workspace --tests --all-features -- -D warnings

Fixed now :)

thank you very much for the PR!


More admin rights

Hi, can you please give me more admin rights to make this repo alive? I would like to add many things such as :

Actions to automate tests
Discussions to create polls and decide on the direction of this repo
... (still thinking of the rest)

You can also consider transforming your account into an organization.

I invited you to join as a collaborator. Does that help?

Yes, it is good!
Can you enable Discussions too? It is under the repository Settings/General/Features.
UI
Here is what you should find.

Done!


New lab based on [no-ratelimiting-bug]

New Lab based on no ratelimiting vulnerability.

Thank you very much for your contribution, we really appreciate it!
One small remark, can you also make a write-up using this as a example template:
https://github.com/blabla1337/skf-labs/blob/master/kbid-1-filename-injection.md
Also don't forget to add your write-up in the SUMMARY.md file :)

Thank you for the response, I was actually working on the writeup, I'll add it in a few minutes.
P.S: I noticed that there are several styling issues on readme file (the one's with the % formatters), do you mind me fixing them?

Aah super, thanks. No those are intended, we use Gitbook to display the Markdown and write-ups so please leave them :)
You can check them here:
https://owasp-skf.gitbook.io/asvs-write-ups/

Dear Glenn,
I've added the writeup just now,
If you could approve the changes, then i can put the link to the lab's directory on the summary.md file, can you please assign a kbid id also?
Regards,
Abhi


Add Gift Cards

I want to merge this change because resolve #3899

TODO:

[x] Create gift card model
[x] CRUD operation from GraphQL API
[x] Validate the unique code for Voucher and Gift Card models
[x] Connect gift card with checkout
[x] Integrate gift cards with payments

Create separate issues for:

[ ] Possibility to create gift card as product in shop
[ ] Block discount and gift card for orders with a gift card inside
[ ] Campaigns with bulk deactivate and bulk create
[ ] Gift card operation history
[ ] Reports
[ ] Voucher and Gift Card length from settings

Pull Request Checklist

[ ] Privileged views and APIs are guarded by proper permission checks.
[ ] All visible strings are translated with proper context.
[ ] All data-formatting is locale-aware (dates, numbers, and so on).
[ ] Database queries are optimized and the number of queries is constant.
[ ] Database migration files are up to date.
[ ] The changes are tested.
[ ] The code is documented (docstrings, project documentation).
[ ] GraphQL schema and type definitions are up to date.
[ ] Changes are mentioned in the changelog.

Is it planned for mutations to return the gift card object? Otherwise, looks like it is missing?

Is it planned for mutations to return the gift card object? Otherwise, looks like it is missing?
GiftCardVerify returns gift card object when you pass the gift card code to mutation.

I mean for GiftCardUpdate and GiftCardCreate

I mean for GiftCardUpdate and GiftCardCreate

These mutations return a gift card object to us.

@fowczarek We'll have to sort out a better way to handle validation errors. We raise a lot of different messages in this PR, while a lot of them seem quite similar (to the end user in particular). E.g. we have:
For promo codes:
ValidationError({"promo_code": "Promo code does not exists."})
For gift cards:
ValidationError({"code": "Gift card with this code is not avaible."})
ValidationError({"code": "Incorrect gift card code."})
ValidationError({"is_active": "Gift card is inactive."})
ValidationError({"expiration_date": "Gift card expired."})
ValidationError({"promo_code": "Gift card with given code is invalid."})
For vouchers:
ValidationError({"promo_code": "Voucher with given code is invalid."})
ValidationError({"promo_code": "Voucher is not applicable to that checkout."})
ValidationError({"code": "Voucher with this code is not avaible."})
First of all, messages are mixed up with the field names, we use code or promo_code for field names, while in messages we either use "gift card", "promo code" or "voucher code". I don't have yet an idea how to fix it, just writing it down to not forget about it.

"Promo code does not exists" >> Promo code does not exist
(Other you mention there above are okay linguistically)

@fowczarek We'll have to sort out a better way to handle validation errors. We raise a lot of different messages in this PR, while a lot of them seem quite similar (to the end user in particular).

@maarcingebala

Maby we can create PromoCodeValidationError with an optional argument promo_code_type(Probably some ENUM with GIFT_CARD, PROMO_CODE or VOUCHER).
With this solution, we will be using 3 types of errors.  E.g. we can have:

PromoCodeValidationError()  - ValidationError({"promo_code": "Incorrect promo code."})

PromoCodeValidationError(GIFT_CARD) - ValidationError({"gift_card_code": "Incorrect gift card code."})

PromoCodeValidationError(VOUCHER) - ValidationError({"voucher_code": "Incorrect voucher code."})

We also can extend this solution and use some other enum with a special error message. E.g. we can have:

PromoCodeValidationError(GIFT_CARD, EXPIRED) - ValidationError({"gift_card", "Gift card expired"}) or  ValidationError({"expiration_date", "Gift card expired"})

PromoCodeValidationError(VOUCHER, INCORRECT)  - ValidationError({"voucher_code": "Incorrect voucher code."})

We need to think if we prefer general field name promo_code for all errors, or we prefer using specific names e.g. gift_card_code, voucer_code, is_active, expiration_date for some errors and promo_code for generic error.


cosmic-settings-daemon: unstable-2023-12-29 -> 1.0.0-alpha.2

Description of changes

Things done

Built on platform(s)

[x] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)

[ ] sandbox = relaxed
[ ] sandbox = true

[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[x] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
24.11 Release Notes (or backporting 23.11 and 24.05 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[ ] Fits CONTRIBUTING.md.

Add a :+1: reaction to pull requests you find important.

Result of nixpkgs-review pr 344518 run on x86_64-linux 1

1 package built:

cosmic-settings-daemon


What is the best way to create inputs that would run the code to completion quickly?

It's typically quite helpful to have a 'toy' dataset around that one can quickly use execute the code from start to finish. This serves as a reasonable 'smoke test' that lets one know that some code refactoring didn't do major damage. After such a 'smoke test', one would then typically go run the real test (which may take tens of minutes or more). This dataset only has to achieve two goals:

it must be acceptable input for the code
it should execute fairly quickly

It doesn't have to make mathematical sense as input, nor produce reasonable output. Issue https://github.com/OpenSourcePolicyCenter/dynamic/issues/42 seems to indicate that we could now choose a very small J and S - is that correct? If so, is this likely to make the fsolves faster? For example, we could set J=3 and S=8. Is it easy to describe how one would create such a 'mini-input'? If so, could someone sketch out the necessary steps? I could dig in here, I just wonder how much expertise one would need to create such an input dataset.

The way a couple of the files are set up, we need to get some updated data before we can change the size of J.  Mostly just the income profiles are holding that up.  There is only one thing (that I know of) holding us back on changing S, but if we don't really care about sensible input, that is quite easy to change as well.  If we only change those 2 items, and then use all the same parameter values as in run_simulation.py, that should work.

But if we don't need sensible output, just something to run, then we ought
to be able to have J=1.  We can make the e's such that the representative
households' income is flat or not- I don't see why it wouldn't converge
either way.  But we should of course not be trying to match the data with
this (i.e. to the extent the chi_b, chi_n estimation runs, we should just
fit a distribution of hours/wealth that is pretty even).
On Mon, Jun 29, 2015 at 2:23 PM, Evan Magnusson<EMAIL_ADDRESS>wrote:

The way a couple of the files are set up, we need to get some updated data
before we can change the size of J. Mostly just the income profiles are
holding that up. There is only one thing (that I know of) holding us back
on changing S, but if we don't really care about sensible input, that is
quite easy to change as well. If we only change those 2 items, and then use
all the same parameter values as in run_simulation.py, that should work.
—
Reply to this email directly or view it on GitHub
https://github.com/OpenSourcePolicyCenter/dynamic/issues/78#issuecomment-116804047
.

for better or worse, I came up with this:
https://github.com/OpenSourcePolicyCenter/dynamic/pull/84
seems to work ok for now.


Fix Docker Prerelease Tag Syntax

Closes: #3206
What's Changed
Changed to use + instead of - for Python version signifier when using the semver format tag
Previously it was attempting 2.0.0-alpha.1-py3.7 which isn't valid SemVer. This label would have been reject and was confirmed in testing. In fact, our current syntax for our stable builds is incorrect. BNF on the SemVer site states that -alphanum.num is for pre-release signifiers. +alphanum.num is for build numbers which is more applicable for our Python-specific build signifier. We probably should publish 1.5.14+py3.7.
Backup raw tag to take the literal value that is passed in, assuming something goes awry with the approach above.
Suffixed with r just in case docker/build-push-action or docker/metadata-action get sad with two tags that result in the same value.
Also:

Removed the non-Python-version specific tag as it made discovery a bit opaque as to which tag was failing
Didn't address https://github.com/nautobot/nautobot/issues/3206#issuecomment-1420663909 because it seems some are still experiencing dist-info problems: https://github.com/python-poetry/poetry/issues/6815

TODO

[x] Explanation of Change(s)
[x] Added change log fragment(s) (for more information see the documentation)
[NA] Attached Screenshots, Payload Example
[NA] Unit, Integration Tests
[NA] Documentation Updates (when adding/changing features)
[NA] Example Plugin Updates (when adding/changing features)
[NA] Outline Remaining Work, Constraints from Design

Seems to me we should fix this in our local builds and in the development containers, too?

Shouldn't we be making a similar change to the release.yml?

This is meant to address this specific issue. We don't have these problems in release.yml because while not technically correct, 1.5.15-py3.7 is valid enough of SemVer per their BNF.
Long-term I think we should discuss moving to 1.5.15+py3.7 but now's not the time to make that significant change for people just to be pedantic.
If we ever shipped a 1.5.10-hotfix.1 then we'd incur a problem with release.yml.


Issue Tab - Restrict past values for posted date for work updates

Users now are able to manually add a posted date, this creates a problem where a user can add a date that is  before an existing approved update. We need to handle that

Add min date prop
Change ordering of issue updates to order by posted_date

if Issue history changes to be displayed by posted date rather than input date, this becomes a big deal!

@Connor1892  Are we waiting for further information on this card?

Need to test it to see if it is already completed


Views.update upon static select action not updating modal

https://user-images.githubusercontent.com/86734693/185929505-d678befb-a623-44e0-abd3-ce037ff542cf.mov
Description
Hello,
I've been working with Slack support via email and was directed here to check into my issue.
I have a modal with several static selects (1 for each day of the week) and depending on which option the user selects, it will update and populate the modal with more static selects. My issue is that sometimes when the user is selecting an option, it will not correctly update the modal. It acknowledges the request, no error is thrown, and it just stays the same. If you go on to the next day it will often "push through" the correct blocks with the next views.update call. The biggest headache is that this issue is intermittent. It doesn't happen always but frequently enough to cause regular issues for users.
I've tried to alter my code in several ways and still haven't found the issue.
** I should note I did find issue #1080 but it was closed without a solution. I've done much of everything suggested but to no avail. :(
Any help is much appreciated!
What type of issue is this? (place an x in one of the [ ])

[ x] bug
[ ] enhancement (feature request)
[ ] question
[ ] documentation related
[ ] example code related
[ ] testing related
[ ] discussion

Requirements (place an x in each of the [ ])

[ x] I've read and understood the Contributing guidelines and have done my best effort to follow them.
[x ] I've read and agree to the Code of Conduct.
[ x] I've searched for any related issues and avoided creating a duplicate issue.

Bug Report
Filling out the following details about bugs will help us solve your issue sooner.
Reproducible in:
package version: Bolt 3.12.1
node version: v18.2.0
OS version(s): MacOS Montery 12.2.1
Steps to reproduce:

Select an option with a static select.
If the view updates, good. If not,
Select another option or continue to the next day
If the next select was used and it updates, it will push both updates (current block and previous unupdated block)

Expected result:
I expect that the modal will update on each action of the first static select. There should appear either 1 more static select, or 3, depending on which option is first selected.
Actual result:
Intermittently the view will not show any updates. The method is called and the blocks pushed are correct. It just doesn't actually show any update to the modal.
Attachments:
Here's a code snippet which receives the static select action and based on the selection it updates the modal with the blocks it creates.
if(inCheck === 'in') {

              let plt = payload.selected_option.text.text;
              let plv = payload.selected_option.value;

              if(payload.selected_option.value === 'Banked Time') {

                //Pop off all blocks except the start time block (first element)
                  editingBlock.elements = [];

                //Add additional elements to the block to be updated
                editingBlock.elements.push(inBlock(dayNum, plt, plv), bankedHours, workedBlock, workedHours); //these elements are premade with options depending on selected option

                //Fix the header photo; remove and re-add to clear extra fields
                oldView.blocks.shift();
                oldView.blocks.unshift(bB.image(appImages.payrollMenu, 'FL Logo'))

                return oldView;

                //Update view with the new elements pushed into the block

              }
              else if(payload.selected_option.value === 'Personal (Paid)' || payload.selected_option.value === 'Annual Leave') { //test selected option for a time off type and if so, update the block with additional static selects

                //Pop off all blocks except the start time block (first element)
                editingBlock.elements = [];

                //Add additional elements to the block to be updated
                editingBlock.elements.push(inBlock(dayNum, plt, plv), ptoHours, workedBlock, workedHours); //these elements are premade with options depending on selected option

                //Fix the header photo; remove and re-add to clear extra fields
                oldView.blocks.shift();
                oldView.blocks.unshift(bB.image(appImages.payrollMenu, 'FL Logo'))

                return oldView;

                //Update view with the new elements pushed into the block
                //await updateViewAction(client, body, bB.modal(oldView.callback_id, oldView.private_metadata, oldView.title.text, oldView.submit.text, oldView.close.text, oldView.blocks), oldView.hash);

              } else if (payload.selected_option.value === 'Off') {

                //Pop off all blocks except the start time block (first element)
                while(editingBlock.elements.length > 1) {
                  editingBlock.elements.pop();
                };

                //Fix the header photo; remove and re-add to clear extra fields
                oldView.blocks.shift();
                oldView.blocks.unshift(bB.image(appImages.payrollMenu, 'FL Logo'))

                return oldView;

                //Update view with the new elements pushed into the block
                //await updateViewAction(client, body, bB.modal(oldView.callback_id, oldView.private_metadata, oldView.title.text, oldView.submit.text, oldView.close.text, oldView.blocks), oldView.hash);

              } else if (payload.selected_option.value === 'Stat') {

                //Pop off all blocks except the start time block (first element)
                editingBlock.elements = [];

                //Add additional elements to the block to be updated
                editingBlock.elements.push(inBlock(dayNum, plt, plv), ptoSpecial, workedBlock, workedHours);

                //Fix the header photo; remove and re-add
                oldView.blocks.shift();
                oldView.blocks.unshift(bB.image(appImages.payrollMenu, 'FL Logo'))

                return oldView;

                //Update view
                //await updateViewAction(client, body, bB.modal(oldView.callback_id, oldView.private_metadata, oldView.title.text, oldView.submit.text, oldView.close.text, oldView.blocks), oldView.hash);

              } else if (payload.selected_option.value === 'Bereavement' || payload.selected_option.value === 'Cultural Leave Day') {

                //Pop off all blocks except the start time block (first element)
                editingBlock.elements = [];

                //Add additional elements to the block to be updated
                editingBlock.elements.push(inBlock(dayNum, plt, plv), ptoSpecial);

                //Fix the header photo; remove and re-add
                oldView.blocks.shift();
                oldView.blocks.unshift(bB.image(appImages.payrollMenu, 'FL Logo'))

                return oldView;

                //Update view
                //await updateViewAction(client, body, bB.modal(oldView.callback_id, oldView.private_metadata, oldView.title.text, oldView.submit.text, oldView.close.text, oldView.blocks), oldView.hash)

              } else if (payload.selected_option.value === 'Personal (Unpaid)') {

                //Pop off all blocks except the start time block (first element)
                editingBlock.elements = [];

                //Add additional elements to the block to be updated
                editingBlock.elements.push(inBlock(dayNum, plt, plv), unpaidBlock, workedBlock, workedHours);

                //Fix the header photo; remove and re-add
                oldView.blocks.shift();
                oldView.blocks.unshift(bB.image(appImages.payrollMenu, 'FL Logo'))

                return oldView;

                //Update view
                //await updateViewAction(client, body, bB.modal(oldView.callback_id, oldView.private_metadata, oldView.title.text, oldView.submit.text, oldView.close.text, oldView.blocks), oldView.hash)

              } else {
                //Pop off all blocks except the start time block (first element)
                editingBlock.elements = [];

                //Add additional elements to the block to be updated
                editingBlock.elements.push(inBlock(dayNum, plt, plv), afternoonBlock);

                //Fix the header photo; remove and re-add
                oldView.blocks.shift();
                oldView.blocks.unshift(bB.image(appImages.payrollMenu, 'FL Logo'))

                return oldView;

                //Update view
                //await updateViewAction(client, body, bB.modal(oldView.callback_id, oldView.private_metadata, oldView.title.text, oldView.submit.text, oldView.close.text, oldView.blocks), oldView.hash);
              }
            }
          }

Hello! Are you able to share more of your application code? Having the full app code for generating the modal initially, attaching all the relevant handlers, updating the modal, etc. would make reproducing the issue in the first place much easier.
Also understanding what receiver you are using in your application (HTTPReceiver, SocketModeReceiver) is also helpful.
Finally, what kind of plan the workspace you are seeing this issue on would also help.
My first step towards helping will be to reproduce the issue, so if you can help me get there, that would speed up any assistance we can provide.
Cheers!

Hi!
I am using the HTTPReceiver with some custom Express routes. Well, they're enabled but we don't have any actually setup currently. WIP.
It is a Slack for non-profits, so whichever type that equates to. I believe it's the lowest tier paid plan.
And for the code:
This is the function which generates the timesheet blocks a user initially interacts with:
//
//  Generate manual fill sheet blocks
//  Used for payroll modals
//
//
function generateTimesheetInputBlocks(timesheet, startNum, endNum) {
  try {
    let periodDays = new PeriodDays(timesheet.p_start); //takes a start day and extrapolates it into 14 dates (period)

    let dates = [];

    for(let x in periodDays) {
      dates.push(periodDays[x]);
    };

    let initialStart = {
      "text": {
        "type": "plain_text",
        "text": "Off",
        "emoji": false
      },
      "value": "Off"
    };

    let blocks = [];

    blocks.push(bB.div);

    for(let i = startNum; i<endNum; i++) {

      let title  = {
        "type": "section",
        "text":
          {
            "type": "mrkdwn",
            "text": `*${format(dates[i], 'PPPP')}*`
          }

      }//SUNDAY MORNING START WEEK 1

      let inputs = {
        "type": "actions",
        "block_id": `day${i}hours`,
        "elements": [
          {
            "type": "static_select",
            "placeholder": {
              "type": "plain_text",
              "text": "Start time...",
              "emoji": false
            },
            "action_id": `day${i}in`,
            "initial_option": initialStart,
            "option_groups": [
              {
                "label": {
                  "type": "plain_text",
                  "text": "Common Starts"
                },
                "options": commonStarts,
              },
              {
                "label": {
                  "type": "plain_text",
                  "text": "Time Off"
                },
                "options": offTypes,
              },
              {
                "label": {
                  "type": "plain_text",
                  "text": "Other Hours"
                },
                "options": buildTimeOptionsArrayAM().concat(buildTimeOptionsArrayPM()),
              }
            ]
          }
        ]
      }

      let notes = {
        "type": "input",
        "block_id": `day${i}notes`,
        "optional": true,
        "element": {
          "type": "plain_text_input",
          "action_id": `day${i}notes`,
          "max_length": 50
        },
        "label": {
          "type": "plain_text",
          "text": "Notes",
          "emoji": false
        }
      }

      blocks.push(title, inputs, notes, bB.div);
    };

    return blocks;
  } catch (error) {
    logger.error(error);
  }
};

This is the handler for when a user chooses a selection option from the modal above (start time or time off type)
//Handler for when a start type is selected for each day
app.action(/^day(\d|1[0-3])(in|out)$/, async ({ ack, payload, body, client}) => {
  try {
    await ack();

    if(payload.selected_option) {

      async function buildBlocks (ack, payload, body, client) {
        let mfts = JSON.parse(body.view.private_metadata); //original timesheet object for holding data

         //contains dates for each day of the pay period and pushes those dates to an array for each date
        let periodDays = new PeriodDays(mfts.p_start);
        let daysArray = [];
        for(let x in periodDays) {
          daysArray.push(periodDays[x]);
        };

        //this whole section is for finding the which day/block is being updated. Finds the block id, action_id and splits it into the day to make sure it's an 'in' block (first dropdown) and not an out block (second dropdwon)
        let blockValues = body.view.state.values[`${body.actions[0].block_id}`];

        let actionIds = [];

        for(let x in blockValues) {
          actionIds.push(x);
        };

        let splitDay = actionIds[0].split('day')[1];
        let dayNum = parseInt(splitDay.split('in')[0]);
        let inCheck = payload.action_id.split(/^day(\d|1[0-3])(in)$/)[2];

        //
        //  Premade options
        //

        //PTO hours if a PTO with variable hours is selected
           let ptoHours =
           {
             "type":"static_select",
             "action_id":`day${dayNum}ptoused`,
             "placeholder":{
                "type":"plain_text",
                "text":"PTO Hours Used...",
                "emoji":false
             },
             "initial_option": {
               "text": {
                 "type": "plain_text",
                 "text": "8 PTO Hours",
                 "emoji": false
               },
               "value": "8"
             },
             "options": [
               {
                 "text": {
                   "type": "plain_text",
                   "text": "4 PTO Hours",
                   "emoji": false
                 },
                 "value": "4"
               },
               {
                 "text": {
                   "type": "plain_text",
                   "text": "8 PTO Hours",
                   "emoji": false
                 },
                 "value": "8"
               }
             ]
          };

          function createBankedHours() {
            let selects = [];
            for (let x = 0.5; x<=8.0; x = x+0.5) {
              selects.push(
                {
                  "text": {
                    "type": "plain_text",
                    "text": `${x.toString()} Banked Hours`,
                    "emoji": false
                  },
                  "value": x.toString()
                },
              )
            }

            return {
              "type":"static_select",
              "action_id":`day${dayNum}bankedused`,
              "placeholder":{
                 "type":"plain_text",
                 "text":"Banked Hours Used...",
                 "emoji":false
              },
              "initial_option": {
                "text": {
                  "type": "plain_text",
                  "text": "8 Banked Hours",
                  "emoji": false
                },
                "value": "8"
              },
              "options": selects
           };
          }

          let bankedHours = createBankedHours();

          //Worked hours if they worked in addition to taking PTO
          let workedHours =
            {
              "type":"static_select",
              "action_id":`day${dayNum}workedextra`,
              "placeholder":{
                 "type":"plain_text",
                 "text":"Additional hours worked...",
                 "emoji":false
              },
              "initial_option": {
                "text": {
                  "type": "plain_text",
                  "text": "0 Worked Hours",
                  "emoji": false
                },
                "value": "0"
              },
              "options": [
                {
                  "text": {
                    "type": "plain_text",
                    "text": "0 Worked Hours",
                    "emoji": false
                  },
                  "value": "0"
                },
                {
                  "text": {
                    "type": "plain_text",
                    "text": "1 Worked Hours",
                    "emoji": false
                  },
                  "value": "1"
                },
                {
                  "text": {
                    "type": "plain_text",
                    "text": "2 Worked Hours",
                    "emoji": false
                  },
                  "value": "2"
                },
                {
                  "text": {
                    "type": "plain_text",
                    "text": "3 Worked Hours",
                    "emoji": false
                  },
                  "value": "3"
                },
                 {
                   "text": {
                     "type": "plain_text",
                     "text": "4 Worked Hours",
                     "emoji": false
                   },
                   "value": "4"
                 },
                 {
                   "text": {
                     "type": "plain_text",
                     "text": "5 Worked Hours",
                     "emoji": false
                   },
                   "value": "5"
                 },
                 {
                   "text": {
                     "type": "plain_text",
                     "text": "6 Worked Hours",
                     "emoji": false
                   },
                   "value": "6"
                 },
                 {
                   "text": {
                     "type": "plain_text",
                     "text": "7 Worked Hours",
                     "emoji": false
                   },
                   "value": "7"
                 },
                 {
                   "text": {
                     "type": "plain_text",
                     "text": "8 Worked Hours",
                     "emoji": false
                   },
                   "value": "8"
                 },
                 {
                   "text": {
                     "type": "plain_text",
                     "text": "9 Worked Hours",
                     "emoji": false
                   },
                   "value": "9"
                 },
                 {
                   "text": {
                     "type": "plain_text",
                     "text": "10 Worked Hours",
                     "emoji": false
                   },
                   "value": "10"
                 },
                 {
                  "text": {
                    "type": "plain_text",
                    "text": "11 Worked Hours",
                    "emoji": false
                  },
                  "value": "11"
                },
                {
                  "text": {
                    "type": "plain_text",
                    "text": "12 Worked Hours",
                    "emoji": false
                  },
                  "value": "12"
                },
                {
                  "text": {
                    "type": "plain_text",
                    "text": "13 Worked Hours",
                    "emoji": false
                  },
                  "value": "13"
                },
                {
                  "text": {
                    "type": "plain_text",
                    "text": "14 Worked Hours",
                    "emoji": false
                  },
                  "value": "14"
                },
                {
                  "text": {
                    "type": "plain_text",
                    "text": "15 Worked Hours",
                    "emoji": false
                  },
                  "value": "15"
                },
                {
                 "text": {
                   "type": "plain_text",
                   "text": "16 Worked Hours",
                   "emoji": false
                 },
                 "value": "16"
               }
              ]
           };

           //Standard end times for shifts if the staff worked
        let afternoonBlock = {
          "type": "static_select",
          "placeholder": {
            "type": "plain_text",
            "text": "End time...",
            "emoji": false
          },
          "action_id": `day${dayNum}out`,
          "initial_option": {
            "text": {
              "type": "plain_text",
              "text": "N/A",
              "emoji": false
            },
            "value": 'N/A'
          },
          "option_groups": [
            {
              "label": {
                "type": "plain_text",
                "text": "Common Ends"
              },
              "options": commonEnds,
            },
            {
              "label": {
                "type": "plain_text",
                "text": "Other Hours"
              },
              "options": buildTimeOptionsArrayAM().concat(buildTimeOptionsArrayPM()),
            }
          ]
        }

        //True/False block to check if staff worked or not along with PTO
        let workedBlock = {
          "type":"static_select",
          "action_id":`day${dayNum}worked`,
          "placeholder":{
             "type":"plain_text",
             "text":"Did you work as well?",
             "emoji":false
          },
          "initial_option": {
            "text": {
              "type": "plain_text",
              "text": "I did not work",
              "emoji": false
            },
            "value": 'false'
          },
          "options": [
            {
              "text": {
                "type": "plain_text",
                "text": "I worked",
                "emoji": false
              },
              "value": 'true'
            },
            {
              "text": {
                "type": "plain_text",
                "text": "I did not work",
                "emoji": false
              },
              "value": 'false'
            }
          ]
       };

       //Block with 8 Hours as the only option in the event they choose certain PTO (Bereavement)
       let ptoSpecial = {
        "type":"static_select",
        "action_id":`day${dayNum}ptospecial`,
        "placeholder":{
           "type":"plain_text",
           "text":"PTO Hours Used...",
           "emoji":false
        },
        "initial_option": {
          "text": {
            "type": "plain_text",
            "text": "8 PTO Hours",
            "emoji": false
          },
          "value": '8'
        },
        "options": [
          {
            "text": {
              "type": "plain_text",
              "text": "8 PTO Hours",
              "emoji": false
            },
            "value": '8'
          }
        ]
     };

     //No hours block for when Unpaid day is selected
     let unpaidBlock = {
      "type":"static_select",
      "action_id":`day${dayNum}ptounpaid`,
      "placeholder":{
         "type":"plain_text",
         "text":"Hours...",
         "emoji":false
      },
      "initial_option": {
        "text": {
          "type": "plain_text",
          "text": "0 Hours",
          "emoji": false
        },
        "value": '0'
      },
      "options": [
        {
          "text": {
            "type": "plain_text",
            "text": "0 Hours",
            "emoji": false
          },
          "value": '0'
        }
      ]
    };

    function inBlock(dayNum, text = 'N/A', value = 'N/A') {
      return {

            "type": "static_select",
          "placeholder": {
            "type": "plain_text",
            "text": "Start time...",
            "emoji": false
          },
          "action_id": `day${dayNum}in`,
          "initial_option": {
            "text": {
            "type": "plain_text",
            "text": text,
            "emoji": false
          },
          "value": value,
          },
          "option_groups": [
            {
              "label": {
                "type": "plain_text",
                "text": "Common Starts"
              },
              "options": commonStarts,
            },
            {
              "label": {
                "type": "plain_text",
                "text": "Time Off"
              },
              "options": offTypes,
            },
            {
              "label": {
                "type": "plain_text",
                "text": "Other Hours"
              },
              "options": buildTimeOptionsArrayAM().concat(buildTimeOptionsArrayPM()),
            }
          ]
      }
    }
    //
    //  end of premade options
    //

    //logic for how to decide which dropdowns to add based on the input from the first dropdown of the

        //old view is the view when the static select action is taken
        //use the old view to find the associated day and update those blocks as neccesary
        let oldView = body.view;
        let blockNum = payload.block_id //block id for the day we are updating
        let editingBlock = {}; //the block for the day we are updating

        //go through the blocks, find the block, and set it to the editingBlock for updates
        for(let i = 0; i<oldView.blocks.length; i++) {
          for (let x in oldView.blocks[i]) {
            if (oldView.blocks[i][x] === blockNum) {
              editingBlock = oldView.blocks[i];
              break;
            }
          }
        }

        //make sure it's the first static select element in the block (ie. day0in and not day0out)
        //then check what the selected option is, add the additional selects, and update the view
        if(inCheck === 'in') {

          let plt = payload.selected_option.text.text;
          let plv = payload.selected_option.value;

          if(payload.selected_option.value === 'Banked Time') {

            //Pop off all blocks except the start time block (first element)
              editingBlock.elements = [];

            //Add additional elements to the block to be updated
            editingBlock.elements.push(inBlock(dayNum, plt, plv), bankedHours, workedBlock, workedHours); //these elements are premade with options depending on selected option

            //Fix the header photo; remove and re-add to clear extra fields
            oldView.blocks.shift();
            oldView.blocks.unshift(bB.image(appImages.payrollMenu, 'FL Logo'))

            return oldView;

            //Update view with the new elements pushed into the block

          }
          else if(payload.selected_option.value === 'Personal (Paid)' || payload.selected_option.value === 'Annual Leave') { //test selected option for a time off type and if so, update the block with additional static selects

            //Pop off all blocks except the start time block (first element)
            editingBlock.elements = [];

            //Add additional elements to the block to be updated
            editingBlock.elements.push(inBlock(dayNum, plt, plv), ptoHours, workedBlock, workedHours); //these elements are premade with options depending on selected option

            //Fix the header photo; remove and re-add to clear extra fields
            oldView.blocks.shift();
            oldView.blocks.unshift(bB.image(appImages.payrollMenu, 'FL Logo'))

            return oldView;

            //Update view with the new elements pushed into the block
            //await updateViewAction(client, body, bB.modal(oldView.callback_id, oldView.private_metadata, oldView.title.text, oldView.submit.text, oldView.close.text, oldView.blocks), oldView.hash);

          } else if (payload.selected_option.value === 'Off') {

            //Pop off all blocks except the start time block (first element)
            while(editingBlock.elements.length > 1) {
              editingBlock.elements.pop();
            };

            //Fix the header photo; remove and re-add to clear extra fields
            oldView.blocks.shift();
            oldView.blocks.unshift(bB.image(appImages.payrollMenu, 'FL Logo'))

            return oldView;

            //Update view with the new elements pushed into the block
            //await updateViewAction(client, body, bB.modal(oldView.callback_id, oldView.private_metadata, oldView.title.text, oldView.submit.text, oldView.close.text, oldView.blocks), oldView.hash);

          } else if (payload.selected_option.value === 'Stat') {

            //Pop off all blocks except the start time block (first element)
            editingBlock.elements = [];

            //Add additional elements to the block to be updated
            editingBlock.elements.push(inBlock(dayNum, plt, plv), ptoSpecial, workedBlock, workedHours);

            //Fix the header photo; remove and re-add
            oldView.blocks.shift();
            oldView.blocks.unshift(bB.image(appImages.payrollMenu, 'FL Logo'))

            return oldView;

            //Update view
            //await updateViewAction(client, body, bB.modal(oldView.callback_id, oldView.private_metadata, oldView.title.text, oldView.submit.text, oldView.close.text, oldView.blocks), oldView.hash);

          } else if (payload.selected_option.value === 'Bereavement' || payload.selected_option.value === 'Cultural Leave Day') {

            //Pop off all blocks except the start time block (first element)
            editingBlock.elements = [];

            //Add additional elements to the block to be updated
            editingBlock.elements.push(inBlock(dayNum, plt, plv), ptoSpecial);

            //Fix the header photo; remove and re-add
            oldView.blocks.shift();
            oldView.blocks.unshift(bB.image(appImages.payrollMenu, 'FL Logo'))

            return oldView;

            //Update view
            //await updateViewAction(client, body, bB.modal(oldView.callback_id, oldView.private_metadata, oldView.title.text, oldView.submit.text, oldView.close.text, oldView.blocks), oldView.hash)

          } else if (payload.selected_option.value === 'Personal (Unpaid)') {

            //Pop off all blocks except the start time block (first element)
            editingBlock.elements = [];

            //Add additional elements to the block to be updated
            editingBlock.elements.push(inBlock(dayNum, plt, plv), unpaidBlock, workedBlock, workedHours);

            //Fix the header photo; remove and re-add
            oldView.blocks.shift();
            oldView.blocks.unshift(bB.image(appImages.payrollMenu, 'FL Logo'))

            return oldView;

            //Update view
            //await updateViewAction(client, body, bB.modal(oldView.callback_id, oldView.private_metadata, oldView.title.text, oldView.submit.text, oldView.close.text, oldView.blocks), oldView.hash)

          } else {
            //Pop off all blocks except the start time block (first element)
            editingBlock.elements = [];

            //Add additional elements to the block to be updated
            editingBlock.elements.push(inBlock(dayNum, plt, plv), afternoonBlock);

            //Fix the header photo; remove and re-add
            oldView.blocks.shift();
            oldView.blocks.unshift(bB.image(appImages.payrollMenu, 'FL Logo'))

            return oldView;

            //Update view
            //await updateViewAction(client, body, bB.modal(oldView.callback_id, oldView.private_metadata, oldView.title.text, oldView.submit.text, oldView.close.text, oldView.blocks), oldView.hash);
          }
        }
      }

      let oldView = await buildBlocks(ack, payload, body, client);

      await sleep(1000)
      function sleep(ms) {
        return new Promise((resolve) => {
        setTimeout(resolve, ms);
        });
      }

      await updateViewAction(client, body, bB.modal(oldView.callback_id, oldView.private_metadata, oldView.title.text, oldView.submit.text, oldView.close.text, oldView.blocks), oldView.hash);

    } else {

      await ack();

      pushView(client, body.trigger_id, bB.modal('v_prErrors', '', 'Empty Start Value', 'void', 'Close', [bB.text('void', 'Ensure you select a start time or time off type. Starting selections cannot be empty.')]))
    }
  } catch (err) {
    logger.error(err)
  }
});

If there is any other code that would be helpful please let me know! I apologize for the mess!

Hello! Wondering if there's been any headway with this issue. I've been tweaking my code but can't figure it out. It seems like as the modal fills up more and more the blocks are less and less responsive. I've tried logging out which blocks are pushed and the call to update is correct it just isn't manifesting on the modal itself.

Just commenting to keep this active. Still having this issue. I've noticed it gets progressively worse the more static selects I fill in the modal. The first couple works fine but then they get more and more prone to not updating as users continue to fill in the selects.

Sorry for the lack of response on my end.
Can you share code for the updateViewAction method? I see you are using the view hash in some form. I'd like to see how you are using that.
At a high level, this smells like maybe a race condition. Using the view hash is a means around that. Are you seeing any relevant errors pop up in the error log at all, by the way?

Hey @mjcbfl , this is not the complete code. I am trying to put together a small app mirroring this behaviour; without a reproduction case it is very hard for me to help you. Trying out simple apps with a few select menus seem to work fine on my end.
Your code is quite complex. There are many branches in the logic, the view payloads are quite large, and the form and modal inputs are big. The code you provide is missing many definitions (PeriodDays, bB, buildTimeOptionsArrayAM, buildTimeOptionsArrayPM - among many others). Without the complete code, I cannot help you. Could you assemble a new GitHub project or gist, that has the entire bolt project, that I can clone down and run locally?

I have created a clone of the project for you to play with and have added you as a collaborator. If there are any issues, let me know! I am far from an experienced developer so I am sure you will find many shocking discoveries in my code, but it's built with a goal in mind and that goal wasn't to be pretty! 😂

Great, I have accepted the invite and will take a look now... 👀

Just a quick update: took me a while to get the app setup (had to craft a few throwaway spreadsheets with specific column header names, specific number of sub-sheets, etc.) but I have the app up and running! Additionally, I can confirm I was able to reproduce the issue you posted above in your original video!
Now, to start figuring out how the timesheet modal logic you have in place fits together and see what can be done to mitigate the issue...

Excellent news! It's entirely custom to our workspace so I can imagine it was a pain to get running but I very much appreciate your effort!

I have a few other tasks to take on today but I will definitely dive deeper into this issue tomorrow.

Just a few updates in case anyone is following this issue:

I confirmed that the hash parameter to the views.update API is being used properly, so that earlier hypothesis of mine is not relevant for this issue.
All calls to the views.update API succeed - the response always contains an ok: true field.
When reproducing the issue, in my experience, if I select the drop-down menu items quickly (similarly to how @mjcbfl does it in the video in the original post in this issue), it is easier to reproduce. If I introduce some pauses between interacting with the select menu drop downs (say, 5 seconds between selections), then the issue is much harder to reproduce. This tells me that there are performance characteristics at play here.
Interestingly, if I wait long enough after selection and no view update (say, 30 seconds or so), the view does eventually update! So it seems like maybe the backend is getting 'clogged up' somehow in updating the view. Another clue that this may be performance related.
The block payloads are huge, mainly because selection for time-of-day is implemented using static select Block Kit elements. I suggested to @mjcbfl to change the implementation here to use the Timepicker element instead of manually generating a separate static option select element per 15 min time chunk. This should make the block kit payloads much leaner. It should be easier to manage in the code, too, but I'm also hoping this may have a positive influence on how hard it is to reproduce the issue.


fix instance restarting fight.

When a Lua coroutine (thread) finds that another thread is starting an
instance, it waits until the other either succeeds or fails.  In case of
failure, the original thread fails the request, and the second one
tries again.  This retry was wrongly being stored in the old intance
info table which is removed by the failing thread, and never stored
back in the general table by the retrying thread.  This fix ensures
that on the failing case the second thread doesn't hold the old info,
but creates a new one.
Issues resolved
Fix #6432 #6500

This is a fatal error. Is there any preliminary released time?

@javierguerragiraldez, @bungle, @gszr, first of all, I would like to thank you for your effort in this project and specifically this fix, but as I can see the only code review is blocking us to release it. Would you consider to raise it up, in order to release the fix as soon as possible, since it's really a blocking issue and I believe a lot of teams are struggling through it?

@javierguerragiraldez as this is a fix, could we be basing on master?

@javierguerragiraldez Hi,Could you merge it to v2.1.5? I am using kong v2.1.4.Thank you!

@javierguerragiraldez Hi, when I modified kong/db/dao/plugins/go.lua as you modified, got the following err:
kong version: v2.1.4
2020/10/30 08:04:17 [error] 53#0: *20086162 [kong] go.lua:427 [custom-rate-limiting] starting instance: no data, client: <IP_ADDRESS>, server: kong, request: "GET /test HTTP/1.1", host: "gateway-test.xxx.com"
2020/10/30 08:04:17 [error] 53#0: *20086162 lua coroutine: runtime error: /usr/local/share/lua/5.1/kong/db/dao/plugins/go.lua:430: no data
stack traceback:
coroutine 0:
[C]: in function 'error'
/usr/local/share/lua/5.1/kong/db/dao/plugins/go.lua:430: in function 'get_instance'
/usr/local/share/lua/5.1/kong/db/dao/plugins/go.lua:496: in function </usr/local/share/lua/5.1/kong/db/dao/plugins/go.lua:495>
coroutine 1:
[C]: in function 'resume'
coroutine.wrap:21: in function coroutine.wrap:21
/usr/local/share/lua/5.1/kong/init.lua:756: in function 'access'
access_by_lua(nginx-kong.conf:89):2: in main chunk, client: <IP_ADDRESS>, server: kong, request: "GET /test HTTP/1.1", host: "gateway-test.xxx.com"

Hi @lampnick,   from your log it seems the pluginserver is crashing while starting a plugin instance.  There might be a problem with your Go code.  If necessary, please open a new issue to focus on that.

new

Please see https://github.com/Kong/kong/issues/6500

@gszr , any chance to release 2.2.1 at any time soon?

@gszr , estimated release date for 2.2.1, please?

@YegorMedvedev 2.2.1 will be out in the coming days.

@YegorMedvedev The 2.2.1 release is now out! Apologies for the delay on my end to give an update and happy Konging!
https://discuss.konghq.com/t/kong-2-2-1-released/7546

@gszr , thanks mate! So far it works as expected ;) Happy Konging you too!


contrib: improve zbm-sign usage of sbsign usecase

Closes #693

I did my best with the PR title. Feel free to edit it to match the project standards.


[Bugfix][Zeta] Fix the checkpoint timeout (#5722)

Similar to 5722, when I use ES's scroll query or read large files, the checkpoint timeout problem will also occur.
I found that it was caused by the synchronized lock granularity in pollNext method being too large.

Purpose of this pull request

Does this PR introduce any user-facing change?

How was this patch tested?

Check list

[ ] If any new Jar binary package adding in your PR, please add License Notice according
New License Guide
[ ] If necessary, please update the documentation to describe the new feature. https://github.com/apache/seatunnel/tree/dev/docs
[ ] If you are contributing the connector code, please check that the following files are updated:

Update change log that in connector document. For more details you can refer to connector-v2
Update plugin-mapping.properties and add new connector information in it
Update the pom file of seatunnel-dist

[ ] Update the release-note.

@hailin0 I have passed all the tests, can I merge into the dev branch now?


duplicate file shortcut

Would be handy to have a way to duplicate a file, even though this wasn't part of netrw's original feature set.
Looks like Y won't conflict, and the UX should be the same as renaming a file, except it'll just copy the file, rather than move it.

Potentially the other way to implement would be to intercept y and p and allow for more natural yank/put semantics.


fix kclvm md5 sum

1. Does this PR affect any open issues?(Y/N) and add issue references (e.g. "fix #123", "re #123".):

[X] N
[ ] Y

2. What is the scope of this PR (e.g. component or file name):

scripts/kclvm.go
3. Provide a description of the PR(e.g. more details, effects, motivations or doc link):

[ ] Affects user behaviors
[ ] Contains syntax changes
[ ] Contains variable changes
[ ] Contains experimental features
[ ] Performance regression: Consumes more CPU
[ ] Performance regression: Consumes more Memory
[X] Other

4. Are there any breaking changes?(Y/N) and describe the breaking changes(e.g. more details, motivations or doc link):

[X] N
[ ] Y

5. Are there test cases for these changes?(Y/N) select and add more details, references or doc links:

[ ] Unit test
[ ] Integration test
[ ] Manual test (add detailed scripts or steps below)
[X] Other

6. Release note

Please refer to Release Notes Language Style Guide to write a quality release note.
None

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 46.452%

Totals

Change from base Build<PHONE_NUMBER>:
0.0%

Covered Lines:
2422

Relevant Lines:
5214

💛  - Coveralls