[CRITICAL] Implement  for Workflow Creation

Details
Link to the doc.
UI changes

Members:
<MenuItemWithTopDescription /> that displays all currently selected users for a given approval workflow.

Approvers:
The whole section is dynamic as there is no limit on how many approvers there are.
Always one empty input is displayed to allow for adding additional approvers.
When there are more than one approver these items will be enumerated, toLocaleOrdinal will generate the ordinal based on the index of an approver.

Onyx actions:
Clicking the back button will use the clearApprovalWorkflow action and navigate back to the workflows page (‘settings/workspaces/:policyID/workflows’).
Clicking on the “Add workflow” button will trigger createApprovalWorkflow action and navigate back to the workflows page (‘settings/workspaces/:policyID/workflows’).
Edge cases
In case one of the approvers already has an existing forwardsTo in place, we’ll populate that relationship when creating/editing an approval workflow - this will be implemented in setApprovalWorkflowApprover when selecting an approver. Hint text will be displayed based on isApproverInMultipleWorkflows saved in the Onyx for each Approver. This utilizes hintText prop from <MenuItem /> component.

If the same person is chosen twice in one workflow, a dot indicator with an error message will be displayed to the user. This utilizes errorText prop from <MenuItem /> component.

Fixed Issues
$ https://github.com/Expensify/App/issues/45954
PROPOSAL: N/A
Tests

[x] Open Workflows page (it has to be turned on in More features settings page)
[x] Locally edit canUseWorkflowsAdvancedApproval function to return true (or use canUseWorkflowsAdvancedApproval beta)
[x] Click on the 'Add approval workflow' button, it should navigate to 'Expenses from' page, select some users
[x] Go to the next step, select an approver
[x] Next button should navigate to the create new workflow page
[x] Play around with this page, you should be able to:

Add more approvers,
Remove already selected approvers,
Change members of the workflow

[x] Click on 'Add new workflow', it should show up on the workflow page

Offline tests
N/A
QA Steps
Same as tests
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 the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[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 approved by marketing by adding the Waiting for Copy label for a copy review on the original GH to get the correct copy.
[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 form input styles:

[x] I verified that all the inputs inside a form are aligned with each other.
[x] I added Design label 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
android.webm

Android: mWeb Chrome
android-web.webm

iOS: Native
https://github.com/user-attachments/assets/3ec5a354-b568-4404-a07c-7d90ff7f1d65

iOS: mWeb Safari
https://github.com/user-attachments/assets/ad1eaf6b-c4d6-4e47-9848-c9343b640294

MacOS: Chrome / Safari
https://github.com/user-attachments/assets/2b5cb944-f959-4821-876b-b9c1db41d795

MacOS: Desktop
https://github.com/user-attachments/assets/4ad3b043-15f7-428f-beb7-38ed8af22f10

@shawnborton Check this out when you have some time, the whole creation flow is ready 😄

Great, I will spin up a test build for easier testing.

Somehow I got this into a state where the Save button is disabled:

I think we shouldn't be disabling any form submit buttons - we always allow a user to press submit and we validate and return an error if there was a problem. Any ideas what's going on here?

I'm a bit confused how some of the logic works here... notice in my second attempt in this video, I only add a flow for Jon to submit to Danny, but then I get a second approver and a third approver that automatically populates?
https://github.com/user-attachments/assets/baddeeff-8cb9-4910-976f-b94c9050a22f
Which as a result, gave me this:

Also cc @Expensify/design in case you want to take this one for a spin too!

Also cc @Expensify/design in case you want to take this one for a spin too!

Wow, I didn't know this mention notifies any of the designers, good to know 👍

Somehow I got this into a state where the Save button is disabled

That is really weird, any idea how to reproduce? @shawnborton

I think we shouldn't be disabling any form submit buttons - we always allow a user to press submit and we validate and return an error if there was a problem. Any ideas what's going on here?

Right, I forgot about this rule. I'll adjust the logic tomorrow morning and let you know.

That is really weird, any idea how to reproduce?

No idea, without an error message it's hard to know what I did wrong 🤣 but I am playing around with just a three person workspace in case that is helpful at all.

I'm a bit confused how some of the logic works here... notice in my second attempt in this video, I only add a flow for Jon to submit to Danny, but then I get a second approver and a third approver that automatically populates?
CleanShot.2024-08-07.at.11.58.54.mp4
Which as a result, gave me this:

I fixed it in https://github.com/Expensify/App/pull/46798/commits/755954c204edd324d3c5d4d740908f141a4dd9d5, if you build this PR one more time it should work fine

Cool, going to rebuild then

Still getting a weird one here where the approval becomes circular - I submit to Jon, and then it gets sent back to me for approval?
https://github.com/user-attachments/assets/355e6997-ac55-4b22-abda-5f3aa8c6bf57

Still getting a weird one here where the approval becomes circular - I submit to Jon, and then it gets sent back to me for approval?

This time it's expected @shawnborton, it is described here in the doc.

@blazejkustra @JmillsExpensify Could you please grant me access to this doc? Thanks

@blazejkustra @JmillsExpensify Could you please grant me access to this doc? Thanks

Done 👌

Hmm I'm not so sure about that. @JmillsExpensify can you take a look at my comment here and let me know if that is expected?

I think we shouldn't be disabling any form submit buttons - we always allow a user to press submit and we validate and return an error if there was a problem. Any ideas what's going on here?

Adjusted @shawnborton, now the button is never disabled, instead errors are displayed upon clicking.
https://github.com/user-attachments/assets/c518edca-556d-43c5-9bc3-0414f2ef0d5d

Much better, thanks!

Reviewer Checklist

[ ] I have verified the author checklist is complete (all boxes are checked off).
[ ] I verified the correct issue is linked in the ### Fixed Issues section above
[ ] I verified testing steps are clear and they cover the changes made in this PR

[ ] I verified the steps for local testing are in the Tests section
[ ] I verified the steps for Staging and/or Production testing are in the QA steps section
[ ] I verified the steps cover any possible failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[ ] 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)

[ ] I checked that screenshots or videos are included for tests on all platforms
[ ] I included screenshots or videos for tests on all platforms
[ ] I verified tests pass on all platforms & I tested again on:

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

[ ] If there are any errors in the console that are unrelated to this PR, I either fixed them (preferred) or linked to where I reported them in Slack
[ ] I verified proper code patterns were followed (see Reviewing the code)

[ ] 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).
[ ] I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[ ] I verified that comments were added to code that is not self explanatory
[ ] 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.
[ ] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method
[ ] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[ ] 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)
[ ] 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.
[ ] I verified the JSDocs style guidelines (in STYLE.md) were followed

[ ] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[ ] I verified that this PR follows the guidelines as stated in the Review Guidelines
[ ] I verified other components that can be impacted by these changes have been tested, and I retested again (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar have been tested & I retested again)
[ ] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[ ] 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
[ ] If a new component is created I verified that:

[ ] A similar component doesn't exist in the codebase
[ ] All props are defined accurately and each prop has a /** comment above it */
[ ] The file is named correctly
[ ] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
[ ] The only data being stored in the state is data necessary for rendering and nothing else
[ ] For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
[ ] Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
[ ] All JSX used for rendering exists in the render method
[ ] The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions

[ ] If any new file was added I verified that:

[ ] 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

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

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

[ ] 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.
[ ] 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)
[ ] 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.
[ ] 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.
[ ] 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:

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

[ ] 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.
[ ] 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.
[ ] I have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

Screenshots/Videos

Android: Native

Android: mWeb Chrome

iOS: Native

iOS: mWeb Safari

MacOS: Chrome / Safari

MacOS: Desktop

Bug: The Back button in the confirm page should navigate back to approver selection page
https://github.com/user-attachments/assets/2b92fcaa-8970-4b16-a10f-42e20d417689

This case makes me confused
https://github.com/user-attachments/assets/30cfc516-ed0a-4a74-98d5-fd3faea774eb
Pre-conditional: There is already a workflow
Approver 1: A<EMAIL_ADDRESS>Approver 2: B<EMAIL_ADDRESS>Then, creating a new workflow
Approver 1: B<EMAIL_ADDRESS>Approver 2: A<EMAIL_ADDRESS>Then go to the confirm page and see two messages

I am curious in this case:
Pre-conditional: There is already a workflow
First approver: A
Second approver: B
Third approver: C

Create a new workflow
Add the first approver is A
[Automated Step] Then the second approver and third approver will be added automatically
Change the first approver to a new one, the second approver and third approver are added above in step 3 still remain

Should we remain or remove the second approver and third approver in this case?

Does anyone help to confirm this sentence in the docs? Please see the submits bold word. As I understand,
If Alice submits to Bob and Bob forwards to Alice, Alice will become the second and Bob will be the first approver --> This is valid
Thus, I think the correct word should be approves. Please correct me If I am wrong.

@DylanDylann submit is the correct word in the doc. Here's that case written out in different words:

Alice submits expense reports to Bob (e.g. Bob is the submitsTo to Alice)
Bob receives reports from Alice. When Bob approves Alice's reports, then Alice is the next approver (e.g. Alice is the forwardsTo for Bob)

Does that make sense?

Then let's take this comment (great comment btw!)

Pre-conditional: There is already a workflow
First approver: A
Second approver: B
Third approver: C

Create a new workflow
Add the first approver is A
[Automated Step] Then the second approver and third approver will be added automatically
Change the first approver to a new one, the second approver and third approver are added above in step 3 still remain
Should we remain or remove the second approver and third approver in this case?

That's a tough one. I'm generally not a fan of automatically removing approvers. In fact, I'd prefer that we not automatically add them either, though that'd require broader refactors to the approvals engine, which is unfortunately out of scope right now.
So in any case, I think we should just leave the approvers that were added. I acknowledge that we might not all agree on that point, so @Expensify/design @tgolen @blazejkustra I'm curious to get your opinions on this consideration.

Two additional messages in this case make me confused

<EMAIL_ADDRESS>already approves reports to<EMAIL_ADDRESS>in a separate workflow. If you change this approval relationship, all other workflows will be updated.
<EMAIL_ADDRESS>already approves reports to<EMAIL_ADDRESS>Please choose a different approver to avoid a circular workflow.

Screen.Recording.2024-08-09.at.00.26.38.mov
Pre-conditional: There is already a workflow First approver: A<EMAIL_ADDRESS>Second approver: B<EMAIL_ADDRESS>Then, creating a new workflow First approver: B<EMAIL_ADDRESS>Second approver: A<EMAIL_ADDRESS>Then go to the confirm page and see two messages

Finally for this comment. I think this is just is what it is given the backend. I think the solution to these issues will eventually allow independent approval workflows for a given set of submitters, but that's out of scope.

Bug: The Back button in the confirm page should navigate back to approver selection page
Screen.Recording.2024-08-09.at.00.51.08.mov

For this consideration, I think this is a fair point. This is how the right-hand pane works for other "one-by-one" flows, meaning that going back always goes to the previous page. In the case of pressing back on the first page, that closes the right-hand pane.

So in any case, I think we should just leave the approvers that were added.

Yeah, I think in reality we're all testing some weird cases with small 2-3 person workspaces, and we have no way to delete existing workflows either. So I am cool doing nothing extra here and getting this to a place where we can test with some more realistic setups.

@JmillsExpensify About this comment, do you mean Alice can't approve Alice's report?
cc @JmillsExpensify

About this comment, I see that the first message below the second approver seems wrong to me. Because the second approver is added by the user in the current flow (not added automatically)

<EMAIL_ADDRESS>already approves reports to<EMAIL_ADDRESS>in a separate workflow. If you change this approval relationship, all other workflows will be updated.

Bug: The Back button in the confirm page should navigate back to approver selection page
Screen.Recording.2024-08-09.at.00.51.08.mov

For this consideration, I think this is a fair point. This is how the right-hand pane works for other "one-by-one" flows, meaning that going back always goes to the previous page. In the case of pressing back on the first page, that closes the right-hand pane.

@DylanDylann @JmillsExpensify This was done on purpose because of how navigation works (consulted with @adamgrzybowski and @WojtekBoman). Here is a graph of the whole flow, how screens navigate between each other:

The main problem is that under the hood the navigation state is a stack where screens are put on top of it like this:

Where the top of the stack is the current screen visible to the user and clicing 'back button' removes the top screen from the stack.
The issue
In the state from the image above if the user navigate again to the approver screen, approver screen is put on top of the stack, like this (notice that it is interchanged with Create new screen):

Now after we choose an approver and go back to Create new screen we end up with a state looking like this:

Now if we hit back button we would expect to go back to approver screen, but in reality we would end up on Expenses from screen (because approver screen was removed from the stack)
That is why we decided that it would be wise to remove expenses from and approver screens from the stack in the initial flow - which causes the confirm screen back button to go back to workflows screen.
Possible ways forward

Leave it as it is now because of the described issue above ☝
Adjust the navigation logic in a separate PR

We could implement it now but it may slow us a bit as this might prove complicated
Implement it as a follow up issue for the Advanced approval project

Thoughts @JmillsExpensify @DylanDylann?

@blazejkustra Thank you for your detailed explanation. I suggest we address the navigation bug in a separate issue. While I am still unclear about the current logic and believe there is room for improvement, we should continue this discussion in a newly created issue and focus exclusively on the approval flow in this PR.
cc @JmillsExpensify

It is really hard to follow every discussion inside of this PR (one thread for different topic is a disaster 😅).
For any outstanding issue let's create a thread on slack and dissuss it there, wdyt @DylanDylann?
Also let's continue reviewing and testing this one as the deadline is getting closer 👀

Does anyone help to confirm this sentence in the docs? Please see the submits bold word. As I understand,
If Alice submits to Bob and Bob forwards to Alice, Alice will become the second and Bob will be the first approver --> This is valid
Thus, I think the correct word should be approves. Please correct me If I am wrong.

I think you are right here @DylanDylann, it should be approves (or forwardsTo). Because circular workflow is when A forwardsTo to B and B forwardsTo A.
Or a more complicated circular workflow is when A forwardsTo B, B forwardsTo C, ..., Z forwardsTo A.

About this comment, I see that the first message below the second approver seems wrong to me. Because the second approver is added by the user in the current flow (not added automatically)

<EMAIL_ADDRESS>already approves reports to<EMAIL_ADDRESS>in a separate workflow. If you change this approval relationship, all other workflows will be updated.

Let's come back to this as a follow up issue/disscuss on slack @DylanDylann.

I think it would be wise to have you as a reviewer for the Edit screen too.
@JmillsExpensify/@tgolen what do you think to assign @DylanDylann to https://github.com/Expensify/App/issues/45953 now, so he gets assigned to the future PR?

For each outstanding issue let's create a thread on slack and dissuss it there, wdyt @DylanDylann?

Agree with you at this point

Posted responses in Slack. I think we're aligned on the responses? If so, let's focus on getting the rest of this PR reviewed (and merged).

I will try to complete the checklist on Monday

@DylanDylann I just merged the newest main for you 🚀

@blazejkustra Thanks, I am reviewing

@blazejkustra
BUG: Error message still retain after adding an approver
https://github.com/user-attachments/assets/06f85c5a-d2a5-45ca-9687-04ac111f9cdb

@blazejkustra NAB: Currently, I see we don't sort the members in order to alphabetically in some places.

@blazejkustra I see that this field always be false and It seems unnecessary. Could you help to explain why we need to include isCircularReference here
https://github.com/Expensify/App/blob/87bdc246318f6c3fc81ad9d293024de687e457a2/src/libs/WorkflowUtils.ts#L44

@blazejkustra I see that this field always be false and It seems unnecessary. Could you help to explain why we need to have isCircularReference here

https://github.com/user-attachments/assets/f4deac01-0290-4dee-89e8-b2acad7f5edf
@DylanDylann Try to setup a circular workflow, isCircularReference becomes true in that case.

@blazejkustra I will review and test again early tomorrow. My next review will be done before your working time

@blazejkustra We should allow user create new approval workflow offline, right?
https://github.com/user-attachments/assets/27f8c0e8-91a1-4e0e-9212-fa46051c5d8e

@blazejkustra We should allow users to create new approval workflow offline, right?
Screen.Recording.2024-08-13.at.13.22.27.mov

Yes, I'm on it

@blazejkustra Ops, If so, I think we are having some struggle with optimistic data

@blazejkustra We should allow users to create new approval workflow offline, right?

Adjusted @DylanDylann 🚀

@blazejkustra Ops, If so, I think we are having some struggle with optimistic data

What is the issue with optimistic data? 🤔

@blazejkustra With our offline pattern, We need to grey out the optimistic data by using some fields like pendingAction and pendingField

@blazejkustra I think there is a bit complicated because when creating an approval workflow, we can update the other workflow (due to circle dependency or an approver belongs to many approval workflows)
This PR is nearly complete. If you believe this change is substantial, we can consider addressing it in a subsequent follow-up PR

@blazejkustra  This block seems redundant because an approver only appears a time in an approval workflow
https://github.com/Expensify/App/blob/9819f378685b4eea4f533624d8df7c8b60f58fc9/src/libs/WorkflowUtils.ts#L160-L162
Note: This change isn't created in this PR, but I see it while reviewing creation approval flow

@blazejkustra With our offline pattern, We need to grey out the optimistic data (updated everything) by using some fields like pendingAction and pendingField

I adjusted the code to follow our pattern B principles in https://github.com/Expensify/App/pull/46798/commits/e732c6c46025eae01202d300618fb2dca1679c85 (it's not ideal, but I think it's good enough for now, we can improve offline behaviour as a follow up)

@DylanDylann I adjusted everything, thanks for your patience and responsiveness 🙏

Note: There are some changes in updateApprovalWorkflow and removeApprovalWorkflow functions, but I will review it in the next PR

Reviewer Checklist

[ ] I have verified the author checklist is complete (all boxes are checked off).
[ ] I verified the correct issue is linked in the ### Fixed Issues section above
[ ] I verified testing steps are clear and they cover the changes made in this PR

[ ] I verified the steps for local testing are in the Tests section
[ ] I verified the steps for Staging and/or Production testing are in the QA steps section
[ ] I verified the steps cover any possible failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[ ] 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)

[ ] I checked that screenshots or videos are included for tests on all platforms
[ ] I included screenshots or videos for tests on all platforms
[ ] I verified tests pass on all platforms & I tested again on:

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

[ ] If there are any errors in the console that are unrelated to this PR, I either fixed them (preferred) or linked to where I reported them in Slack
[ ] I verified proper code patterns were followed (see Reviewing the code)

[ ] 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).
[ ] I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[ ] I verified that comments were added to code that is not self explanatory
[ ] 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.
[ ] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method
[ ] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[ ] 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)
[ ] 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.
[ ] I verified the JSDocs style guidelines (in STYLE.md) were followed

[ ] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[ ] I verified that this PR follows the guidelines as stated in the Review Guidelines
[ ] I verified other components that can be impacted by these changes have been tested, and I retested again (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar have been tested & I retested again)
[ ] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[ ] 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
[ ] If a new component is created I verified that:

[ ] A similar component doesn't exist in the codebase
[ ] All props are defined accurately and each prop has a /** comment above it */
[ ] The file is named correctly
[ ] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
[ ] The only data being stored in the state is data necessary for rendering and nothing else
[ ] For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
[ ] Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
[ ] All JSX used for rendering exists in the render method
[ ] The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions

[ ] If any new file was added I verified that:

[ ] 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

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

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

[ ] 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.
[ ] 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)
[ ] 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.
[ ] 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.
[ ] 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:

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

[ ] 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.
[ ] 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.
[ ] I have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

Screenshots/Videos

Android: Native

Android: mWeb Chrome

iOS: Native

iOS: mWeb Safari

MacOS: Chrome / Safari

MacOS: Desktop

Reviewer Checklist

[ ] I have verified the author checklist is complete (all boxes are checked off).
[ ] I verified the correct issue is linked in the ### Fixed Issues section above
[ ] I verified testing steps are clear and they cover the changes made in this PR

[ ] I verified the steps for local testing are in the Tests section
[ ] I verified the steps for Staging and/or Production testing are in the QA steps section
[ ] I verified the steps cover any possible failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[ ] 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)

[ ] I checked that screenshots or videos are included for tests on all platforms
[ ] I included screenshots or videos for tests on all platforms
[ ] I verified tests pass on all platforms & I tested again on:

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

[ ] If there are any errors in the console that are unrelated to this PR, I either fixed them (preferred) or linked to where I reported them in Slack
[ ] I verified proper code patterns were followed (see Reviewing the code)

[ ] 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).
[ ] I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[ ] I verified that comments were added to code that is not self explanatory
[ ] 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.
[ ] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method
[ ] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[ ] 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)
[ ] 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.
[ ] I verified the JSDocs style guidelines (in STYLE.md) were followed

[ ] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[ ] I verified that this PR follows the guidelines as stated in the Review Guidelines
[ ] I verified other components that can be impacted by these changes have been tested, and I retested again (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar have been tested & I retested again)
[ ] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[ ] 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
[ ] If a new component is created I verified that:

[ ] A similar component doesn't exist in the codebase
[ ] All props are defined accurately and each prop has a /** comment above it */
[ ] The file is named correctly
[ ] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
[ ] The only data being stored in the state is data necessary for rendering and nothing else
[ ] For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
[ ] Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
[ ] All JSX used for rendering exists in the render method
[ ] The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions

[ ] If any new file was added I verified that:

[ ] 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

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

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

[ ] 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.
[ ] 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)
[ ] 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.
[ ] 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.
[ ] 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:

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

[ ] 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.
[ ] 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.
[ ] I have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

Screenshots/Videos

Android: Native

Android: mWeb Chrome

iOS: Native

iOS: mWeb Safari

MacOS: Chrome / Safari

MacOS: Desktop

[IMPORTANT NOTE]: When creating an approval workflow offline, the greyed-out logic doesn't work in some cases (always grey out all workflows). We expect that only new updated data will be greyed out
We will create another PR to follow up as mentioned here

@blazejkustra Should we hide the add approval button if the member list is empty?
https://github.com/user-attachments/assets/65b5fe30-1b80-4081-930f-4fd05fb4f4c8
cc @Expensify/design

@blazejkustra Should we hide the add approval button if the member list is empty?

Not sure about this, but it's a minor thing we can adjust later. Curious to see design team opinion on this (cc @shawnborton as you have a lot of context)

Should we hide the add approval button if the member list is empty?

🤔 How is the member list empty? Regardless, I think I'd be in favor of leaving the Add approval button there, unless someone else has some good, strong arguments for hiding it.

@dannymcclain  If a member belongs to an approval workflow, we will not display this member in the new approval workflow. In this case, all members belong to the previous approval workflows, so there are no members in the member list anymore

Ah thank you for explaining that! Makes perfect sense. @Expensify/design I wonder if in that case we should display an "empty state" when you click the Add approval workflow button?
I don't love the idea of that button just going away without any explanation. I don't know that any users will understand why that's happening. I think it'd be better to somehow tell the user "Hey, all your members are part of approval workflows already! Right on. Everyone is getting approved. Way to go."

: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.

🚀 Deployed to staging by https://github.com/tgolen in version: 9.0.20-0 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

@DylanDylann @tgolen  Do we need to use specific account to QA this or its part of BETA and should be enabled for Expensifail accounts?

@DylanDylann @tgolen Do we need to use specific account to QA this or its part of BETA and should be enabled for Expensifail accounts?

@mvtglobally Yes, it is a beta, specifically workflowsAdvancedApproval.

FYI I believe this was deployed to prod yesterday, from this checklist - #47356


Added Scene Graph Serialization

This pull request adds scene graph serialization. It was tested to be compatible with MagicVoxel v99.6.2 on MacOS (this test was run after disabling the serialization of the PACK chunk done in #38)

I'll review this PR after merging #38.

Thank you!


MedSAMLite1 sample data : brain segmentation quality issue

Hello,
First, I would like to thank you for sharing your work with us!
I have already opened this issue here : https://github.com/bowang-lab/MedSAMSlicer/issues/21
But maybe I should have opened it here (sorry for the mess).
So the issue:
I am using Lite-MedSAM and the MedSAM-Lite 3D Slicer Plugin to segment the brain (only the cerebral hemispheres) in the MedSAMLite1 sample data, but the result is not really satisfying as you can see in the screenshot.
I applied the preprocess for MR Images here, but I cannot get any usable results with or without selecting preprocessing options.
So maybe:

My ROI box is not drawn as it should be to reach a good result (I have tried several drawings though)
I should preprocess differently the data
The MedSAMLite1 sample data is not ideal for brain segmentation
It might be out of the scope of the model
Something else (?)

3D Slicer version: 5.6.1
MedSAMSlicer version: 0.05

Hi @AlDevonIA ,
Honestly, MedSAM is not suitable for this task. We excluded these kinds of images from the training set because providing such a large bounding box would introduce the ambiguity, e.g., the target could be the whole brain, white matter, or grey matter.
Maybe this brain segmentation tool fits your purposes.
https://www.pnas.org/doi/full/10.1073/pnas.2216399120

Hi @JunMa11 ,
Thank you very much for the answer and the suggestion!

Hi @JunMa11 ,
Thank you very much for the answer and the suggestion!


Updates to macos compiler as per OpenJ9 request

Fixes https://github.com/AdoptOpenJDK/openjdk-infrastructure/issues/561 (Once gcc49 is removed)
Must not be merged until the current JDK8/JDK11 with OpenJ9 release rebuilds are completed.

@sxa555 This has conflicts as well now - should we close or...?

@karianna Conflicts now resolved. It should be good to go now


how to get a real live img object?

I am trying to follow the tutorial https://squidpy.readthedocs.io/en/stable/external_tutorials/tutorial_tangram.html and am wondering of how to get the img object for a real live dataset.
It would be great if there would be substantially more information about this object in the tutorial. I have checked more of the squidpy tutorials and all of them use the same function to get the img object.
I would greatly appreciate your help!

A short follow up question - how can a generate_spot_crops fail with the error:
"ValueError: Expected height to be in interval [0, 1937], found 21035."
if a call to
sc.pl.spatial(
    adata_st, color="louvain", alpha=0.7, frameon=False, show=False, ax=axs[0], title=""
)

already has what it needs to plot the slide with highlighted 'spots'
I would really love to get some help here.

Hi Giovanni, Do you need something from me to help me with this question? Can you point me to any web page that could help me with that? I am so totally clueless I do not even know where to start.

A short follow up question - how can a generate_spot_crops fail with the error: "ValueError: Expected height to be in interval [0, 1937], found 21035." if a call to
sc.pl.spatial(
    adata_st, color="louvain", alpha=0.7, frameon=False, show=False, ax=axs[0], title=""
)

already has what it needs to plot the slide with highlighted 'spots'
I would really love to get some help here.

I would also considering using the squidpy functions for plotting, scatter or segment according to the data you have
https://squidpy.readthedocs.io/en/latest/examples.html#plotting

Thank you for your input!
I am sorry I had to create A issue to get this info. Could you possibly update the tutorials to also include this information?
Might spare you some time in the long run.
I'll tell you if I succeeded.

OK after having used both the scanpy and the squidpy plot functions I need to ask you - why does scanpy know how to crop the images and squidpy does not? Is not squidpy meant to be the 'better' program to deal with spatial data?

hi @stela2502 , squidpy doesn't crop the image cause the heuristics we used in scanpy wasn't very robust. But you can still crop it manually with crop_coords, you can check the argument on how it works!

Thank you. If the heuristic you use in scanpy does work for me - how do I get the coordinates from scanpy or how do I apply the same heuristic to get these coordinates?

you can use crop_coords argument in squidpy.pl.spatial_scatter. The heuristics were computed implicitly by the way the plotting was performed with the scanpy scatter functions. It is not possible to retrieve it anymore so I'd suggest to play around with the argument above. We could consider in the future to do something similar, but please open a new issue cause this is not the topic of this issue anymore.
This is also a different issue so I'm gonna go on and close this, but please feel free to open a new issue on the topic.


Question : How to silence 'Result of call to 'activate()' is unused' warning

I'm trying to silence this warning:

Tried adding @discardableResult to the declaration of the function to silence the compiler, and
Adding  _ = to the function definition

but neither worked.
XCode Version 10.0 beta 6 (10L232m)
Thanks in advance

I'm still trying to fix this...
Any ideas?


Adjust height and width of default window

The default window width of the Clipman extension is a bit large for me, and couldn't find any option to adjust it. It would be great if there was an option to adjust the height and width of the default window.
Expected Behavior:
The user should be able to adjust the height and width of the Clipman window to their liking.
Actual Behavior:
The height and width of the Clipman window cannot be adjusted.

Can you provide screenshots?

Fixed in version 51.


Split large file: networking/peer.py

As mentioned in #72, the peer related code could do with some improvements, so this likely is the first step of many.


Add provider equinix and module_name in Equinix Metal TF configs

We need to merge https://github.com/equinix-labs/terraform-metal-hybrid-gateway/pull/6/ first and fix merge conflicts afterwards

#6 merged and conflicts resolved

@vasubabu there are merge conflicts on this PR.  Could you rebase your branch on the latest from main?

@vasubabu CI is failing due to a version constraint mismatch.  Please git rm --cached .terraform.lock.hcl, commit and push that up.  https://github.com/equinix-labs/terraform-metal-hybrid-gateway/actions/runs/4981698151/jobs/8916449175?pr=8


add insight component-scheduling docs

Add a new doc. See preview:
https://deploy-preview-4963--daocloud-docs.netlify.app/insight/quickstart/install/component-scheduling

If ready, please give a /lgtm, thanks

/lgtm


all the descriptors are consolidated in a single descriptor

For the following Envoy's RLS request:
domain: example.org
descriptors:
  - entries:
    - C: VALUE
  - entries:
    - A: VALUE
    - B: VALUE

the following ratelimit config would be activated and it should not.
conditions: []
max_value: 1
seconds: 60
variables: ["A", "B", "C"]
namespace: example.org

@didierofrivia may be that could be interesting for you to look into…

See #354 ... maybe we should consider having descriptors as a root binding and have it as a List of Map<String, String>... ?


fix regex language collision in fatjar / certify fatjar using demo test suite

Description
Fixes the following error:

org.graalvm.polyglot.PolyglotException: SyntaxError: No language for id regex found. Supported languages are: [js]

Which occurs when a regular expression is used.
E.g. add the following line to karate-config.js
karate.log('a'.replace(/a/g, 'b'))

To build and certify the fatjar use: mvn clean install -P fatjar -pl karate-core,karate-demo

Relevant Issues : https://github.com/intuit/karate/issues/1373#issuecomment-747255745
Relevant PRs : (optional)
Type of change :

[ ] New feature
[x] Bug fix for existing feature
[ ] Code quality improvement
[ ] Addition or Improvement of tests
[ ] Addition or Improvement of documentation

@ptrthomas continuing our conversation from https://github.com/intuit/karate/pull/1403: unfortunately, maven verify didn't work either. The only way I could trigger the error in a single pass was to reference the fatjar artifact directly from the filesystem. It is certainly not the most elegant solution but it works and doesn't impact the build process too much.

@jkeys089 okay I'll take a look tomorrow, I still think we are talking past each other. besides the fatjar my main question is if karate-core in the pre-release profile will have the same problem - if so it will affect all maven users, but fine I'll take a look for myself

@ptrthomas apologies if I've misunderstood. I was thinking that maven users should be OK since they are pulling transitive dependencies separately. But we might as well test since we did find an issue in the shaded fatjar. Hopefully this latest commit is what you were looking for. Have a great weekend!

@jkeys089 you were right, I did some tests locally and maven deps are ok, and my wild guess that shading would cause the same problem was way off
for good measure I added a test using the docker strategy, it will run in CI now and hopefully cleaner: https://github.com/intuit/karate/commit/ba67015c64a371549985c4d1fc57bfe0d39b94dd
and manual testing of the fatjar should suffice instead of complicating the build
apologies for the back-and-forth 🙏 closing


fix tqdm lock

close https://github.com/huggingface/datasets/issues/6066

The docs for this PR live here. All of your documentation changes will be reflected on that endpoint.


feature/add_metadata_version_label

Hi @penglongli thanks for this amazing middleware, it works exactly the way i needed it.
I was thinking of a use case where i would like the results to include a 'version' or 'buidld' or other similar label so i could differentiate metrics between two different running instances of my service.
(in case im doing a canary or a progressive deployment)
Example:

There's obviously a couple of places where i could use some defensive programming just to validate that the labels, and values are of the same length.
just wanted to make a POC and see if you like the idea.

another less hacky option could be to add the metadata: map[string]string to the Monitor.
and add the version label to the metrics
this works too.


OIPA-2215

fix SSLError (gates data issue)

:tada: This PR is included in version 5.2.0 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


Release plan for 2020.8

Prerequisites

Python 3.7 and higher
run python3 -m pip install --user -r news/requirements.txt

Release candidate (Wednesday, Aug 05)

[x] Announce the code freeze (not just to team but also to debugger and language server)
[x] Update master for the release

[x] Create a branch against master for a pull request
[x] Change the version in package.json from a -dev suffix to -rc (🤖)
[x] Run npm install to make sure package-lock.json is up-to-date (🤖)
[x] Extension will pick up latest version of debugpy. If you need to pin to a particular version see install_debugpy.py.
[x] Update languageServerVersion in package.json to point to the latest version of the Language Server.
[x] Update CHANGELOG.md (🤖)

[x] Run news (typically python news --final --update CHANGELOG.md | code-insiders -)
[x] Copy over the "Thanks" section from the previous release
[x] Make sure the "Thanks" section is up-to-date (e.g. compare to versions in requirements.json)
[x] Touch up news entries (e.g. add missing periods)
[x] Check the Markdown rendering to make sure everything looks good
[x] Add any relevant news entries for debugpy and the language server if they were updated

[x] Update ThirdPartyNotices-Distribution.txt by using https://tools.opensource.microsoft.com/notice (see team notes)
[x] Update ThirdPartyNotices-Repository.txt as appropriate
[x] Create a pull request against master (🤖)
[x] Merge pull request into master

[x] Update the release branch

[x] Delete the release branch in the repo
[x] Create a new release branch from master
(alternately, force-push the master branch to the GitHub "release" branch)
[x] (if necessary) Request that the branch be set anew as "protected"

[x] Update master post-release (🤖)

[x] Bump the version number to the next monthly ("YYYY.M.0-dev") release in the master branch

[x] package.json
[x] package-lock.json

[x] Create a pull request against master
[x] Merge pull request into master

[x] Announce the code freeze is over
[x] Update Component Governance (Click on "microsoft/vscode-python" on that page)

[x] Provide details for any automatically detected npm dependencies
[x] Manually add any repository dependencies

[x] GDPR bookkeeping (@brettcannon) (🤖; see team notes)
[ ] Open appropriate documentation issues

new features
settings changes
etc. (ask the team)

[ ] Begin drafting a blog post
[x] Ask CTI to test the release candidate

Final (Wednesday, Aug 12)
Preparation

[ ] Make sure the appropriate pull requests for the documentation -- including the WOW page -- are ready
[ ] final updates to the release branch

[x] Create a branch against release for a pull request
[x] Update the version in package.json (🤖)
[x] Run npm install to make sure package-lock.json is up-to-date (the only update should be the version number if package-lock.json has been kept up-to-date) (🤖)
[ ] Update CHANGELOG.md (🤖)

[x] Update version and date for the release section
[x] Run news and copy-and-paste new entries (typically python news --final | code-insiders -; quite possibly nothing new to add)
[x] Add pylance to the list of projects we rely on under the "Thanks" section

[x] Update ThirdPartyNotices-Distribution.txt by using https://tools.opensource.microsoft.com/notice (🤖; see team notes)
[x] Update ThirdPartyNotices-Repository.txt manually if necessary
[x] Create pull request against release (🤖)
[x] Merge pull request into release

[ ] Make sure component governance is happy

Release

[x] Publish the release via Azure DevOps

[x] Make sure CI is passing
[x] Make sure the "Upload" stage on the release page succeeded
[x] Make sure no extraneous files are being included in the .vsix file (make sure to check for hidden files)
[x] Deploy the "Publish" stage

[x] Create a GitHub release

[x] Have tag match the released version
[x] Copy the changelog entry for the release as the description

[ ] Publish documentation changes
[ ] Publish the blog post
[x] Determine if a hotfix is needed
[ ] Merge release back into master (🤖)

Clean up after this release

[ ] Go through info needed issues and close any that have no activity for over a month (🤖)
[ ] GDPR bookkeeping (🤖)

Prep for the next release

[ ] Create a new release plan (🤖)
[ ] (Un-)pin release plan issues (🤖)

Copying @luabud's comment from https://github.com/microsoft/vscode-python/pull/13010#issuecomment-660301873 in case this hasn't been done in the previous point release:

we should also update our changelog in the list of supported projects at some point

@kimadeline thanks for bringing it up!
@brettcannon  I updated your comment to include a checkbox under "update changelog" so we don't forget to do that for this release plan.

We can also just drop the "Thanks" section if we think no one is reading it.

I am reading it 😂

THEIR IS A HUGE BUG IN THIS NEW VERSION:
user inputs are not accepted in the terminal. If you has the user what their age is, when you click enter nothing happens. I found downgrading this one update behind solved the solution but took me hours to figure it out lol

FYI the issue @yousefabuz17 reported is a duplicate of https://github.com/microsoft/debugpy/issues/370.

Whoops, realized that I didn't close this after the release. Closing now.

@IanMatthewHuff @karthiknadig I left this open because the "merge release into main" step was never checked off. Did that ever occur?

(And I was waiting for that before doing the last two steps of creating a new release plan.)

Not from the latest release (last week). I am preparing a merge back PR right now.

My apologies. I did do the merge from release back into main for the initial release (not the point release that @karthiknadig) mentioned. Just forgot to check off the issue.


Crashing on JLFork-1.1.7 1.20.1

Random Crash occurred. It mentions that is Just Leveling causing it but also mentions lootbeams.
crash-2024-11-13_00.02.42-server.txt

Do you mind testing if removing Otherworld Origins fix this issue?

I'm not modifying the get candidates in AptitudeCapability at all
I think this is just because Minecraft.player is @Nullable and you're not checking for such before you call getCapability()
In AptitudeCapability:
    public static AptitudeCapability get() {
        return (Minecraft.getInstance()).player.getCapability(RegistryCapabilities.APTITUDE).orElseThrow(() -> new IllegalArgumentException("Player does not have Capabilities!"));
    }

should probably be something like:
    @Nullable
    public static AptitudeCapability get() {
        LocalPlayer player = Minecraft.getInstance().player;
        if (player == null ) {
            return null;
        }
        return player.getCapability(RegistryCapabilities.APTITUDE).orElseThrow(() -> new IllegalArgumentException("Player does not have Capabilities!"));
    }

Disable Sinytra Connector.
It causes the nullable instance.

Fixed on 1.1.8.
https://modrinth.com/mod/justleveling-fork/versions
Still under review in CurseForge.


update TLS defaults: signature hash and DH params

SHA1 is deprecated (use SHA256)
increase RSA key to 2048 bits
increase DH params to 4096 bits (LogJam attack)

I'm not sure if this breaks anything - at least all tests for netlib and mitmproxy still pass...

Coverage remained the same at 99.58% when pulling 041ca5c499369ffbf115e4451b85aee77e3095c0 on Kriechi:update-tls-defaults into f7b75ba8c21c66e38da81adf3b2c573b7dae87f3 on mitmproxy:master.

LGTM. The SHA1 is important, otherwise Chrome will start complaining rather soon.


Add e2e tests

Create new e2e github actions workflow and resolves #15
Test coverage:

Running cluster-api-control-plane-provider-kamaji and validate no crashes
Creating target cluster using cluster-api-control-plane-provider-kamaji and kubevirt infra provider
Validate the cluster, kamajicontrolplane CR's readiness
Validate the worker CRs like Machine, Kubevirt-pod readiness
Fetch the kubeconfig of target cluster and install calico CNI
Validate the readiness of target cluster node

Successfully run: https://github.com/dineshba/cluster-api-control-plane-provider-kamaji/actions/runs/11303188257/job/31439998988
Screenshot:

Hi @prometherion, please help in review and provide your inputs. It has the basic validations as described in the PR description

I'd say this is a good starting point, thanks for it.
I would avoid installing the Kamaji Control Plane provider using the already published manifests, but rather, I'd use the ones available in the checked out, as well as load the container image to the kind instance: if you prefer, I can take care of these actions with a subsequent PR.

I totally agree with the PR based manifests and images. I can either add to this PR or create new PR. Please share your inputs

I would prefer having everything in one single PR, thanks!

Hi @prometherion, Please review the latest commit https://github.com/clastix/cluster-api-control-plane-provider-kamaji/pull/130/commits/fb6d8ed93c3465be3b8babbf1317703df82a5d29
What is done:

build docker image
Loaded that docker image into Kind
Changed the manifests to point to new docker image
Configure clusterctl to get config files from local instead of released artifacts
Validated if the right image is used or not

@dineshba we can ignore the golangci-lint stage, I'll fix it later since I merged a non linted PR, my bad. Thanks for your contribution! 🙏🏻


Best Model isn't Rank 1 of Top 5

Problem encountered on https://dotnet.microsoft.com/learn/machinelearning-ai/ml-dotnet-get-started-tutorial/evaluate#
Operating System: Windows 10
I have 2 confuse:
(1). Best Model isn't Rank 1 of Top 5
(2). Best Model Accuracy is 88.24%, but I don't see any the same value in Top 5 models.
thanks.

Please try the latest version of Model Builder from the gallery.


updated data url

Fixes #3160

2017-06-23 21:12 GMT+02:00 Stephen K Hess<EMAIL_ADDRESS>
Merged #3161 https://github.com/openaddresses/openaddresses/pull/3161.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/openaddresses/openaddresses/pull/3161#event-1136990314,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AV8OUUEWv_pws8B5uNGoka98C6qXlBUXks5sHA4agaJpZM4OD7QA
.


tsdx builds in mono repo(lerna)

Description
I have a mono repo. The repo location is https://github.com/simbathesailor/kalakari. It has three tsdx repos :

components
hooks
utilities

Now utilities have to be compiled before hooks compilation, hooks have to be compiled before components compilation and in the end, components should be compiled.
Why there is this kind of need?
All three packages are referencing each other. hooks may refer utilities so it is essential to compile utilities first before hooks to avoid a compilation error.
hooks repository
import {getName} from "@kalakari/utilities"

components repository
function getName() {
  return "tsdx"
}

components repository should get compiled first and then hooks repository
I am using lerna for the mono repo. How can I run a command which looks for changes in these repositories and rebuild them in the following order:
utilities --> hooks ---> components.
Does tsdx support this kind of requirement?
Can we do something using concurrently ?

closing the issue as opened for the wrong account. I will open another issue from the correct account.

See #531 duplicate issue for discussion


OpenSlides not usable - long wait times

Is it your intention to have a long wait time for redis cache?
WAIT_TIMEOUT = 10000 in server/entrypoint
Our platform is not usable - but changing the value to 1000 - it works.
Thanks for your support!

PR #8 points to the same problem

Hi,
this timeout should never be reached, if the usage is low (a handful of participants, no extensive voting, ...). It is high to compensate redis repliation times, if the setup is highly scaled used across multiple servers in a docker stack configuration. If this timeout is always reached it is an indication, that your redis setup is incorrect.
Can you give some details about the setup

Docker compose or docker stack
Did you just use the default config, or did you change something related the the points below:
The value of REDIS_REPLICAS in the docker-*.yml
The section of redis-slave in the docker-*.yml

I can see, that there is one case, where the default is misconfigured; But first I want to make sure, that this is the problem you have.
Regarding the PR: Lowering the timeout does not fix the problem, since every request is now 1 second delayed instead of 10, but there is still an unnecessary delay.

Thanks for your reply.
We are using docker compose and leave all configs default:
REDIS_REPLICAS: 1 # must match redis-slave replicas below!
redis-slave:     image: redis:alpine     restart: always     command: ["redis-server", "--save", "", "--slaveof", "redis", "6379"]     depends_on:       - redis     networks:       back:         aliases:           - rediscache-slave   redis-channels:     image: redis:alpine     restart: always     networks:       back:

Ok, are you sure, that REDIS_REPLICAS is 1? Can you confirm this in the startup logs? There should be a log statement printing out this value. Maybe you can post the printed section (there are multiple redis-related configuration printouts).
If it is really 1, I'll test this tomorrow.
There were updates of this repo lately. Which commit are you using for the configuration?

Commit is: a46a5dd007d64a2964b1a3c647ecbefd42caaf6b
And part of the container log:
server_1          | [2020-06-25 03:57:51 +0200] [1] [INFO] openslides.utils.redis_connection_pool [HBWf] CONNECTION_POOL_LIMIT=100
server_1          | [2020-06-25 03:57:51 +0200] [1] [INFO] openslides.utils.redis [HBWf] Redis address redis://redis:6379/0
server_1          | [2020-06-25 03:57:51 +0200] [1] [INFO] openslides.utils.redis [HBWf] Redis read only address redis://redis-slave:6379/0
server_1          | [2020-06-25 03:57:51 +0200] [1] [INFO] openslides.utils.redis [HBWf] AMOUNT_REPLICAS=1
server_1          | [2020-06-25 03:57:51 +0200] [1] [INFO] openslides.utils.redis [HBWf] WAIT_TIMEOUT=1000

Hi,
After setting AMOUNT_REPLICAS in the docker-compose.yml to 1 (the default is 3, which is wrong) I can start the setup as described in the README without this error. Having a wrong AMOUNT_REPLICAS leads to
openslides.utils.cache_providers [HjRx] WAIT reported 1 replicas of 3 requested after 10000 ms!

Do you have this statement in your logs, if you run into the timeout? (Maybe put it back to 10s for testing)
Otherwiese you can do two things:

Disable the read only redis: There is no nice way, you have to modify the server/entrypoint and remove this statement: https://github.com/OpenSlides/openslides-docker-compose/blob/master/server/entrypoint#L55 Without it, the code leading to the timeout is disabled. You can optionally remove the redis-slave from the docker-compose.yml. The timeout should not accur anymore. The redis slave is not strictly needed. As I said: If you have assemblies without using electronic voting or other highly demanding stuff, it should be sufficient.

Check, if the replication is working. Use docker-compose exec redis redis-cli and basic tedis commands to change something in redis. Meanwhile in another terminal exec into redis-slave and check, if changes are propagated correctly. Refer to https://redis.io/commands#generic. You can use SET, GET, DEL for a simple interaction with redis.

Hi!
I've encountered the same problem and solved the problem by changing AMOUNT_REPLICAS to 1. The bigger problem during my debugging was that the old docker volumes are not deleted by docker-compose down, so the AMOUNT_REPLICAS in the database stayed at 3. To ensure that you are starting with fresh containers and volumes, perform docker-compose down, docker-compose rm and docker volume prune (attention, this will delete all volumes with no container linked to it, also non-openslides-related!). After that, you can rebuild everything and the change takes effect.
I think, that the docker-compose.yml.example (and swarm, too) should be adjusted to be consistent (AMOUNT_REPLICAS to 1 and one redis-slave or AMOUNT_REPLICAS to 3 and three redis-slave containers). I think, I'd prefer the first option.
Greetings,
clarity

The bigger problem during my debugging was that the old docker volumes are not deleted by docker-compose down, so the AMOUNT_REPLICAS in the still-existing database stayed at 3.

Yep, I struggled at this point, too.

docker-compose rm and docker volume prune

:+1:

or AMOUNT_REPLICAS to 3 and three redis-slave containers

This does not work for docker compose when keeping it comparable to stack: There is no scaling for docker compose. The first suggested change is what I have refered to in my first comment ("I can see, that there is one case, where the default is misconfigured") and want to check, that this is not the reason for the reported bug.

So from my understanding, lowering the WAIT_TIMEOUT as stated in #8 is only fighting symtoms here but not solving the problem.

This is what I'm trying to figure out.
The strange problem is, taht in the log line from @topelrapha it explicilty says
server_1 | [2020-06-25 03:57:51 +0200] [1] [INFO] openslides.utils.redis [HBWf] AMOUNT_REPLICAS=1

So it is not the issue, that AMOUNT_REPLICAS has the wrong default.

or AMOUNT_REPLICAS to 3 and three redis-slave containers

This does not work for docker compose when keeping it comparable to stack: There is no scaling for docker compose. The first suggested change is what I have referred to in my first comment ("I can see, that there is one case, where the default is misconfigured") and want to check, that this is not the reason for the reported bug.

Thanks for that explanation - I've understood the problem now. In the stack config, the AMOUNT_REPLICAS of three because the "redis-slave" will be spawned three times (attribute "replica"); but in the compose config, AMOUNT_REPLICAS has to be 1 by default because there are no replicas configured. In that case, I would love to create a pull request to take the general issue into a separate topic and focus on @topelrapha's problem.

The strange problem is, taht in the log line from @topelrapha it explicilty says
server_1 | [2020-06-25 03:57:51 +0200] [1] [INFO] openslides.utils.redis [HBWf] AMOUNT_REPLICAS=1

Got it now, sorry for my misunderstanding earlier. In that case, I can't give a better advice than ensuring that the volumes need to be fully reset (with the docker commands stated above) and the AMOUNT_REPLICAS is set to 1. In my setup (current debian stable, current docker/docker compose, current openslides), it works like a charm.

In that case, I would love to create a pull request to take the general issue into a separate topic and focus on @topelrapha's problem.

This would be great!

In my setup (current debian stable, current docker/docker compose, current openslides), it works like a charm.

Yes, I cannot reproduce this either.  @topelrapha Should check both suggestions above: Disabling the read-replicat (so the source code for the bud is disabled) and checking, if the replication/redis-cache works.
These are the only two things I can image that do not work to trigger the timeout with a correctly AMOUNT_REPLICAS

but in the compose config, AMOUNT_REPLICAS has to be 1 by default because there are no replicas configured.

The default setting of 3 for the Compose setup was indeed a mistake and I've changed it back to 1.

or AMOUNT_REPLICAS to 3 and three redis-slave containers

This does not work for docker compose when keeping it comparable to stack: There is no scaling for docker compose.

This is not entirely correct.  Replica settings work with docker-compose in --compatibility mode.  It is non-standard behavior, however, so AMOUNT_REPLICAS should definitely still be set to 1 by default.
In case there is demand for it, I have added conditional scaling options to docker-compose.yml.m4, see https://github.com/OpenSlides/openslides-docker-compose/blob/921c0c33ae2c5c3ca488eef1aee8082837f498cc/docker-compose.yml.m4#L172-L173.

I'll close this issue until there is more information about it. Note: The setup changed with @gsiv new commit and will change in the near future, too (https://github.com/OpenSlides/OpenSlides/pull/5440)


Convert docstring to numpy

Codecov Report

Merging #31 (8de95e5) into master (5ada583) will not change coverage.
The diff coverage is 100.00%.

@@           Coverage Diff           @@
##           master      #31   +/-   ##
=======================================
  Coverage   97.56%   97.56%
=======================================
  Files          26       26
  Lines        1479     1479
=======================================
  Hits         1443     1443
  Misses         36       36

Flag
Coverage Δ

unittests
97.56% <100.00%> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files
Coverage Δ

esak/__init__.py
100.00% <ø> (ø)

esak/comic.py
98.71% <ø> (ø)

esak/creator.py
94.64% <ø> (ø)

esak/dates.py
100.00% <ø> (ø)

esak/character.py
92.72% <100.00%> (ø)

esak/event.py
94.82% <100.00%> (ø)


No standard Cronus International company in BC Insider latest image

Hi,
I have made a pull to bcinsider.azurecr.io/bcsandbox-master latest version (13.0.23231.0-W1) and after that when i try to open the webclient i am getting the below message:

When i click next and click start trial it is intializing an empty company with name "MyCompany".
Can you please let me know what happened to the standard company and how to get that?
Thanks & Regards
Varun Reddy

See #2827 in W1 there is no Cronus Company.

@dNsl9r  thanks for the update


problem with matplotlib

Hello. It looks like this lib uses matplotlib to draw 3d environment model.
But matplotlib throws an error:
NotImplementedError: It is not currently possible to manually set the aspect on 3D axes
while trying to execute the following code:
File "\.conda\envs\vbap_test\lib\site-packages\spaudiopy\plots.py", line 362, in hull_normals
    ax = fig.add_subplot(1, 1, 1, projection='3d', aspect='equal')

I'm using matplotlib==3.1.1

Hi!
Yes, unfortunately that is a problem. Until matplotlib fixes this, we have to stick with a slightly older version.
If you install this package, this line should take care of it
https://github.com/chris-hld/spaudiopy/blob/0fe20d060a5af74d4a3ce6a771a733f535386583/setup.py#L28

thanks a lot! I'll make different env for this to use older matplotlib.
Also, thank you very much for these examples:
https://github.com/chris-hld/spaudiopy/tree/master/examples
By the way - can you recommend something to read/watch/play for better understanding of spatial acoustics? Something e.g. like ThinkDSP.


Please reopen #62443

I agree with the author of #62443 that it is not a duplicate of #68. Please could you reopen/reconsider it?

that issue is fairly old. you can see unpushed commits in commits section of the scm view.


Missing warp reduce functions in HIP

Hi,
Warp reduce functions are available in CUDA (cf. https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#warp-reduce-functions) but not in HIP.
There is equivalent functionality in HLSL shader model 6.0 supported by all AMD GPUs after the Vega architecture as far as I know: https://github.com/microsoft/DirectXShaderCompiler/wiki/Wave-Intrinsics .
So I think it can be implemented for HIP as well.
Could you please add them?
Best regards,
Epliz

@cjatin  , you were kind enough to have a look at https://github.com/ROCm-Developer-Tools/clr/issues/2 ; this one is quite similar, so I would appreciate if you could have a look at this one as well :) .

Hello,
Will raise an internal issue to track this.

https://github.com/ROCm/clr/commit/c5ab5680b400b5b21e9c8c3849ff67e29afcbfc9


Add meeting organization to documentation

@jvpichowski @fussel178 Is @jvpichowski as assignee still correct?

We have a well written meeting organization by @jvpichowski here:
https://github.com/wuespace/telestion/wiki/Meeting-Organization
Do we want to include that in the official documentation?

I don't think we need it. Closing this issue now 🙂


drop module release input

We infer this value now so it doesn't need to be an input - see https://github.com/knative-sandbox/knobots/pull/289

/assign @kvmware

/lgtm


Huge performance hits when having a bigger application with a lot of service definitions

We have a big application that has a lot of service definitions registered on the container. In combination with a lot of routes on a Slim 3 application, this causes has a huge impact on our performance (170ms additional latency).
Because of this impact we are still on league/container:^2.x but would very much like to upgrade to the latest version.
The cause is actually very simple, it is located in the DefinitionAggregate on the methods ::has & getDefinition.
Both methods use a foreach on the definitions the aggregate knows about, and with a lot of active definitions combined with a lot of ContainerInterface->get usages this results in a lot of loops being executed.
At first I was confused to why the $definitions array was not using $id as indices but I understand that a foreach is used because a definition can actually be mutated through DefinitionInterface->setAlias, which surprised me, I was expecting immutability.
The discussion of immutability a-side, what would be the recommended approach to address this issue?
Should we implement our own DefinitionAggregateInterface that uses the $id as indices and thus making the definitions their alias immutable?
For clarification, this implementation makes the performance hit go away:
	public function add(string $id, $definition): DefinitionInterface
	{
		if (false === ($definition instanceof DefinitionInterface)) {
			$definition = new Definition($id, $definition);
		}

		$this->definitions[$id] = $definition->setAlias($id);

		return $definition;
	}

	public function has(string $id): bool
	{
		return array_key_exists($id, $this->definitions);
	}

	public function getDefinition(string $id): DefinitionInterface
	{
		if (!array_key_exists($id, $this->definitions)) {
			throw new NotFoundException(sprintf('Alias (%s) is not being handled as a definition.', $id));
		}

		$definition = $this->definitions[$id];

		return $definition->setContainer($this->getContainer());
	}

Thank you for your time.

Hi, for now, yes, your own implementation would be my suggestion.
However, I'm working on a new feature that will allow you to compile the container ready for production, that will generate a container implementation that just instantly instantiates what you want, based on what you have defined. I've had some health issues recently so development has been slow, but hoping it's only a couple of months out.

Hi @philipobenito
Thank you for your swift reply!
I'm already more than happy with your quick answer confirming my proposal.
A precompiled definition set sounds awesome, I'm eager to see what it becomes!

I'll provide some insights as well on how we use the container since those are always valuable :)
We generally only use the ->addShared method with a callback as second argument which can instantiate the argument, it is super simple to use.
We also use BootableServiceProviderInterface to avoid having to define everything on the provides method (I realise that this is probably the main reason that we have such a big performance impact), it is that, or running into mistakes because a service was not exposed.
We also wrote a test that can find all definitions and checks if it can actually construct those instances (part of avoiding those other mistakes that can happen 😄)

Container factory test
final class ContainerFactoryTest extends TestCase
{
	private static ?Container $container = null;

	public static function getContainer(): Container
	{
		if (self::$container === null) {
			self::$container = ContainerFactory::load();
		}

		return self::$container;
	}

	/**
	 * @test
	 * @dataProvider dataProvider
	 */
	public function itShouldProvide(string $class): void
	{
		$actual = self::getContainer()->get($class);

		if (class_exists($class)) {
			$this->assertInstanceOf($class, $actual);
		}

		$this->assertNotNull($actual);
	}

	public function dataProvider(): array
	{
		$classes = [];
		foreach ($this->getAllContainerDefinitions() as $definition) {
			$classes[$definition->getAlias()] = [$definition->getAlias()];
		}

		return $classes;
	}

	/**
	 * @return DefinitionInterface[]
	 */
	public function getAllContainerDefinitions(): iterable
	{
		/** @var DefinitionAggregateInterface $providerAggregate */
		$providerAggregate = $this->getPrivateProperty(self::getContainer(), 'definitions');

		return $providerAggregate->getIterator();
	}

	public function getPrivateProperty($class, string $propertyName)
	{
		$property = new ReflectionProperty($class, $propertyName);

		$property->setAccessible(true);

		return $property->getValue($class);
	}
}

PS. Feel free to close this issue as you see fit.
I wish you a speedy recovery @philipobenito!

@mrtus yeah, the bootable service provider is where your big hit is going to come from, but I understand it can be quite annoying if you miss something in provides, the approach with that was really to try and provide a balance, it's less convenient, but allows for lazy loading which hugely improves performance for big applications, as it will only ever define what is needed in the current process.
Hope that gives you a little context on it.
The compiled container is my main priority for the package right now, but I may also look at how I might improve the iteration of definitions, storing against keys is unfortunately not the answer, as it doesn't solve the problem of knowing what's defined directly with the container and what is in a service provider, all about balance again with that, but may be able to squeeze some more performance out of it somewhere.
I'll close this as you mentioned but I'll pop a comment here when I have have something you can play with with the compiler, your app might actually be a great test case if it's big.

Yes, I was making the same conclusion about the provides, I understand the use of the provides but it also is a hell in maintenance. Maybe we are simply not conditioned enough as developers to actually use it 🙈.
We stepped away from it because we caused a couple of incidents with our app a couple of years back, because of missing definitions, hence also the additional container factory test.
Some more details then;
At boot we have about ~600 dependencies configured.
Additional service can be added dynamically as well (which won't be solvable through a compiler) and will always be created through reflection and auto-wiring.
Taking a look at ReflectionContainer the cacheResolution could be a solution, also with tags. Although maybe that is a bandaid on a different problem 😁.

Yeah you'd sort of just be moving the problem with that, reflection performance may well be just as bad with that many definitions.
It is kind of a no win choice, convenience vs performance :-(

Saying that though, you'd only actually be reflecting on what's needed in the process, so you may be better off,  you'd lose any and all customisation options that way though


Brush chart styling has solid slection area

When selecting dates for the brush, the selection area is a solid opaque rectangle instead of the chart highlight
Expected Behavior
we should see the chart highlight, not an opaque selection rectangle
Possible Solution
brush styling
Steps to Reproduce (for bugs)

Go to the kitchen sink
play with the brush

Your Environment

Version used: 1.4.4
Browser Name and version: Chrome
Operating System and version (desktop or mobile): mac osx

Maybe we have a bigger problem?
Have you tried to remove the /docs folder altogether?

Fixed on  #181


feat!: use built-in PRNG

Types of changes

[ ] Chore (a non-breaking change which is related to package maintenance)
[ ] Bug fix (a non-breaking change which fixes an issue)
[ ] New feature (a non-breaking change which adds functionality)
[x] Breaking change (fix or feature that would cause existing functionality to change)

Description
This PR replaces rand-seed with a built-in pseudorandom number generator based on Prando.
The change has the following benefits:

Less code than using a third-party package. The built-in PRNG class is designed specifically for @prismicio/mock and excludes general methods that would not have been used.
Is less prone to algorithm changes that result in different generated values.
Fixes a bug in rand-seed where the default export was incompatible with Vite's default Rollup configuration.

Changing the PRNG algorithm causes @prismicio/mock to generate different values than those generated with rand-seed. As a result, all generated values will be different—but consistent—than values generated before this PR.
As a result, this PR is a breaking change.
Dependencies
This PR also updates all dependencies.
Use Vite
This PR also replaces siroc with Vite + vite-plugin-sdk to build the package.
Checklist:

[ ] My change requires an update to the official documentation.
[x] All TSDoc comments are up-to-date and new ones have been added where necessary.
[x] All new and existing tests are passing.

🦕

Codecov Report

Merging #13 (feb90ee) into main (1ef56ee) will increase coverage by 0.68%.
The diff coverage is 81.48%.

@@            Coverage Diff             @@
##             main      #13      +/-   ##
==========================================
+ Coverage   81.48%   82.16%   +0.68%
==========================================
  Files          81       82       +1
  Lines        1037     1060      +23
  Branches      233      236       +3
==========================================
+ Hits          845      871      +26
+ Misses        130      122       -8
- Partials       62       67       +5

Impacted Files
Coverage Δ

src/lib/PRNG.ts
77.27% <77.27%> (ø)

src/lib/createFaker.ts
88.88% <100.00%> (+0.31%)
:arrow_up:

src/lib/lorem.ts
90.00% <100.00%> (ø)

src/value/sliceZone.ts
69.23% <0.00%> (-3.85%)
:arrow_down:

src/value/link.ts
81.25% <0.00%> (-1.11%)
:arrow_down:

src/model/link.ts
100.00% <0.00%> (ø)

src/value/customType.ts
100.00% <0.00%> (ø)

src/lib/buildEmbedField.ts
83.33% <0.00%> (+16.66%)
:arrow_up:

src/value/richText/embed.ts
88.88% <0.00%> (+33.33%)
:arrow_up:

... and 1 more

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.


Add caching for exclusion list

Reviewer: @sammacbeth @jonathanKingston @kdzwinel

Description:
Cookie exclusion list was not being cached. If the list endpoint returned a 304 there would be no response and the list would fail to load. This PR adds caching based on the UserAgent list implementation.
Steps to test this PR:

Load extension
Visit site with excluded cookie domain (e.g. google 3rd party login)
Login should work
Reload extension (to force reloading exclusion list)
Repeat steps 2-3
Note: Since this relies on getting a 304 response you may need to reload the extension in quick succession

Automated tests:

[ ] Unit tests
[ ] Integration tests

Reviewer Checklist:

[ ] Ensure the PR solves the problem
[ ] Review every line of code
[ ] Ensure the PR does no harm by testing the changes thoroughly
[ ] Get help if you're uncomfortable with any of the above!
[ ] Determine if there are any quick wins that improve the implementation

PR Author Checklist:

[ ] Get advice or leverage existing code
[ ] Agree on technical approach with reviewer (if the changes are nuanced)
[ ] Ensure that there is a testing strategy (and documented non-automated tests)
[ ] Ensure there is a documented monitoring strategy (if necessary)
[ ] Consider systems implications

@sammacbeth ready for review again.


Using bigtable-client with sqoop

I am working on using sqoop with BigTable. On configured a dataproc cluster with sqoop 1.4.7 and installed hbase 1.3.2, I added bigtable-hbase-1.x-hadoop-1.3.0.jar to hbase/lib and modified hbase-site.xml as described in cloud-bigtable-examples.
As a result:

HBase shell works
sqoop import to HBase(BigTable) doesn't work with an error. Full error at the bottom.

Caused by: java.lang.IllegalArgumentException: Bigtable does not support managed connections.

Does anyone make it working with sqoop or there is no way to make it working? I tried several version of bigtable-client with no luck. Import to locally installed HBase works so it's not a problem with sqoop and rather bigtable-client issue.
Full error message:

18/05/07 14:31:04 ERROR tool.ImportTool: Import failed: java.io.IOException: java.lang.reflect.InvocationTargetException
at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:240)
at org.apache.hadoop.hbase.client.ConnectionManager.createConnection(ConnectionManager.java:432)
at org.apache.hadoop.hbase.client.ConnectionManager.createConnection(ConnectionManager.java:425)
at org.apache.hadoop.hbase.client.ConnectionManager.getConnectionInternal(ConnectionManager.java:303)
at org.apache.hadoop.hbase.client.HBaseAdmin.(HBaseAdmin.java:238)
at org.apache.sqoop.mapreduce.HBaseImportJob.jobSetup(HBaseImportJob.java:163)
at org.apache.sqoop.mapreduce.ImportJobBase.runImport(ImportJobBase.java:268)
at org.apache.sqoop.manager.SqlManager.importTable(SqlManager.java:692)
at org.apache.sqoop.manager.MySQLManager.importTable(MySQLManager.java:127)
at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:520)
at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:628)
at org.apache.sqoop.Sqoop.run(Sqoop.java:147)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:76)
at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:183)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:234)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:243)
at org.apache.sqoop.Sqoop.main(Sqoop.java:252)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:238)
... 16 more
Caused by: java.lang.IllegalArgumentException: Bigtable does not support managed connections.
at org.apache.hadoop.hbase.client.AbstractBigtableConnection.(AbstractBigtableConnection.java:130)
at com.google.cloud.bigtable.hbase1_x.BigtableConnection.(BigtableConnection.java:54)
... 21 more

At first glance, it looks like sqoop's code needs to change.  The stacktrace shows the use of the HBaseAdmin class, which is only usable with HBase.  HBase 1.0 introduced new interfaces that allowed Cloud Bigtable to extend the HBase interfaces.  I'm guessing that sqoop will have a few of changes.
Here's the list of differences.

I'm going to close this bug, since it sounds like sqoop is not yet up-to-date with the idioms introduced in HBase 1.0, which is about 3 years ago.  It seems like the Cloud Bigtable client is working as intended.  I'm going to close this issue.  If you would like, feel free to open a bug on https://github.com/GoogleCloudPlatform/cloud-bigtable-examples which is more oriented towards samples of client use and samples of integrations.


Release 0.6.0

Update CHANGELOG for 0.6.0
Update version to 0.6.0

Closing as empty changelogs generated in the PR


Automate VPN connection via the app.

How about if the app would not only establish a Tor connection when opened, but also a VPN connection to the node's location, so that we can then access the node with a home IP. Tor is slow, Wireguard or FritzVPN connection is faster, so we can access the node faster.

This is already possible. But please keep in mind that both, your phone AND your node need to be configured to use the VPN. I personally use Tailscale and the performance is sooo much better than tor. Here are the instructions on how to setup Umbrel + Tailscale. Basically the trick is to edit the IP Address after scanning the node connection:
https://github.com/michaelWuensch/BitBanana/wiki/Connect-Umbrel#how-to-connect-bitbanana-using-clearnet--tailscale

Yes, I know that, but if I want to pay something quickly, I always have to connect first.  If I forget this, it will take even longer.  I use Wireguard.  It would be great if the app did this automatically

Ah, I understand. For this to work I would need to add an explicit VPN dropdown to the node connection data or an appwide setting so the app knows which VPN to start when connecting to the node. I'll see what I can do. Thanks for the input.

Such a feature would help to improve the usability and the user friendliess a lot. There are very easy VPN solutions available like the AVM VPN feature in the the FritzBox-Routers. It is possile to implement this VPN connection in the Windows OS & Android. And it would be very helpful if the VPN connection would be automatically established if I open your App.
Thank you for considering to implement such a feature.

I am leaving this link for reference on how to implement it for Tailscale for example:
https://github.com/tailscale/tailscale/issues/3547

Making good progress. Basically it works, but unfortunately controlling VPNs does not work reliably after phone was locked for a while.
I opened an issue on tailscale: https://github.com/tailscale/tailscale/issues/10831

This feature is now available in the new version 0.7.4 that was just released.


Add HTTP2 errors, and curl-sys error consts up to curl 7_64_1.

Required for https://github.com/rust-lang/cargo/issues/6788.
References:

libcurl-errors man page
curl.h error enum

The names of the methods on curl::Error could be better but will probably do. Happy to hear suggestions.

Thanks for this!
To get past CI I think that this is going to need to be updated since these constants I don't think are present in older versions of curl. The "mac static" build is going to fail (due to unrelated reasons), but the other system systest tests are failing I thinkl

OK, I'll take a look :)

All but macOS_static are passing now so I think I've ignored the right consts.

Thanks!


refactor: add code-pushup.preset.ts

This PR adds a code-pushup.preset.ts and uses the preset in code-pushup.config.ts
Notice:
Coverage helper still unfinished.

Sry for the mess in the first version of the PR!