Scenario: Windows Terminal 2.0 Process Model Improvements

This scenario is tracking a number of enhancements we'd like to make to the fundamental process model of the Windows Terminal in v2.0. The following deliverables all have something to do with the way the Terminal is launched, or the way connections or instances are managed, and as such, the solution to any one of these areas should make sure to take into account the others.
Window / Session Managment

[ ]  #1256 Tab Tearoff/ Reattach

#2080 is a draft spec for tearoff and default terminal app (below)
Presumably this will involve some way to communicate different terminal instances from one window to another.

Proposed ideas include a manager process that's hosting all the terminal instances and connections, and then separate windows for actually drawing these instances on the screen

[x] Run wt in the current window

See #4472.
This is being included because it ties strongly with the above deliverable.
See #3495 / #607 - Commandline Arguments for the Windows Terminal.md, which also brought this idea up.
This involves finding some way for the user to specify on the commandline "I want to perform [some command] in [the current window | a specified other WT window | a new WT window]"
✔ Implemented in #8898

[x] Single Instance Mode

See #2227
This would be an important parallel work thread for #653 and #492
✔ Implemented in #9118

[x] #653 Quake-style dropdown

Again, included in this list for it's fundamental strong ties to session management.
Often mentioned in the discussion of quake-style dropdown is the need for a single-session mode, so pressing the global hotkey would always activate the single instance, and new windows would instead glom to the existing instance
See #8888 for follow-up tasks related to Quake mode

Elevation

[x] #1032 Mixed Elevation

This is a hard problem, and I'm making no firm commitments that we'll be able to solve it for sure in 2.0.
The goal of this deliverable is to find a safe way that we can support both elevated (High-IL) and unelevated (Medium-IL) tabs, panes, etc all in the same window.
Ideally, if a user creates a new elevated tab from an unelevated window, then all the unelevated tabs would seamlessly appear in a new elevated  HWND hosting both unelevated and elevated tabs simultaneously.
Elevated connections can't be hosted in an unelevated HWND, because that allows for a trivial escalation-of-privilege vector utilizing the Terminal.
This problem should arguably be investigated first. If this is something that's technically possible, it will certainly have an influence on the way the rest of these deliverables are architected.
❌ Resolution: This is not going to be technically achievable, unfortunately.

[x] #632 Open a Profile as elevated

If the above is not achievable technically, then the user should still be able to specify a way to force a profile to open elevated.
If mixed elevation isn't possible:

If the current window isn't currently elevated, open a new window when someone's profile is marked "elevated: true"
If the current window is elevated, open in the same window.

Default Terminal

[x] #492 Default Terminal Application

This one's a little different than the others. While the rest were Windows Terminal specific features, this deliverable is more of a OS feature than a Terminal feature.
This concerns the ability for an arbitrary application to be registered with the OS as the "Default Terminal Application", and be started automatically when the user starts an arbitrary commandline application.
This also has some interaction with the above deliverables. When a commandline application is started this way, should they open as a new tab in an existing Terminal window, or start a new window?

Specs

Spec for Windows Terminal Process Model 2.0 #7240
Spec for Windows Terminal Window Management #8135
Spec for Elevation QOL improvements #8455
Default Terminal Spec #7414
Quake mode spec #9274

TODOs
These are also tracked in https://github.com/microsoft/terminal/projects/5. This provides a nested list, to mentally track which things are dependent upon other things. This is basically a copy of a page of my notebook.

Window Management

[x] Window Management, PR: #8898

[ ] Next/Prev window keybindings
[x] Windowing Behavior, PR: #9118

[ ] Smart wt -w 0 handling
[x] Name windows on commandline

[x] nameWindow action (#9662)
[x] openWindowRenamer action (#9662)
[x] window-level toast for displaying window ID, action: idenfifyWindows (#9523)

Originally I thought I'd need generic toasts for this, but I'm gonna just do this first, and come back to generic toasts

[x] Quake Mode has been moved to #8888
[x] New Window Action PR: #9208

Tear Out
Currently planned state, notes:

[ ] wt.exe accepts --content guid on the commandline to start in content mode. Additionally, Make the Control able to have the Core OOP.

these two were originally different bullet points, but I think they need to be combined into one singular PR. They don't make sense alone.

[x] in content process mode, it registers ContentProcess for that GUID with CoRegisterClassObject
[x] ContentProcess::Initialize(IControlSettings, IConnection) instantiates a new ControlInteractivity (in the content process) (if one hasn't already been initialized)
[x] ContentProcess::RequestSwapChainHandle(pid) will duplicate the handle if the pid is different
[x] wt properly tracks the lifetime of its content. When that's discarded by the last window process, we'll exit.
[x] Do the above line, but better. Now we're using a lock and an event, which is ew. Instead, we should do the Conhost ExitThread() thing on the main thread, and then ExitProcess() when the content process is dtor'd.
[x] Move all the chaos I've introduced in main.cpp into its own dedicated file/class or something.
[x] An embedding process needs a way to know that the content process is ready, better than a Sleep(2000)

A handle to an event is probably the cleanest way - have the window create the event, then pass the handle in CreateProcess & on the commandline to wt --content {guid} --signal {handle}, then have the content process set the event when it's ready.

📝 in ~dev/migrie/oop/the-whole-thing~ dev/migrie/oop/infinity-war
[x] The Connection is made in the core
[x] When the Core signals that the swapchain changed, and the TermControl asks what the swapchain handle is, the Control passes in it's PID. If the PID isn't the same, DuplicateHandle the swapchain to that PID.
[x] The sample is updated with a version of the Control that's also OOP
[x] If the content process dies, the control needs to be able to display a message box.
[x] Make sure UIA signaling still works (accevent.exe in the SDK, C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64)
[x] Make sure that reading the contents of the buffer with Accessibility Insights still works

💩
InteractivityAutomationPeer extends Windows.UI.Xaml.Automation.Peers.AutomationPeer. But we're making the interactivity peer in the content process, not in the control layer.
When we construct the IAP, we throw instantly, because the WUX..AutomationPeer can't be created off the main thread.
How do we only expose the WUX..AutomationPeer via TermControl, but not IAP?

[x] The _raiseContentDied should display the error internal to the TermControl. Kinda like the renderer warning, but for this, we need to kill the SwapChainPanel too.
in ~dev/migrie/oop/the-whole-thing~ dev/migrie/oop/infinity-war
Relevant diff: 23a19c58181b489b10a2049232f23b033dbdab8d...5c17603a94a76d47c4427f49493bca4eeb8fa774
[x] Add a velocity flag to gate behind dev builds only. Probably safe to just gate the --content flag for now.
[ ] Guard calls to _interactivity, _core in TermControl. Those objects might go out of scope at any moment, so pretty much all access needs to be try/caught.

we may want to do a function-level try, with a CATCH_RAISE_DIALOG() macro we write to raise the connection died notice. Might be the most minimal diff.
Could likely be a follow up to original PR.
There's a silly idea in dev/migrie/oop/2/cptn-marvel. I really hate it, it's a HUGE amount of churn.

[x] There's a lot of debug spew that makes me think the OOP core does something off the main thread.

BriAl and I synced - this is nothing to worry about. This is basically just COM logging "i'm about to increment the refcount"
Still trying to find a viable way to suppress that logging.

 Was what was in main correct? Revisit the original PRs for inspiration.

Did it ever work? there's seemingly no record of it working in 23a19c58181b489b10a2049232f23b033dbdab8d...5c17603a94a76d47c4427f49493bca4eeb8fa774
#10051 has a fairly different implementation than the above diff
I may have simply forgotten that narrator / UIA uses exceptions for control flow, which makes debugging a pain

[x] ControlCore::_IsClosing TODO!
[x] ContentProcess::RequestSwapChainHandle tracelogging TODO!
[x] TermControlAutomationPeer::GetLocalizedControlTypeCore that string used to come from localized resources, it can't anymore.
[x] The Control properly manages the lifetime of the HANDLE duplicated to it. A wil::unique_handle?
[x] IMPORTANT: For whatever reason, when the second window attaches to the content, it renders basically nothing. Input gets sent just fine, but the output doesn't render.. Fixed in 7b3ca8332
📝 Now moved to dev/migrie/oop/2/infinity-war
👀 in #12938

[x] TermControls need to have a local TerminalSettings instance.  We did all this work to get the connections in the same proc as the TermControl, we totally forgot the Settings.
[x] Make sure updating/changing settings works fine across processes
[x] Make sure previewing the color scheme still works. That works with some parent/child trickery that won't work OOP.
📝 in dev/migrie/oop/ragnarok

[ ] Some misc cleanup before endgame:

[ ] existingConnection in NewTab was redundant / unused
[ ] _SplitPane renamed to _SplitPaneActiveTab etc.
[ ] Refactoring to allow the TerminalTab to be initialized without a control
[ ] Other stuff to, to minimize the diff
not started, in dev/migrie/oop/2/black-widow cause this one's not really consequential, is it now.

[ ] Make the app able to do the OOP instantiation.

Notes in https://github.com/microsoft/terminal/issues/5000#issuecomment-1137653858

[x] Make the sample able to pop a control into a new window.

✔ in dev/migrie/oop/the-whole-thing. I didn't pop it into a new window, just made it so multiple windows could connect to the same one.

[ ] Defterm is out of proc.

[ ] DEFTERM: Incoming connections need to be tossed to the ContentProcess. Guh.
not started in dev/migrie/oop/2/captain-falcon.

[x] Tabs can be serialized to a json blob, with their tab & pane structure.

See #766, because this is highly relevant
This may have already been done for me by #10972
[x] Serialize TerminalTabs
[x] Serialize SettingsTabs

[ ] move-pane -w <id> to move a pane/tab to another Terminal window. This will prove we can move panes without the whole instantiation of a new window process.

Notes in https://github.com/microsoft/terminal/issues/5000#issuecomment-1183694124
📝 in dev/migrie/oop/wandavision (link to relevant diff from dev/migrie/oop/endgame)

[ ] When a tab is torn out of a Terminal window, it can be dropped & re-attached onto another terminal window

Notes in https://github.com/microsoft/terminal/issues/5000#issuecomment-1185447944
📝 in dev/migrie/oop/2/loki

[ ] When a tab is torn out of a Terminal window, it can be dropped somewhere else and turned into a new terminal window

not started yet, in dev/migrie/oop/no-way-home

[ ] When a tab is torn out, we'll create a new window for the tabs left behind, and move the current window around.

We'll need to still be able to drop this window on an existing window somehow.
Use EvanK's prototype here. We're gonna need to extend the drag bar over the TabView and do everything ourselves
[ ] #12616
not started yet, in dev/migrie/oop/multiverse-of-madness

other notes
Just moving these lower in the body to make managing this doc easier

This is a pseudo design that Dustin and I discussed. There's a lot more work that needs to be done here, but I need to save this somewhere outside of a Teams chat history

---
struct TerminalControl: winrt::implements<MUX::IUIElement> {} // XAML Control
// calls: interactivity.PointerMoved(Point{x, y});
// calls: interactivity.PointerClicked(Point{x, y});
// links: TerminalCore.lib <----> or consumes TerminalCore.dll from RT
^^^ TerminalControl.dll ^^^

---
struct WPFTerminalControl { HWND _h; }
// calls: interactivity.PointerMoved(Point{x, y});
// calls: interactivity.PointerClicked(Point{x, y});
// links: TerminalCore.lib
^^^ WPFTerminalControl.dll ^^^

vvv TerminalCore.lib vvv // Cancelled. TerminalCore.lib or .dll
struct Coord {};
struct PointerInfo {};
struct KeyInfo {};
struct TerminalControlInteractivity;
struct ControlCore; // < implements ... something? // this should just be TerminalCore?
struct TerminalCore; // < implements the "conhosty APIs (ITerminalDispatch, etc.)
// links: dx.lib buffer.lib types.lib

vvv TerminalCore.UnitTests.dll vvv
// contains: interactivity tests
// contains: core tests
// links: TerminalCore.lib

[x] Split TerminalControl into lib and dll
[x] Split TermControl into Control.TermControl and Control.ControlCore and Control.Interactivity
[ ] Add some Core.ControlCore tests from things in #7001
[ ] Create a WinRT boundary on Core.Interactivity between it and TermControl
[ ] Enable Core.ControlCore to exist out-of-proc with XAML, or in-proc

This might involve creating a scratch project to consume an in-proc one and an out-of-proc one

[ ] the Core can create connections, or have them passed in. (so an OOP core can have a connection in it's own process)
[ ] Much more. This is just what's immediately on my radar.

_4-30-21_:
I need to do the DX `HANDLE` thing before I can do the rest of the projection boundary. The projection boundary is in `dev/migrie/interactivity-projection-000`, which is almost done now.
dev/migrie/oop-scratch-4 has the final state of the OOP prototyping on this element. In that branch,

HostAndProcess::CreateSwapChain creates a swapchain with DCompositionCreateSurfaceHandle.
It attaches it to the SwapChainPanel with ISwapChainPanelNative2::SetSwapChainHandle.
It duplicates that handle to the content process, and calls HostClass::ThisIsInsane
Later on, the HostClass passes that handle to the DxEngine

So we'll need to do basically that, but a little different, to handle all the actual edge cases we have.

pre-1.10 era work

[x] First, update DxEngine to accept the handle, but don't otherwise change anything (#10023)

Then, change TermControl to create the handle with DCompositionCreateSurfaceHandle, hook it up to the SwapChainPanel with ISwapChainPanelNative2::SetSwapChainHandle.

DxEngine::_CreateDeviceResources will need to trigger a callback in the Core, that will then ask the TermControl to create a new swapchain for it.
Wait no that's wrong. the DxEngine will always be making the swapchains, because it knows when it needs a new one.

[x] DxEngine will always make new swapchains, when needed, with DCompositionCreateSurfaceHandle. It'll raise an event when that happens. The Core will handle that, then raise an event the control will listen to. The Control will handle that event, then ask the Core for the new swapchain HANDLE, as a uint64_t. The Control will use that uint64_t to attach to the SwapChainPanel via ISwapChainPanelNative2::SetSwapChainHandle.

This is also the way it is in (#10023)

👀 in #10023

[x] Then we'll come back to the rest of the projection

👀 in #10051

[x] At this point, we should make a sample app that's just a grid with two spaces in it. One for an in-proc term control, and one for an out of proc one. We won't do the OOP one yet.

👀 in #10067

[x] Merge #10115 into #10067
[x] Enable the Connection able to be created OOP from the rest of the TerminalPage. The content process will be the one to instantiate the connection.

[x] The Core is passed a (guid? String?) of a type of connection to spawn, and an IConnectionSettings object. The Core instantiates a type of connection based on that guid/string, and passes the IConnectionSettings from the window process to that new constructor.
[x] How does the azure connection work? I think that one's implemented in TerminalApp. If it's a String, we could pass the winrt name, ITerminalConnection conn = RoCreateInstance("TerminalApp.AzureConnection"); conn.Create(iConnectionSettings); , right?

No, turns out the Azure connection is in TerminalConnection. So this was actually fine the whole time.
Whatever, we're keeping the RoGetActivationFactory thing though, for future needs.

[ ] How does the debug tap work?
Switch from RoActivateInstance&Initialize to RoGetActivationFactory

Even neglecting the Windows Runtime, this isn’t even possible in C++ or C#.

[x] Reattach event handlers that I disabled for performance's sake
[x] Merge #10115 into this branch, or into dev/migrie/oop/connection-factory-rebase, which is attempting to rebase these changes onto dev/migrie/oop/sample-project
📝 in dev/migrie/oop/connection-factory

[x] 🦶 PUNTED ~Move the Core, the Interactivity, into Core.dll. We'll need that for:~

We may not actually need this. It'd be nice to not have to load all the settings, but we could live with it.

Elevation

[x]  #1032 Mixed Elevation

This is a hard problem, and I'm making no firm commitments that we'll be able to solve it for sure in 2.0.
The goal of this deliverable is to find a safe way that we can support both elevated (High-IL) and unelevated (Medium-IL) tabs, panes, etc all in the same window.
Ideally, if a user creates a new elevated tab from an unelevated window, then all the unelevated tabs would seamlessly appear in a new elevated  HWND hosting both unelevated and elevated tabs simultaneously.
Elevated connections can't be hosted in an unelevated HWND, because that allows for a trivial escalation-of-privilege vector utilizing the Terminal.
This problem should arguably be investigated first. If this is something that's technically possible, it will certainly have an influence on the way the rest of these deliverables are architected.
❌ Resolution: This is not going to be technically achievable, unfortunately.

[ ]  #632 Open a Profile as elevated

If the above is not achievable technically, then the user should still be able to specify a way to force a profile to open elevated.

If mixed elevation isn't possible:

If the current window isn't currently elevated, open a new window when someone's profile is marked "elevated: true"
If the current window is elevated, open in the same window.

What does this mean re. https://github.com/microsoft/terminal/issues/6893#issuecomment-657554241 and https://github.com/microsoft/terminal/issues/3581#issuecomment-581624314 etc.?
Will each window belong to a different process? Otherwise I don't understand what does "elevated window" even means.
And what if "elevation" actually mean "OTS elevation" rather than "AAM elevation", since the non-elevated user is not an admin? Currently at least that works. I hope the new model won't somehow break that.

Currently, yes, each terminal window is its own process. Each WT process has one window, so when you're running WT elevated, the window itself is elevated. Unfortunately, nothing in the new process model is going to have an affect on elevated drag drop. The team that owns the platform drag/drop APIs has specifically told us that drag/drop is unsupported in an elevated HWND.
Furthermore, we're not going to be messing with mixed elevation as a part of this effort anymore, because that turned out to be technically less possible than we hoped. So nothing about that story is about to change.

Maybe I'm missing something, but I just opened two elevated instances of WordPad, and dragged some text, a picture and an OLE Paint drawing from one to the other. And inside each document.
If by "platform" you mean UWP/Store/XAML/whatever-you-call-it-today, I just launched WinDbg Preview, installed from the Store, uses XAML and all that jazz, and managed to rearrange the windows in the elevated instance by dragging.

Specifically: "UWP XAML" (not WPF, which WinDbg Preview uses) uses the modern WinRT drag/drop APIs. Those APIs require a data broker process. That broker just doesn't work from an elevated context. Terminal, by way of it using "UWP XAML", is subject to this specific limitation.

About the Mixed Elevation part: Is there anything preventing possibility of a feature to launch medium integrity shells from high integrity wt instance? I know this is rather limited in comparison to the original plans, however should be much easier to support

to launch medium integrity shells from high integrity wt instance

I would like to hear what others think about this approach. This can be achieved running gsudo -i medium on a wt tab or by creating a profile for it. There is also MediumPlus Integrity, which is higher than Medium (no medium process can tamper with it) but still hasn't admin acesss... (gsudo -i MediumPlus)

Just as something that I saw mentioned as a comment on the spec, but not incorporated, I think the idea of having a separated elevated-settings.json file makes a lot of sense as a counterpart to elevanted-state.json. This gives a number of benefits

The file can be admin writeable only to help prevent malicious modification
You get for "free" admin specific settings modifications, including but not limited to custom styling, admin only profiles, and admin-specific startup actions.

separated elevated-settings.json file makes a lot of sense as a counterpart to elevanted-state.json.

I don't think this is a terrible idea. How do we deal with users who are currently using their unelevated settings in admin windows though? Would users need to maintain basically two copies of their settings file?
Maybe we only use the elevated-settings file if we find it? If the file doesn't exist, then just fall back to the normal settings.
I guess it might make more sense if the elevated-settings could be layered on top of settings.json (a la #2303, #6502, #2933)

I wasn't thinking in terms of migration as much as qol, but I did also consider layering as an approach or adding a "create from unelevated settings" option in the settings UI. I didn't think thoroughly about the security implications (neither are technically worse than what exists now, but it could be better) so I didn't want to suggest something.

Use settings.json and override/merge values with anything in the elevated one.

i agree, layering / overriding is the best choice, in either direction.
although checking if elevated-settings.json exists, then using that and overriding with user one might make more sense so that

The file can be admin writeable only to help prevent malicious modification

is not pointless

<notes to self>
will be edited with real content. The body of this issue has now gotten prohibitively long and editing is laggy 🙃

will be edited with real content. The body of this issue has now gotten prohibitively long and editing is laggy 🙃

I don't know if my issue related to the process model improvements, but I guess so.
Why don't you implement a per-tab execution policy for Windows Terminal? It would be very nice to have separate execution policies for different tabs, for everydays tasks Undefined policy is quite sufficient, but for some special development task like creating Python virtual environment I may need Unrestricted policy. It may be implemented by hotkey, or holding Ctrl-Shift on tab creation, whatever.
In the #632 you discussed why it is bad to have a mix of (non)elevated tabs, but here is a different thing. Changing execution policy and acquiring elevated permissions is not the same thing, and one can be done without anotherю

@Suncatcher Thanks for the request. It's a good idea! The catch here, though, is that the execution policy is a property of the thing that is running inside terminal, right? I think it's actually specifically a PowerShell concept... and I don't believe there's a way using the Windows API to influence the execution policy of any instances of PowerShell under a process tree using the CreateProcess API (or its friends.) Even if so, it wouldn't mean anything to cmd.exe or Cygwin or nushell or yori, simply because they don't have an equivalent concept. Perl does, somewhat, have a restricted mode. I don't know if that's equivalent... and perl doesn't see much interactive use.
The easiest way to accomplish this today is going to be to add new profiles that use PowerShell native arguments to set the execution policy you want, and open those profiles from the New Tab dropdown menu.
As an example...

            {
                "commandline": "\"C:\\Program Files\\PowerShell\\7\\pwsh.exe\" -NoExit -Command \"Set-ExecutionPolicy Restricted -Scope Process\"",
                "guid": "{d4207635-ac89-4c36-803f-7566ab0e243b}",
                "hidden": false,
                "icon": "🔐",
                "name": "PowerShell (Restricted Policy)",
                "startingDirectory": "%USERPROFILE%",
                "background": "#330000"
            },

thanks, didn't know this capability to set PS arguments per profile. Will use it.

placeholder comment for notes

In case I lose this over the long weekend:
Actual order of events I get
sequenceDiagram
    participant Source
    participant Target

    Note Left of Source: _onTabDragStarting
    Source ->> Target: Drag tab
    Note right of Target: _onTabStripDragOver
    Target ->> Target: AcceptedOperation(DataPackageOperation::Move)
    Source --> Target: Release mouse (to drop)
    Note right of Target: _onTabStripDrop
    Target -->> Source:
    Note Left of Source: TabViewTabDragStartingEventArgs<br>.OperationCompleted
    Note Left of Source: _onTabDroppedCompleted

You'll note: There's no message that the source gets prior to the target's TabStripDrop to confirm that the drop worked. So, we can't detach the content from the source before the target would already take it.
FURTHERMORE
There's no event in the target after the source gets the acceptance. So there's no way for the target to wait for the source to detach first.
LASTLY
There's no way for the target to communicate back to the source. The e.Data() is null on the target - only the DataView() is accessible. That's immutable (obviously). And OperationCompleted and TabDropCompleted give you didly.
The incredibly dumb solution I'm considering
sequenceDiagram
    participant Source
    participant Target
    participant Monarch

    Note Left of Source: _onTabDragStarting
    Source --> Source: stash dragged content
    Source --> Source: pack window ID into DataPackage

    Source ->> Target: Drag tab
    Note right of Target: _onTabStripDragOver
    Target ->> Target: AcceptedOperation(DataPackageOperation::Move)

    Source --> Target: Release mouse (to drop)

    Note right of Target: _onTabStripDrop
    Target --> Target: get WindowID from DataPackage
    Target -) Monarch: Request that WindowID sends content to us
    Monarch -) Source: Tell to send content to Target.Id
    Source --> Source: detach our content
    Source -) Monarch: RequestMoveContent(stashed, target.id)
    Monarch -) Target: AttachContent(stashed)

    # Target -->> Source:
    # Note Left of Source: TabViewTabDragStartingEventArgs<br>.OperationCompleted
    # Note Left of Source: _onTabDroppedCompleted

Pass the source's window ID in the package. When the target accepts it, have the target ask the monarch to ask the source to send its content to the target. Extremely dumb.
Other notes
This API is particularly painful for the kinds of UI experiences we want.

[ ] We probably can manually take a snapshot of our window and stash it in the floating icon, but ew
[ ] When the tab gets dragged over the target window, we should like, immediately detach and attach to the target, but attach to the TabItem that's being dragged. So that it seems like that tab is already in the tab row. I don't think that's possible.
[ ] Dragging to the right side of the TabView? Forget about it. we'll need to basically just handle drag/drop there manually....


support controller manager prefix and namespace for multiple controller managers

This PR is created due to the need of having multiple controller managers to control multiple arms.

Replaced by #147


Business Card app: Android Basics with Compose

URL of codelab
https://developer.android.com/codelabs/basic-android-kotlin-compose-business-card
In which task and step of the codelab can this issue be found?
Second step: Build UI with composables
Describe the problem
The text mentions the following:
"Experiment with various horizontalArrangement and verticalAlignment parameters in Row and Column composables to match the design that you have."
I am still learning, but I believe it should be horizontalAlignment and verticalArrangement instead.
Steps to reproduce?
No steps. Just mistake in property names in the text.
Versions
Android Studio version:
API version of the emulator:
Additional information

Now I see that a Row actually has these properties, but a column has them called differently, hence the confusion.


Cleanup old checkpoints from finalization state

This fix significantly reduces individual finalization state size.
In a test, I run 1 proposer with 4 finalizers with configuration epoch_length=2.
After processing ~9k blocks and ~4.5k epochs, finalization state size was 767599.
After applying this PR, it has been reduced to 196002. More finalizers we have,
more memory we save, because checkpoints map holds votes from every finalizer.
Relates to #1073.

The weird lint failure should be fixed by #1084 now.

Tested 0bc5e57231477ce906f11ea3e858425f7d475e28 and while it does improve overall memory consumption, it does not resolve the syncing issue https://github.com/dtr-org/unit-e/issues/1073.

I'm looking at finalizationstate.cpp:924
GetCheckpoint(vote.m_target_epoch).m_vote_set.insert(vote.m_validator_address);
and check if actually we always pass by the ValidateVote function, if not, is an easy way to crash the node with an old vote.
As a bare minimum I think we should change anyway the log messages in finalizationstate.cpp:322 "%s: target_epoch=%d is in the future.\n", __func__, and following since is not necessarily an epoch in the future anymore.

Fixed/checked in 8fe4a2479b96ab80c2a95a5c7295e34b2bcad7a2.


IE11 open a new page directly.

Problem:
JSBin/JSFiddle demonstrating the problem:
Hello, I have no problem using sortablejs in Google, but I can't drag it on ie11. Open a new page directly.

Please create a JSBin/JSFiddle or post some code? Sortablejs should work fine in IE11.

I opened your example website in ie11 (https://sortablejs.github.io/Sortable/) and dragged it without any action. When I used dragging in the Vue project, it opened new pages directly. I tried that Vue.Draggable would also open new pages in ie11. You can see your example in ie11

Ie11 and ie10 can't work, but IE9 can

Drag to open a new page search

@bigbossjuan It does work in IE11 but I had not updated the website to use the latest version. I have updated it now so https://sortablejs.github.io/Sortable/ should be working on IE11/IE10. Does this resolve your issue?

I'm glad to see your reply. I just saw that it works in ie11 and ie10, but it doesn't work in compatible mode with qqq browser or 360 browser. Do you know why?

@bigbossjuan Sortable does not officially support these browsers and I have not tested in them. Is there any console error message from Sortable?

There is no error message in the console, as if Sortable didn't work at all. Drag and drop directly to open a new page for search


Error when updating:  Failed to add reference. The package 'Microsoft.Azure.Common' tried to add a framework reference to 'System.Threading' which was not found in the GAC. This is possibly a bug in the package. Please contact the package owners for assistance.

Same as issue: https://github.com/Azure/azure-sdk-for-net/issues/2987
Still an issue - don't know why the previous one was closed.

Thanks for opening another one, was going to do the same since the issue persists and that one was improperly closed without explanation and followups.

What build are you targeting?  The Microsoft.Azure.Common framework does not support .net 4.0 builds, as the previous version did.  If you think you are targeting 4.5 or later and seeing this issue, please let us know what you are targeting

I'm targeting 4.5 and have the same issue.

I have also the same problem. I'm targeting 4.5.2. 2.1.0 installed fine.

Verified.  For some reason this did not show up in testing the package.  Candidate fix for this is here: https://github.com/Azure/azure-sdk-for-net/pull/3136

This should be fixed here: https://www.nuget.org/packages/Microsoft.Azure.Common/2.1.4


update readme

Current behavior

Expected behavior

Steps to reproduce the issue

Can you handle fixing this bug by yourself?

[ ] YES
[ ] NO

Environment details

Browser:
OS:
Code Version:

Additional information

Please assign this issue to me under JWOC

@Code1705 Can you please elaborate what do you want to update in readme ?

Yeah sorry bhaiya i understood something wrong, can you please elaborate the bug?

project maintainer rights and some elements to make it look attractive and interesting


Evaluate on command?

Is it possible to evaluate code blocks on command rather than instantaneously as code gets typed? I could see this potentially being problematic if I’m typing code that does something state changing like, say, modifies my vault (e.g., I’m deleting a file by path name and I’m typing out the path name in quotes).

Yeah, could provide this as an setting for the plugin, something like Evaluate automatically which when toggled off, would require the user to run a command to evaluate the document.
Although, I'd advise against the approach of doing potentially destructive things without wrapping them in something that requires user action.
So instead of just doing something like this, which would delete a file when evaluated (so when the document is loaded, by default):
(delete-file filename)

You'd do something like this:
(defn $button [filename]
  [:button {:onClick #(delete-file filename)}
    "Delete "
    filename])

(*renderReagent [$button "file-to-be-deleted"])

Which would render a button to be clicked to have the file to be deleted.
With that said, having the option of choosing when evaluation happens is not a bad idea :)

Just chiming in to say that I'd be in favor of a mode that requires explicit action on behalf of the user to execute code


Add an extern for NgModelController.$setDirty

Referenced https://code.angularjs.org/1.3.14/docs/api/ng/type/ngModel.NgModelController

Done. Signed a CLA.

When can I expect a response for this pull request?


audiounit_get_{current,preferred}_channel_layout behaves differently on recent MacBook Pro

On a mid-2018 MacBook Pro (MacBookPro15,1 running 10.14) using the default speakers, test_get_current_channel_layout_output and test_get_preferred_channel_layout_output fail with:
thread 'backend::tests::api::test_get_current_channel_layout_output' panicked at 'assertion failed: `(left == right)`
  left: `[Silence, Silence]`,
 right: `[FrontLeft, FrontRight]`', src/backend/tests/api.rs:782:9

For whatever reason, the AudioChannelLayout queried via AudioUnitGetProperty(kAudioUnitProperty_AudioChannelLayout) appears to be valid/correctly initialized (52 bytes) but is mostly filled with zero values:
AudioChannelLayout.mChannelLayoutTag == kAudioChannelLayoutTag_UseChannelDescriptions (0),
AudioChannelLayout.mChannelBitmap == 0,
AudioChannelLayout.mNumberChannelDescriptions == 2,
{
  AudioChannelDescription.mChannelLabel == 0,
  AudioChannelDescription.mChannelFlags == 0,
  AudioChannelDescription.mCoordinates == [0.0, 0.0, 0.0],
},
{
  AudioChannelDescription.mChannelLabel == 0,
  AudioChannelDescription.mChannelFlags == 0,
  AudioChannelDescription.mCoordinates == [0.0, 0.0, 0.0],
}

...which results in audiounit_convert_channel_layout returning a Vec of [mixer::Channel::Silence, mixer::Channel::Silence], causing the tests expecting [mixer::Channel::FrontLeft, mixer::Channel::FrontRight] to fail.
It's not clear to me the correct way to handle this situation.  Whether it's correct or not, I noticed that other code querying kAudioUnitProperty_AudioChannelLayout often treats AudioChannelLayout.mNumberChannelDescriptions <= 2 as special and forces mono/stereo examining the AudioChannelDescriptions only for the > 2 case.
FWIW, kAudioUnitProperty_SupportedChannelLayoutTags in the same context returns  kAudioUnitErr_InvalidProperty.
Chun-Min mentioned that @padenot has seen the same issue on a 2019 MBP.

I do, but my macbook is also a 2018.

It's not clear to me the correct way to handle this situation. Whether it's correct or not, I noticed that other code querying kAudioUnitProperty_AudioChannelLayout often treats AudioChannelLayout.mNumberChannelDescriptions <= 2 as special and forces mono/stereo examining the AudioChannelDescriptions only for the > 2 case.

Actually, that's what we currently do. We force the 1-channel and 2-channel layout to be mono and stereo:
https://github.com/ChunMinChang/cubeb-coreaudio-rs/blob/e8b8a052d8ce716c6a6f846d3a6fd4deea2d5ed8/src/backend/mixer.rs#L199-L206
I think we can simply remove the hardcode predefined values in the test.


Missing parenthesis. use 'Crop' from 'ionic-native'

'ionic-native' has a wrapper for this plugin now, so used it. :)

Interesting! Thanks.


[WEB] How do I use a version of Chrome installed at a different location?

Trying to create a web project. Flutter tries to look for Chrome in .\Google\Chrome\Application\chrome.exe but I have a Chrome Beta at C:\Program Files (x86)\Google\Chrome Beta\Application\chrome.exe. Can I somehow instruct Flutter to find my Chrome at that location, or do I have to re-install Chrome in the location that Flutter expects?
Also, if I have to reinstall Chrome: It would likely be installed as C:\Program Files (x86)\Google\Chrome\Application\chrome.exe. Is it the place Flutter looks for? (I'm not sure what Flutter means by ".\" in the path it looks at.)
Windows 10 (Chinese Home edition), 64-bit version. Flutter is installed at D:\Flutter Workspace\flutter and said directory is added to PATH. Flutter 1.17.0 channel beta, Framework rev d3ed9ec945, Engine rev c9506cb8e9, Tools Dart 2.8.0.

Update (NOT solved): #41031 suggests adding a environment variable CHROME_EXECUTABLE. I added this in Control Panel -> System -> Advanced system settings -> environment variables; and I added this variable for both global env variables and user env variables. After saving that, I ran flutter again, but flutter still looks for Chrome in the old location.


Rgb2floFiles

Hi，Thanks for your sharing!
I want to change a color optical flow image(3 channels) to .flo files ,so that i can evaluate it with my own .flo
files,Did you write the function before?Thank you very much!

Hi In that case, the converted flow will be very inaccurate. I did not write that function, neither do I think it useful.  If you really need it, you may do reverse-engineering on the flow_to_image function of lib/flowlib.py. Thanks!


Where to install node-uber at?

This might seem like a dumb question, but this is my first node_module I have used or am using.

I installed node-uber with: "npm install node-uber --save-dev"
and it installed to:  \dev\appName\node_modules\node-uber.
But when I add the code to my script in \dev\appName\www\js\index.js : var Uber= require('node-uber') ;

i get this error: Uncaught ReferenceError: require is not defined.
'node-uber' is listed in my devDependencies section of my package.json file.
What am I doing wrong?

You should install with '--save' but it makes no differences.


[P2] - Menu options will disappear when user click on "Disable Cody Autocomplete" from Cody settings.

Installation Information
Version:
5.2.21709
Describe the bug
Steps to reproduce:

Have Cody plugin installed in your JetBrains IntelliJ IDEA editor
User is already logged in to Cody
Click on "Cody" icon from bottom-right corner to open settings
Click on "Disable Cody Autocomplete" option
Again click on "Cody" icon from bottom-right corner

Observed behavior
Both the options "Disable Cody Autocomplete" and "Disable Cody Autocomplete for Java" disappear.
Expected behavior
It should toggle between Disable/Enable and not completely remove from the menu.
Screenshots:

Additional context (logs, images, etc)
No response

I can reproduce this at tip 6e3cd8577afa7cac754ed354a5c2b77ea2ae3ed8 (post 5.5.10) so this is still an issue.

can't repro


Array/List inconsistency in StrMap API

The StrMap API is inconsistent in it's usage of Lists and Arrays, eg:
toList :: forall a. StrMap a -> L.List (Tuple String a)
keys :: forall a. StrMap a -> Array String
values :: forall a. StrMap a -> L.List a

I think that the API should be focussed on arrays, given that:

it's intended usage is for an efficiency binding to the underlying js hash objects
the existing implementation of the List functions (eg value) create a temporary array in any case.

On construction it is possible to abstract over the input type, using Foldable. Unfortunately I don't believe it is possible to use Unfoldable to efficiently unpack StrMaps, at least without constructing an internal intermediate data structure with size proportional to the StrMap itself.
Hence, I think these functions:
fromList :: forall a. L.List (Tuple String a) -> StrMap a
fromListWith :: forall a. (a -> a -> a) -> L.List (Tuple String a) -> StrMap a
toList :: forall a. StrMap a -> L.List (Tuple String a)
values :: forall a. StrMap a -> L.List a
unions :: forall a. L.List (StrMap a) -> StrMap a

should be replaced with
fromFoldable :: forall f a. (Foldable f) => f (Tuple String a) -> StrMap a
fromFoldableWith :: forall f a. (Foldable f) => (a -> a -> a) -> f (Tuple String a) -> StrMap a
toArray :: forall a. StrMap a -> Array (Tuple String a)
values :: forall a. StrMap a -> Array a
unions :: forall f a. (Foldable f) => f (StrMap a) -> StrMap a

I will follow up with a PR if this change is considered worthwhile.

:+1:
I think the Unfoldable approach is possible though, even without the intermediate data structure.

Instead of fromFoldable how about just toStrMap? We use that naming in List for (Foldable f) => f a -> List a.

Instead of fromFoldable how about just toStrMap?

Is it confusing that that toStrMap constructs a map, and toArray/toList decompose one?


When and in  which new version  will the holistic interface be re-provided?

Have I written custom code (as opposed to using a stock example script provided in MediaPipe)
None
OS Platform and Distribution
windows10.linux，ARM
MediaPipe Tasks SDK version
No response
Task name (e.g. Image classification, Gesture recognition etc.)
holistic
Programming Language and version (e.g. C++, Python, Java)
python ,js,c++
Describe the actual behavior
used in 3D avatar mission

Describe the expected behaviour
in one detection, output the whole body and face landmarks

Standalone code/steps you may have used to try to get what you need
in one detection, output the whole body and face landmarks

Other info / Complete Logs
No response

@LebronJames0423 ,
Thank you for your interest in the MediaPipe solutions, Holistic new TaskAPI is already in our roadmap and will be available here in the page once becomes ready from our end with complete information in the model card. However, For now, We can not commit any timeline to be available.


tilt: 0.25.1 -> 0.25.2

Automatic update generated by nixpkgs-update tools. This update was made based on information from https://github.com/tilt-dev/tilt/releases.
meta.description for tilt is: "Local development tool to manage your developer instance when your team deploys to Kubernetes in production"
meta.homepage for tilt is: "https://tilt.dev/"
meta.changelog for tilt is: ""
Updates performed

Golang update

To inspect upstream changes

Release on GitHub

Compare changes on GitHub

Impact

Checks done (click to expand)

built on NixOS
The tests defined in passthru.tests, if any, passed
Warning: no invocation of /nix/store/q0zdw83hy6m4vly6xrcaplw49h7zi3kl-tilt-0.25.2/bin/tilt had a zero exit code or showed the expected version
0 of 1 passed binary check by having a zero exit code.
0 of 1 passed binary check by having the new version present in output.
found 0.25.2 with grep in /nix/store/q0zdw83hy6m4vly6xrcaplw49h7zi3kl-tilt-0.25.2
found 0.25.2 in filename of file in /nix/store/q0zdw83hy6m4vly6xrcaplw49h7zi3kl-tilt-0.25.2

Rebuild report (if merged into master) (click to expand)

2 total rebuild path(s)

1 package rebuild(s)

1 x86_64-linux rebuild(s)
1 x86_64-darwin rebuild(s)

First fifty rebuilds by attrpath
tilt

Instructions to test this update (click to expand)

Either download from Cachix:
nix-store -r /nix/store/q0zdw83hy6m4vly6xrcaplw49h7zi3kl-tilt-0.25.2 \
  --option binary-caches 'https://cache.nixos.org/ https://nix-community.cachix.org/' \
  --option trusted-public-keys '
  nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=
  cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
  '

(The Cachix cache is only trusted for this store-path realization.)
For the Cachix download to work, your user must be in the trusted-users list or you can use sudo since root is effectively trusted.
Or, build yourself:
nix-build -A tilt https://github.com/r-ryantm/nixpkgs/archive/9681630c715caccef0d13f1de4dbda98ef9762af.tar.gz

After you've downloaded or built it, look at the files and if there are any, run the binaries:
ls -la /nix/store/q0zdw83hy6m4vly6xrcaplw49h7zi3kl-tilt-0.25.2
ls -la /nix/store/q0zdw83hy6m4vly6xrcaplw49h7zi3kl-tilt-0.25.2/bin

Pre-merge build results
We have automatically built all packages that will get rebuilt due to
this change.
This gives evidence on whether the upgrade will break dependent packages.
Note sometimes packages show up as failed to build independent of the
change, simply because they are already broken on the target branch.
Result of nixpkgs-review run on x86_64-linux 1

1 package built:

tilt

Maintainer pings
cc @anton-dessiatov @kalbasit for testing.

@ofborg eval


add basic "Supplier upload signed agreement" journey test

https://trello.com/c/EhN9iCiv
I ended up also renovating a few of the steps to make them more flexible/clearer:

biggest change is the step checking for "downloads" is now able to (separately) check file extension, content-type, whether the file is inline or an attachment or if it's being opened in a new window (e.g. through target="_blank"). I don't know if people will think it's overkill checking for e.g. and content type 'text/csv; header=present; charset=utf-8', but I think a lot of these things don't get checked by anything else, where they're relying on S3 to supply the final header value.
change tense of some setup steps' language to make it clearer they're not the active step under test and are only being "simulated"
syntactic sugar to allow people to write slightly more illustrative sentences in some cases.

FWIW while I was at it I also added a step to download_user_research_csvs.feature to actually attempt to download one now that we have the ability to do so easily.


Synchronize feathers events with redux state tree.

Feathers provides us with the on method, which allows us to listen to feathers events. Also, the callback gives us the changed data, and that lets us know which part are changed.
However, the redux state tree and feathers' events are not automatically synchronized. For instance, if I patched something in the user service, feathers events will emit the change to our feathers client, but the redux state tree won't know that it needs to be updated, so they wouldn't be in sync.
So, if feathers-reduxify-services can provide us with an action to update the state tree automatically, that would be great. I know that it's possible to use the .on action of feathers-reduxify-services, but an action that simplifies the process would be nice to have.
Here's a simple example of how this would be implemented. There should be an additional action to explicitly reduce the state tree based on the incoming data, and it could be named sync.
app.service("users").on("patched", data => {
  dispatch(services.users.sync("patched", data))
})

This should preferably be entirely optional, because not everyone will want this feature, especially the compatibility issues it might bring, and some may want to deal with state updates by themselves.

Thanks for the input. I have been interested in this issue for some time. Unfortunately the implementation gets rather complicated.
My feeling is this less a CRUD issue than one of the client maintaining a real-time local copy of part of a database table, like Meteor does.
Once Feathers' Auk version is soon released, a priority for the core-team is to implement a chat-rooms like feature for Feathers filters. (The lack of such a feature is what makes this issue complicated at present.)
I feel this can be used to create a publisher/subscriber mechanism between part of the database table and the client.
Any change to the table, along with a 'data update happened' flag, would be reflected in the Redux state.
So this'll get done but the timing is unknown.

Related to https://github.com/eddyystop/feathers-reduxify-services/pull/7

Replication engines generally maintain a near realtime, local copy of (some of) the records in a service on the server. feathers-reduxify-services now provides an interface which you can use to interface replication engines with the Redux state for the service.
This interface updates the new state property store which has been added to the previous ones: isError, isLoading, isSaving, isFinihsed, data and queryResult.
feathers-offline-realtime is the official Feathersjs realtime replication engine. Please read its README.
It can be interfaced with feathers-reduxify-services as follows:
import reduxifyServices from 'feathers-reduxify-services';
import Realtime from 'feathers-offline-realtime';

const services = reduxifyServices(app, ['messages', ...]);
const store = applyMiddleware( ... , messages: services.messages.reducer }));

const messagesRealtime = new Realtime(feathersApp.service('/messages'));

messagesRealtime.on('events', (records, last) => {
  store.dispatch(services.messages.store({ connected: messagesRealtime.connected, last, records }));
});

This would create the state:
state.messages.store = {
  connected: boolean, // if replication engine still listening to server
  last: { activity, eventName, record }, // last activity. See feathers-offline-realtime
  records: [ objects ], // the near realtime contents of the remote service
};

In the next few days this repo will be brought into Feathersjs itself as feathers-redux and the repo itself will be deprecated.


render category links correctly on initial page load

refs https://github.com/badges/shields/issues/1954#issuecomment-417513823
I don't know if this is objectively the best solution to this, but it does seem to work.

Messages

:book:

:sparkles: Thanks for your contribution to Shields, @chris48s!

  Generated by :no_entry_sign: dangerJS


Fix metric listings for activemq / activemq_xml

What does this PR do?
Fix metric listings for activemq / activemq_xml
Motivation
Trello request
Review checklist

[x] PR has a meaningful title or PR has the no-changelog label attached
~- [ ] Feature or bugfix has tests~
[x] Git history is clean
[x] If PR impacts documentation, docs team has been notified or an issue has been opened on the documentation repo

@zippolyte - Just following up on this one.

Sorry, lost track of it.
There is just the activemq metadata file left to update base on my comment for the unit name and then it's 👍


[Bug]: Unknown database type anyelement requested

What happened?
Unknown database type anyelement requested, Doctrine\DBAL\Platforms\PostgreSQL100Platform may not support it.

How to reproduce the bug

SELECT
                    a.attnum,
                    quote_ident(a.attname) AS field,
                    t.typname AS type,
                    format_type(a.atttypid, a.atttypmod) AS complete_type,
                    (SELECT t1.typname FROM pg_catalog.pg_type t1 WHERE t1.oid = t.typbasetype) AS domain_type,
                    (SELECT format_type(t2.typbasetype, t2.typtypmod) FROM
                      pg_catalog.pg_type t2 WHERE t2.typtype = 'd' AND t2.oid = a.atttypid) AS domain_complete_type,
                    a.attnotnull AS isnotnull,
                    (SELECT 't'
                     FROM pg_index
                     WHERE c.oid = pg_index.indrelid
                        AND pg_index.indkey[0] = a.attnum
                        AND pg_index.indisprimary = 't'
                    ) AS pri,
                    (SELECT pg_get_expr(adbin, adrelid)
                     FROM pg_attrdef
                     WHERE c.oid = pg_attrdef.adrelid
                        AND pg_attrdef.adnum=a.attnum
                    ) AS default,
                    (SELECT pg_description.description
                        FROM pg_description WHERE pg_description.objoid = c.oid AND a.attnum = pg_description.objsubid
                    ) AS comment
                    FROM pg_attribute a, pg_class c, pg_type t, pg_namespace n
                    WHERE n.nspname NOT IN ('pg_catalog', 'information_schema', 'pg_toast') AND c.relname = 'news' AND n.nspname = ANY(current_schemas(false))
                        AND a.attnum > 0
                        AND a.attrelid = c.oid
                        AND a.atttypid = t.oid
                        AND n.oid = c.relnamespace
                    ORDER BY a.attnum;

Package Version
1.2.1
PHP Version
8.1.29
Laravel Version
9.38.0
CockroachDB Version
24.2.0
Which operating systems does with happen with?
No response
Notes
No response

For Reference: https://github.com/doctrine/dbal/pull/6249

Hi @ahmadsyamim there's no clear explanation of what the problem here is or how to reproduce it. I can't spend my time second guessing from these screenshots as to what the problem is. There needs to be a full step by step guide at a minimum for how you got the problem and what was expected.


Document Details

[Enter feedback here]

⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 6908a7a2-3f8c-6541-8d97-71ff95e7a35a
Version Independent ID: 75d9ce06-aa01-125e-ec28-ea5079d86b6d
Content: Hardware notifications - Windows drivers
Content Source: wdk-ddi-src/content/_gpiobtn/index.md
Product: windows-hardware
Technology: windows-devices
GitHub Login: @windows-driver-content
Microsoft Alias: windowsdriverdev

Hi @Sir-Jay
I don't see any actionable work to be done in this request, so I am going to close the issue. If there's something you've noticed in the docs or something you're asking for, please open another issue and add greater detail.
Thanks so much,
Eliot


Warcraft2 crash with a customized pud

a crash appeared after some times ... (kernel panic)
sauvez le mage.pud.zip

sauvez le mage.pud.zip

I can observe very weird behaviours:

the red shipyard and foundry can be built onto...
the red tanker created by the AI is going nuts...
after quitting the game DOSBox says "Error GDS heap corrupt"

So I guess there is something wrong with the placed shipyard/foundry... will investigate...

Mhh... ok I get it. The oil patch is misaligned.
I think that is required because water units can only move 2 cells at the time. So a fix would be to prevent creating oil patches that are on odd cells (starting at 0,0). As a temporary workaround, you can move your oil patch one cell up and one cell to the left.

Turns out we needed to prevent from placing wells on even cells instead of odd.

Well done !


docs: merge the what and why account kit docs

Pull Request Checklist

[ ] Did you add new tests and confirm existing tests pass? (yarn test)
[ ] Did you update relevant docs? (docs are found in the site folder, and guidelines for updating/adding docs can be found in the contribution guide)
[ ] Do your commits follow the Conventional Commits standard?
[ ] Does your PR title also follow the Conventional Commits standard?
[ ] If you have a breaking change, is it correctly reflected in your commit message? (e.g. feat!: breaking change)
[ ] Did you run lint (yarn lint:check) and fix any issues? (yarn lint:write)
[ ] Did you follow the contribution guidelines?

PR-Codex overview
This PR focuses on restructuring and updating the documentation.
Detailed summary

Renamed and reorganized files in the site/overview and site/getting-started directories.
Updated links and URLs in the site/index.md file.
Renamed and updated content in the site/overview/introduction.md file.
Added new content and updated content in the site/getting-started/overview.md file.

The following files were skipped due to too many changes: site/overview/introduction.md

✨ Ask PR-Codex anything about this PR by commenting with /codex {your question}


[Bug]: Tooltip jumps to corner upon navigation in Nuxt with keepalive page.

Environment
Node.js 18.18.2
Nuxt 3.11
i use arch btw

Link to minimal reproduction
https://stackblitz.com/edit/nuxt-starter-c2aqxq?file=pages%2Findex.vue%2Cpages%2Fabout.vue%2Capp.vue%2Ccomponents%2Fdemo-button.vue
Steps to reproduce

Have a Nuxt router page with keepalive
Create a tooltip
Hover on a button
Navigate back without hovering back
Tooltip jumps

Describe the bug
A tooltip jumps to the corner of the screen when navigating back without hovering back. Only applies if the page uses Vue's KeepAlive.
Expected behavior
No response
Context & Screenshots (if applicable)
Screencast_20240324_234501.webm

Bump. The DropdownMenu behaves similarly when DropdownMenuItem is wrapped around or rendered as the RouterLink.


Enable card payments on Ramp

Expected Behavior
Users can cash-in with debit cards.
Current Behavior
Cash-in via debit card is a grey-ed out option.
Context: https://celo-org.slack.com/archives/C018VLA3YAK/p1614614130058100

Opened in wrong repo


ACCUMULO-4353: Stabilize tablet assignment during transient failure.

Added configuration property table.suspend.duration (default 0s): When a tablet server dies, instead of immediately placing its tablets in the TabletState.UNASSIGNED state, they are instead moved to the new TabletState.SUSPENDED state.  A suspended tablet will only be reassigned if (a) table.suspend.duration has passed since the tablet was suspended, or (b) the tablet server most recently hosting the tablet has come back online.  In the latter case, the tablet will be assigned back to its previous host.
Added configuration property master.metadata.suspendable (default false): The above functionality is really meant to be used only on user tablets.  Suspending metadata tablets can lead to much more significant loss of availability.  Despite this, it is possible to set table.suspend.duration on accumulo.metadata.  If one really wishes to allow metadata tablets to be suspended as well, one must also set the master.metadata.suspendable to true.
I chose not to implement suspension of the root tablet.
Implementation outline:

master.MasterTime maintains an approximately monotonic clock; this is used by suspension to determine how much time has passed since a tablet was suspended.  MasterTime periodically writes its time base to ZooKeeper for persistence.
The server.master.state.TabletState enum now has a TabletState.SUSPENDED state.  TabletLocationState, MetaDataStateStore were updated to properly read and write suspensions.
server.master.state.TabletStateStore now features a suspend(...) method, for suspending a tablet, with implementation in MetaDataStateStore.  suspend(...) acts just as unassign(...), except that it writes additional metadata indicating when each tablet was suspended, and which tablet server it was suspended from.
master.TabletServerWatcher updated to properly transition to/from TabletState.SUSPENDED.
master.Master updated to avoid balancing while any tablets remain suspended.
Minor changes to various miniaccumulo classes to facilitate testing tablet suspension.  Particularly, the abilities to (a) restart a server with a configuration different from the rest, and (b) restart fewer than the full complement of tablet servers.

Well, Jenkins doesn't seem to like my PR, but its console output suggests a problem in the build server.

Upon further thought, I haven't accounted for the possibility that a tablet server might return before the master notices it had died.  Such a situation would likely happen during a rolling restart, and might also happen in the other types of transient failures that have been discussed.
One solution which suggests itself to me is to block balancing until after the next assignment run whenever the LiveTServerSet contains two distinct tservers at the same location (host+port).  But that would still leave a minor race condition.
Thoughts?

I haven't accounted for the possibility that a tablet server might return before the master notices it had died.

What do you think will happen in this situation?

If the tablet server returns before master notices it's gone, master will see it as a new empty tablet server.  This will (usually) cause balancing to be run, to give that tserver some work.  Once master notices that the original tserver has died, the original tserver's tablets will move to TabletState.SUSPENDED, and (assuming a sufficiently large tablet.suspend.duration), those suspended tablets will shortly be assigned to the "new" tserver.  This will again cause imbalance, as the "new" tserver will have approximately double it's expected load, causing yet more round(s) of balancing.

If the tablet server returns before master notices it's gone, master will see it as a new empty tablet server.

One possible beginning of solution is to change the behavior of Master.gatherTabletInformation() to do the following :

Check if the instance matches the tablet server its talking to get status.  This could be done by adding the instance id to the returned Thrift struct.
If the instance id does not match, then add tserver to badServers.  This will prevent balancing (not sure if it will have other undesired consequences).

This will detect a new tsever instance after obtaining info from zookeeper.  I am still looking at code and thinking about what else may need to be done.
@ShawnWalker offline you were wondering if it was possible to have info about the same host+port twice in the master memory.  I looked at how the current code works and it attempts to prevent this.  Below is what I found :

The master uses tserverStatus for balancing which is populated at Master line 977 by calling gatherTabletInformation()
gatherTabletInformation() calls LiveTserverSet.getCurrentServers()  which returns currentInstances which us updated by LiveTserverSet.checkServer().

The implementation of checkServer() uses the current map to ensure a tserver+port only has one entry in currentInstances.  The current map key is based on the zookeeper lock name which is host+port as set on TabletServer line 2309

@ShawnWalker did you do any testing besides the IT?

Some testing on a small development cluster before I wrote SuspendedTabletsIT, but nothing significantly different from what I has SuspendedTabletsIT perform: Start Accumulo, create table, add split points to have multiple tablets, kill tserver, observe tablets being suspended, restart tserver, observe tablets being reassigned to previously dead tserver.
Did you have suggestions for additional tests (manual or automated) that you would like to see?

Did you have suggestions for additional tests (manual or automated) that you would like to see?

No it sounds like you did the manual testing I would have done.  The case where there are multiple tservers w/ different host names.   In the IT the hostnames are all the same.

@ShawnWalker I reviewed this and talked with @keith-turner some.  I imagine during a rolling upgrade the process would be.

Stage the new install on the box
Run stop-here.sh
Reconfigure the node to use the new install
Run start-here.sh

The stop-here.sh command has the master unload the tablets I think.  How will this patch handle that case?
When a tablet server is suspended, all queries will block right?  I see you are suspending the metadata tablets too.  That will affect more than just a user queries though.  Bulk imports trying to get hosted locations comes to mind.  I see you are not suspending the root tablet though.
I see you are storing the host and port in the metadata for a suspended tablet.  Sometimes we have tservers come up with a different host or port.  In that case, I guess the tablets will wait until the suspend duration to be reassigned.

The stop-here.sh command has the master unload the tablets I think. How will this patch handle that case?
This patch won't handle such a case at all.  I'm sure it shows my inexperience with Accumulo, but I was unaware of this script.  I'm more familiar with engineering and dealing with crash-only software.  I had assumed that a tserver would be stopped by SIGTERM or SIGKILL.

I'm open to suggestions on how to handle this use case.  My current thought would be to make unloading a tablet this way suspend the tablet instead of unassigning it.  I.e. in tserver.TabletServer.UnloadTabletHandler.run() at line 2012, call TabletStateStore.suspend(...) instead of TabletStateStore.unassign(...).

When a tablet server is suspended, all queries will block right?
When a tablet is suspended, all queries against that tablet do seem to block (or possibly time out).

I see you are suspending the metadata tablets too.
By default, metadata tablets won't be suspended, even if the metadata table (or global configuration) has tablet.suspend.duration set.  One must also set the option master.metadata.suspendable to true (default false). The check for this is handled at Master.java:1154.

Note to self: Looking back at that code, I realize that this check is made only once (at startup), instead of rechecking for updated configuration.  Should probably make that check repeatedly.

I see you are storing the host and port in the metadata for a suspended tablet. Sometimes we have tservers come up with a different host or port. In that case, I guess the tablets will wait until the suspend duration to be reassigned.
This is correct.  Tablet suspension is essentially incompatible with dynamic port assignment.  Of course, this wouldn't be the only part of Accumulo to suffer under random/dynamic port assignment.  Specifying tserv.port.client==0 or tserv.port.search==true breaks assumptions in other places too.  Some I know of:

I decided to match host+port based on code in server.master.balance.DefaultLoadBalancer.getAssignment().  That code uses host+port to match a tablet's last column, for preserving locality.  If the tserver's port changes, the last column is effectively ignored, reducing locality.
Having walked the logic path for stop-here.sh, my read is that server.util.Admin.stopTabletServer(...) (used by stop-here.sh) assumes tserver(s) on the specified  host (resp. localhost) will be on port(s) specified by tserv.port.client.  Hence, running a tserver with tserv.port.client==0 will render stop-here.sh ineffective.  Similarly, running a tserver with tserv.port.search==true risks rendering stop-here.sh ineffective.

My current thought would be to make unloading a tablet this way suspend the tablet instead of unassigning

I took a quick look and it seemed a tserver did not know why it was unloading.   It seems like the tserver would need to know why it was unloading so it could only suspend when being stopped (would not want to set suspend for migration).  Alternatively the unload thrift message could possibly be changed to include an option to suspension.
Would need to analyze the master and tserver code for concurrency issues if taking this approach.  Currently only the master is writing suspend.

Hence, running a tserver with tserv.port.client==0 will render Admin.stopTabletServer(...) ineffective, and stop-here.sh will fall back to sending SIGTERM/SIGKILL to stop the tserver. Similarly, running a tserver with tserv.port.search==true risks the same behavior.

That's an interesting find.  Can you open a new issue for this?

I took a quick look and it seemed a tserver did not know why it was unloading. It seems like the tserver would need to know why it was unloading so it could only suspend when being stopped (would not want to set suspend for migration). Alternatively the unload thrift message could possibly be changed to include an option to suspension.

Indeed, I found this out when I went to implement my idea.  So in my most recent push, I modified the the thrift method TabletClientService.unloadTablet(...).  Whereas it used to take a boolean save parameter, I instead have it take an enumerated value describing the desired end state of the tablet:

UNASSIGNED: Upon unloading, leave the tablet in the UNASSIGNED state.
SUSPENDED: Upon unloading, leave the tablet in the SUSPENDED state.
DELETED: Upon unloading, leave the tablet in the UNASSIGNED state.  This tablet is being unloaded so it can be deleted soon; as such, don't bother minor compacting before unloading.  This is the behavior that setting save==false would accomplish previously.
UNKNOWN: Well, ugh.  The enumerated value needed to correspond with values from master.Master.TabletGoalState, and I had no idea how to cleanly map TabletGoalState.HOSTED.

Indeed, I found this out when I went to implement my idea.

I just noticed that commit.  I can look over those changes today.  I like the idea of changing save to an enum.

@ShawnWalker  I looked over the changes, looks good. Did you test running stop-here.sh?

Did you test running stop-here.sh?
I couldn't get stop-here.sh to do anything in my setup.  Running accumulo admin stop ... brought a flaw to my attention, which I've fixed: I was mixing up milliseconds and nanoseconds.

In the last two commits, I've arranged that tablet servers will suspend their tablets upon clean shutdown, and added testing for this to SuspendedTabletsIT.  This should address @mjwall's concern about clean shutdown.
There's not a whole bunch I can do about @mjwall's other concern involving random port assignments.  Unless that's a blocker, or there are any other concerns, I believe this feature is ready for committing.

I cherry picked this back to 1.8 in my local fork.  My intent is to play around with this on a 10 node EC2 cluster.  I will report back after I do that.  If anyone has any particular experiments they would like me to run let me know.

I ran some manual test on EC2 w/ 10 nodes.   It worked nicely.  I created 1000 tablets and ran continuous ingest.   One thing I tried is setting the suspend duration to 10m, admin stop, waiting for that come back, setting suspend duration to 5, killing a tserver.   It seems like this 2nd tserver took 10 min to come back (but this is from looking at monitor plot and guessing).  Any, I want to review code for case where duration is changed and make sure thats picked up.  Also I will try testing this again tomorrow.

I looked in the code.  The suspension time is obtained from a table config object.  I am going to push these changes to 1.8 and master.

@ShawnWalker can you close this PR? Its in 1.8 in commit 3e5524c3c391d2556492d070710a789510be3532.  Locally, I squashed these commits into one,  cherry picked that single commit to 1.8, and resolved conflicts.  I forgot to put the right message in the commit to close the PR.


After installing Plugin Fastlane is slow

Issue Description
I installed "fastlane add_plugin download_file"  and now fastlane is Sloooooooowwww
Ran Command
time fastlane -v
[17:51:10]: Seems like launching fastlane takes a while - please run
[17:51:10]:
[17:51:10]: $ [sudo] gem cleanup
[17:51:10]:
[17:51:10]: to uninstall outdated gems and make fastlane launch faster
[17:51:10]: Alternatively it's recommended to start using a Gemfile to lock your dependencies
[17:51:10]: To get started with a Gemfile, run
[17:51:10]:
[17:51:10]: $ bundle init
[17:51:10]: $ echo 'gem "fastlane"' >> Gemfile
[17:51:10]: $ bundle install
[17:51:10]:
[17:51:10]: After creating the Gemfile and Gemfile.lock, commit those files into version control
[17:51:10]: For more information, check out https://guides.cocoapods.org/using/a-gemfile.html
fastlane 1.98.0
fastlane -v  114.29s user 0.49s system 98% cpu 1:55.98 total

If i exit the command i get this trace
 ~  %  fastlane -v
^C/usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/dependency.rb:284:in `matching_specs': Interrupt
	from /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/dependency.rb:295:in `to_specs'
	from /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/specification.rb:2438:in `block in traverse'
	from /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/specification.rb:2437:in `each'
	from /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/specification.rb:2437:in `traverse'
	from /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/specification.rb:2440:in `block (2 levels) in traverse'
	from /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/specification.rb:2438:in `each'
	from /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/specification.rb:2438:in `block in traverse'
	from /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/specification.rb:2437:in `each'
	from /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/specification.rb:2437:in `traverse'
	from /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/specification.rb:2440:in `block (2 levels) in traverse'
	from /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/specification.rb:2438:in `each'
	from /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/specification.rb:2438:in `block in traverse'
	from /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/specification.rb:2437:in `each'
	from /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/specification.rb:2437:in `traverse'
	from /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/specification.rb:2440:in `block (2 levels) in traverse'
	from /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/specification.rb:2438:in `each'
	from /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/specification.rb:2438:in `block in traverse'
	from /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/specification.rb:2437:in `each'
	from /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/specification.rb:2437:in `traverse'
	from /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/specification.rb:961:in `block in find_in_unresolved_tree'
	from /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/specification.rb:959:in `reverse_each'
	from /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/specification.rb:959:in `find_in_unresolved_tree'
	from /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:87:in `require'
	from /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rexml/document.rb:1:in `<top (required)>'
	from /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:121:in `require'
	from /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:121:in `require'
	from /usr/local/lib/ruby/gems/2.2.0/gems/fastlane_core-0.48.1/lib/fastlane_core/pkg_file_analyser.rb:1:in `<top (required)>'
	from /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:69:in `require'
	from /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:69:in `require'
	from /usr/local/lib/ruby/gems/2.2.0/gems/fastlane_core-0.48.1/lib/fastlane_core.rb:19:in `<top (required)>'
	from /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:69:in `require'
	from /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:69:in `require'
	from /usr/local/lib/ruby/gems/2.2.0/gems/fastlane-1.98.0/lib/fastlane.rb:1:in `<top (required)>'
	from /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:69:in `require'
	from /usr/local/Cellar/ruby/2.2.3/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:69:in `require'
	from /usr/local/lib/ruby/gems/2.2.0/gems/fastlane-1.98.0/lib/fastlane/cli_tools_distributor.rb:10:in `take_off'
	from /usr/local/lib/ruby/gems/2.2.0/gems/fastlane-1.98.0/bin/fastlane:5:in `<top (required)>'
	from /usr/local/bin/fastlane:23:in `load'
	from /usr/local/bin/fastlane:23:in `<main>'

Environment
fastlane version (run fastlane -v):
1.98.0
Do you use bundler to execute fastlane (i.e. bundle exec fastlane)?
Tried it still slow
Do you use a Ruby environment manager (e.g. chruby, rbenv, rvm)?
No

I had to uninstall ruby and then the issue got fixed.

@duncandee Awesome! Really glad to hear you got up and running 👍


Circular / cyclic dependency between glob.js and sync.js

When using glob in a project processed by Rollup, it identifies a circular dependency between glob.js and sync.js.
This issue is just a note, because we can use glob as it is and it is possible to work around this problem. But I'd like to notify you of that.

This is not a problem.  Why does rollup think it is?

since #374 is not moving forward - what's the workaround @paulocoghi?

@masone , unfortunately I don't remember exactly but I believe the solution was to mark "node-glob" as an external dependency, leaving it on the "dependencies" of your project, instead of the "dev-dependencies"

This is sad because one positive consequence of using Rollup is to dedup and bundle all deps in a single independent JS file with zero runtime deps, providing a better experience for the users of your library (lower lib size, lower install time, etc).
Such workarounds, like informing to do not bundle a specific library, undoes part of this benefit.
I don't know if Rollup could be able to solve such problems (circular dep) by itself.

Rollup workarounded it in https://github.com/rollup/plugins/pull/1038 (@rollup/plugin-commonjs 22.0.0).
It's a shame to tell this is not a problem in a PR which removes needlless code and let us to compile it.

This is not a problem. Why does rollup think it is?

Even though it isn't, would still be nice to get it fixed since it is holding back large parts of the ecosystem that depend on node-glob.

I ended up just switching to fast-glob. It has a proper project structure&tests, supports promises and is written in typescript. Seems to be actively maintained.


D&D 5e request - pull from an approved 'list' for ranger or druid summons?

LOVE this mod for my 5e game!! I was wondering if it would be too much of a problem to make the mod pull from a created list that the player has ownership of, like an 'approved' folder that has creatures it can summon for the summon woodland beings spell?
(I've no idea how it works but..) Kind of like having a folder the mod points to, that has creatures already pulled into it from the various manuals, and then that becomes the list they have available to summon from..
I hope I typed that correctly.
Thank you for the great work!!

Would making a custom table with links to the creatures suffice?
Then you don't have to import every creature.

That would be awesome! It would cover a lot of different uses as well
Thank you!

I'm sorry but I'm still learning - is this a macro subtext?
If so, am I to change the "Summons" to the folder that her conjures are in?
Apologies

Yes


feat: penumbra ics-20 test cases

Description
This PR finishes work started in https://github.com/strangelove-ventures/interchaintest/pull/837 to introduce tests for Penumbra, both for Penumbra <-> Penumbra and Penumbra <-> Cosmos cases, exercising both successful transfers and timeouts based on height and timestamp in both directions.
How to test
$ go test -v -race ./examples/penumbra/penumbra_ibc_test.go

Additional Information
This requires some changes to Penumbra that haven't landed in a release yet. When the next release for Penumbra lands, a new image should be pushed out through Heighliner. Otherwise, to test against the current Penumbra main branch you can modify the configuredChains.yaml as follows:
penumbra:
  name: penumbra
  type: penumbra
  bin: cometbft
  bech32-prefix: penumbrav2t
  denom: upenumbra
  gas-prices: 0.0upenumbra
  gas-adjustment: 2.0
  trusting-period: 672h
  images:
    - repository: ghcr.io/strangelove-ventures/heighliner/cometbft
      uid-gid: 1025:1025
    - repository: penumbra
      uid-gid: 1025:1025

And build a local tagged version of the Penumbra image with Heighliner:
$ heighliner build -c penumbra -o penumbra-zone -g main -t local

@Reecepbcups I verified the tests still pass after updating the Docker images (https://github.com/strangelove-ventures/interchaintest/pull/1157/commits/41c2aaa688e88a827e06d0fe3a2297ab8694d28e)
Looks like CI is failing because of some lint failures unrelated to changes from this PR

Amazing thank you! It will take me a bit to review this & I am out tomorrow, but one of the top things on my list :)a
I'll get lint issues and minor things like that sorted out later after I run through it all


collect: instrumenting some basic gc stats

I mostly want to see how upgrading to go 1.5 will affect these statistics, so instrumenting them now.

LGTM
We can push to prod or branch bosun tomorrow


Fixed config issues

Short description outlining key changes/additions
Fixed config issues
JIRA Ticket Number
IDVA6-1296
Type of change

[x] Bug fix
[ ] New feature
[ ] Breaking change
[ ] Infrastructure change

Pull request checklist

[ ] I have added unit tests for new code that I have added
[ ] I have added/updated functional tests where appropriate
[ ] The code follows our coding standards

An exhaustive list of peer review checks can be read here

CI: Security warnings found!


Fix image bug.

Signed-off-by: joaosilva<EMAIL_ADDRESS>

Pull Request Test Coverage Report for Build 394357272

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

Totals

Change from base Build 394330351:
0.0%

Covered Lines:
635

Relevant Lines:
655

💛  - Coveralls


allow route names vith have a via in the name

I have the situation where two nodes are connected by two routes,
which I would like to keep as separate routes: The direct route is named
"Oberwasen - Schafsbühl" and the second has a detour to the destination Viehweid and so its called "Oberwasen - (Viehweid) -
Schafsbühl".
https://knooppuntnet.nl/de/analysis/network/13831011/routes
The second will be truncated to "Oberwasen - (Viehweid)".
https://knooppuntnet.nl/de/analysis/route/13777859

Suggestion: keep the name as it is, but add a via tag with the name of the via location or way. In Knooppuntnet Analysis, the via string can be added in parenthesis, e.g. "Oberwasen - Schafsbühl (via Viehweid)". In Planner output, the name of the route is not shown, but the via string (if present) could be show between the nodes.
The via string could be anything: a place, a way, or in The Netherlands e.g. "uiterwaarden" (floodplain). That would be helpful, because along broad rivers we often have two routes between the same two nodes.


where to find mediaitemid?

Sorry to bother you again but /api/watchlist requires the mediaitemid where can I find it?
thanks again
Faba

It's no problem at all, feel free to ask any questions, or request for API routes.
mediaItemId is an id field returned from /api/search and /api/routes. I will later add routes, where you can use title and release year instead

Thanks for the quick reply. I was looking at /api/search but couldn't find it there.
Regards
Faba

FYI I figured it out and could add shows to the watchlist


Add a Codefresh integration

Hey there!
A lot of us (Me) use codefresh for CI, and I didn't see one for codefresh!
Let me know if you need additional details!
Notes for community
Please 👍 if you'd like to upvote this or receive updates.
Read the contributing guide if you'd like to work on this issue - we're happy to help you!

Hi @userbradley - thanks for creating this issue! I haven't used Codefresh before, does it support adding pipeline tasks via docker images? If so, it should be easy'ish to add an integration similar to the GitLab CI Template that uses our diff.sh script. Do you use Codefresh with github or another VCS? I'm wondering if the pull request comment is needed or if Codefresh users are used to viewing the Codefresh dashboard to see task statuses/outputs?

Hey @alikhajeh1!
As far as I understand, it does!
I use codefresh with Github, but it supports most VCS systems (Bit bucket, gitlab (ce and cloud), github etc)
So it's a mix of both to be honest, some times we check the status dashboard to see if things have run or not, and sometimes it's nice to have it in to git it's self:
Below is an example terraform apply I botched togethet:
version: '1.0'
stages:
  - checkout
  - deploy
steps:
  main_clone:
    title: Git clone
    image: alpine/git:latest
    stage: checkout
    commands:
      - mkdir -p ~/.ssh
      - echo "${SSH_KEY}" | base64 -d > ~/.ssh/id_rsa
      - chmod 600 ~/.ssh/id_rsa
      - ssh-keyscan github.com > ~/.ssh/known_hosts
      - rm -rvf *dns*
      - git clone git@github.com:userbradley/tfnds.git
      - mv tfdns/* .
  DeployWithTerraform:
    image: hashicorp/terraform:light
    title: Deploying Terraform plan
    stage: deploy
    commands:
      - mkdir -p ~/.ssh
      - echo "${SSH_KEY}" | base64 -d > ~/.ssh/id_rsa
      - chmod 600 ~/.ssh/id_rsa
      - ssh-keyscan github.com > ~/.ssh/known_hosts
      - terraform init -backend-config="token="$token""
      - export TF_VAR_cloudflare_email="${CLOUDFLARE_EMAIL}"
      - export TF_VAR_cloudflare_api_key="${CLOUDFLARE_API_KEY}"
      - terraform apply -auto-approve

They have pre-built steps that you can use, so may be worth making one:
https://github.com/codefresh-io/plugins/blob/master/CONTRIBUTING.md
Let me know if you need additional details or I've not answered something

A quick update: we've created new smaller Docker images for CI. The images contain the Infracost CLI binary, Compost (our latest open source project) and comment.sh. Our GitLab CI examples demonstrate how these components can be used in a composable way to post pull request comments in any CI/CD system. It would be awesome if someone has time to give these a try in Codefresh and see if it works ok.

Hey! Thanks for the update!
I'll have a scratch around this weekend and I'll see what comes of it!
Appreciate the work!

Thanks @userbradley! That's much appreciated. Our team is also active on Slack in case you prefer to chat.

hey @alikhajeh1 - Sure thing!
The docs seem a little light, so will need to carve some time out and figure it out!

Thanks @userbradley - ack, we'd love help on improving that docs section (secretly that why I pinged to see if you had time to help us, even with notes of what caught you off-guard, or what wasn't obvious etc)

Closing this we we no longer use a Codefresh at work, nor in my personal life.
If someone does use it and had a need leave a comment

Thans @userbradley - given that we now have free GitHub and GitLab source control integrations most users can probably use that vs changing their CI/CD pipelines, the benefits are described here.


Paper Question

Hey,
When I run  bash run/speaker.bash 0,  there is an error.
run/speaker.bash: line 6: unbuffer: command not found

Hi,
I remove the "unbuffer" command which tries to reduce the delay in showing results. Please go and try it!
The long reason for using "unbuffer" here:
I used os command "tee" to allow logging in file.  However, "tee" overwrites the os buffer size thus the printed results would be delayed. "Unbuffer" generally creates a "virtual buffer" to eliminate this problem.


Node 7 support

Installing apm
../src/onig-string.cc: In constructor ‘OnigString::OnigString(v8::Local<v8::String>)’:
../src/onig-string.cc:25:40: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   hasMultiByteChars = (value->Length() != utf8_length_);
                                        ^
child_process.js:145
    throw new TypeError('Incorrect value of args option');
    ^

TypeError: Incorrect value of args option
    at Object.exports.execFile (child_process.js:145:11)
    at Object.exports.exec (child_process.js:108:18)
    at Object.<anonymous> (/var/tmp/portage/app-editors/atom-1.13.0_beta4/work/atom-1.13.0-beta4/apm/node_modules/atom-package-manager/script/postinstall.js:10:16)
    at Module._compile (module.js:573:32)
    at Object.Module._extensions..js (module.js:582:10)
    at Module.load (module.js:490:32)
    at tryModuleLoad (module.js:449:12)
    at Function.Module._load (module.js:441:3)
    at Module.runMain (module.js:607:10)
    at run (bootstrap_node.js:382:7)
npm ERR! Linux 4.8.8-zen-gb9f2356-dirty

related: https://github.com/atom/atom/issues/13173
fails on 1.13 beta 4 after node 7 support fix was merged, maybe that issue is different

@mpkh It was merged into apm master, there hasn't been an apm release yet with the fix.

@JoshStrobl but does error message even look related?

Yes, it is.

@JoshStrobl in which release (or beta) it will be merged?

I have no idea, I am not an apm or Atom dev.
On Thu Dec 1 09:41:40 2016 GMT+0200, mpkh wrote:

@JoshStrobl in which release (or beta) it will be merged?
--
You are receiving this because you were mentioned.
Reply to this email directly or view it on GitHub:
https://github.com/atom/atom/issues/13260#issuecomment-26410000


UserId of Bot User

This is more of a question rather than an issue. I am using this framework because I wanted to change the styling of the default WebChat. Currently I think I do not have the correct version of: 'webpacked/botchat.js' which is not included in the package; I ended up downloading it from here.

Currently using the DirectLine with MVC C#, the sample mentions that I shall be able to get the userid, username by inputting it as a parameter like so:

var params = {
    t: 'mytoken',
    botname: 'theBotname',
    userid: 'theUserId',
    username: 'theUsername'
};

How I get it back from within the Activity class (inside the controller)?  Tried: message.From.Id + "-" + message.From.Name + "-" + message.Recipient.Id + "-" + message.Recipient.Name.

You need to build the project yourself, as described in the repo README. That version you downloaded is somewhat out of date.
If you are using the provided samples/index.html, you can either specify the user id/name in the query string, or alter the javascript on the page to pass it directly to BotChat.App. Then it should be available in message.From.

Closing this are there are no open issues. Please let me know if you have trouble getting this to work, however.


Fix incorrect links in STACKFRAME64 documentation

A number of links on https://learn.microsoft.com/en-us/windows/win32/api/dbghelp/ns-dbghelp-stackframe64 link to the 32-bit version of what they are talking about rather than the 64-bit version.

Thanks for the lightning fast response :)


Improve NodeBucketStorage test coverage

Codecov Report

Merging #13 (c62c4c8) into main (63521f9) will increase coverage by 1.30%.
The diff coverage is 100.00%.

@@            Coverage Diff             @@
##             main      #13      +/-   ##
==========================================
+ Coverage   88.75%   90.06%   +1.30%
==========================================
  Files          12       12
  Lines        1787     1821      +34
==========================================
+ Hits         1586     1640      +54
+ Misses        201      181      -20

Impacted Files
Coverage Δ

src/storage/node_bucket_storage.rs
62.73% <100.00%> (+25.72%)
:arrow_up:

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 63521f9...c62c4c8. Read the comment docs.


Change and document caret slot

Codecov Report

Merging #429 into 2.0 will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##              2.0     #429   +/-   ##
=======================================
  Coverage   94.51%   94.51%
=======================================
  Files           4        4
  Lines         164      164
  Branches        9        9
=======================================
  Hits          155      155
  Misses          6        6
  Partials        3        3

Impacted Files
Coverage Δ

src/Multiselect.vue
61.53% <ø> (ø)
:arrow_up:

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update e7d134b...c4591e7. Read the comment docs.


feat: #1976 - translatable instagram and twitter links

What

We can now have different instagram and twitter links according to the language.

Fixes bug(s)

Closes: #1976

Codecov Report

Merging #1977 (6c1fa89) into develop (2ea0da3) will decrease coverage by 0.47%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           develop   #1977      +/-   ##
==========================================
- Coverage     8.86%   8.38%   -0.48%
==========================================
  Files          161     178      +17
  Lines         6623    8248    +1625
==========================================
+ Hits           587     692     +105
- Misses        6036    7556    +1520

Impacted Files
Coverage Δ

...lib/animations/smooth_animated_collapse_arrow.dart
0.00% <0.00%> (-100.00%)
:arrow_down:

...kages/smooth_app/lib/widgets/attribute_button.dart
0.00% <0.00%> (-92.00%)
:arrow_down:

packages/smooth_app/lib/themes/smooth_theme.dart
61.64% <0.00%> (-21.34%)
:arrow_down:

...s/smooth_app/lib/data_models/user_preferences.dart
14.86% <0.00%> (-17.45%)
:arrow_down:

...mooth_app/lib/data_models/product_preferences.dart
26.47% <0.00%> (-4.96%)
:arrow_down:

packages/smooth_app/lib/main.dart
15.74% <0.00%> (-2.16%)
:arrow_down:

...es/smooth_app/lib/data_models/smooth_it_model.dart
5.00% <0.00%> (-1.25%)
:arrow_down:

...smooth_app/lib/pages/product/new_product_page.dart
0.00% <0.00%> (-0.88%)
:arrow_down:

...rds/knowledge_panels/knowledge_panels_builder.dart
1.88% <0.00%> (-0.29%)
:arrow_down:

...es/smooth_app/lib/cards/data_cards/score_card.dart
4.54% <0.00%> (-0.22%)
:arrow_down:

... and 127 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 8dfbea0...6c1fa89. Read the comment docs.

ok, while we're at it, we could throw in the blog url

ok, while we're at it, we could throw in the blog url

Could we? I assumed from #1975 that on the blog the language was automatically detected ("responsive"ly).
instagram and twitter are both "external" companies and possibly with different contents (not just translations that we can manage). Therefore there's not strong logic that would force us to handle the links the same way as internal links.

good question, what do you see at https://blog.openfoodfacts.org/ ?
French ?
cc @CharlesNepote

good question, what do you see at https://blog.openfoodfacts.org/ ?
French ?
cc @CharlesNepote

Not exactly, unfortunately.
the first time, ok it was redirected to /fr/
then, just trying, I typed /en/, and it was English version, fair enough
then again I type https://blog.openfoodfacts.org/ and it redirected me to the /en/ version (on my French computer).
Is it a problem with my browser? Is that that the website computes once and store the language, to be reused afterwards?


Randomization is not consistent between sessions

Initializing the prng state with the same seed in different browser tabs yields different results.
// Using setTimeout to wait for all scripts to finish initializing.
setTimeout(() => {
  console.log(State.prng.isEnabled())
  console.log(State.prng.seed)
  console.log(State.prng.pull)
  console.log(State.random())
})

Tab 1:
true
wavyorangeneonrainbowfish
5350
0.6990063451940978

Tab 2:
true
wavyorangeneonrainbowfish
5336
0.20215290072679626

Refreshing the same tab multiple times seems to be consistent, but if I clear the session state and refresh I get a different pull/float again.

Are you enabling extra entropy?  If so, the specified seed is only part of the actual seed used, extra random entropy is added to it to create the final seed.  Thus, you wouldn't be using the same effective seed.
Beyond that, the pull count in your two examples is different, which means that the internal states of the two seedable PRNGs are at different points—i.e., you're comparing apples to oranges, so of course they aren't going to be the same.  Try getting the pull count to the same value and, if you're not adding extra entropy, you should see that the results are indeed the same.
The seedable PRNG works across completely different browser JavaScript engines, let alone different instances of the same JavaScript engine in the same browser.

You're absolutely correct. It turns out our issue was that we had data structures that were generated with some randomization before we actually set the seed. So when we used those after setting the seed, of course the results would vary, even though the pull count showed the same.


Fix for serde-types-minimal feature is missing in Cargo.toml #32

I changed  #[cfg(feature = "serde-types-minimal")] to  #[cfg(feature = "serde")] so that CI will run test_key_with_big_array test.
To test

Tried CI steps locally
cargo test --all-targets --features serde should run test_key_with_big_array test

Hey @vlopes11, my initial plan was to add the serialization/deserialize by serde with its tests at #31 after completing this, but I can also add them with this PR too.

Hey @vlopes11, my initial plan was to add the serialization/deserialize by serde (as hex) with its tests at #31 after completing this, but I can also add them with this PR too.

Cool, I made a similar one in https://github.com/FuelLabs/fuel-crypto/blob/vlopes11/serde/tests/serde.rs

Perfect!, thanks. That will help a lot. I will most probably apply the same methodology. 👍🏻