Position of NavigationMenuViewport

When we need a more extensive Navigation Menu, Viewport with Content does not follow the position of the Trigger. Instead, all menus are in the center of the screen.
You can see behavior on this test page:
https://chakras-edtsr25u2-miljenko-storydeckio.vercel.app/
The same issues are mentioned here:
https://github.com/radix-ui/primitives/issues/1462
Is there any parameter to position Viewport under the Trigger point?

I'm also pretty confused about the best way to fix this. I also simply want the viewport to show underneath the trigger.

There's a fix here https://github.com/shadcn/ui/pull/102. Does this help?

Fix #102 is ok if you have a few items in the menu bar.
In our case, we have six "MenuTrigers" solution #102 is suitable for "MenuTriggers" in the middle of the screen but not ideal for the first and last "MenuTrigger" elements.
We are looking for this type of solution:
https://codesandbox.io/s/simple-navigation-menu-em1qrc?file=/src/App.js
Each "MenuContent" drop-down element is strictly under "MenuTrigger."

This is actually an issue with Radix (https://github.com/radix-ui/primitives/issues/1462).

Anyone got an update to this? I have the same issue

Any resolution, I'm currently facing the same problem.

I also faced this problem, do you have any solutions?

I fixed by removing NavigationMenuViewport in NavigationMenu component and using <NavigationMenuContent className="absolute top-full"> instead.
Hope this will help
A better solution would be to make it as Prop to be able to set it dynamically.

I tried @artur-dani answer but didn't work.
I found this answer instead: Add right:0 absolute left-auto top-full to <NavigationMenuContent ... /> and completely remove <NavigationMenuViewport /> from <NavigationMenu />

I tried @artur-dani answer but didn't work.
I found this answer instead: Add right:0 absolute left-auto top-full w-auto to <NavigationMenuContent ... /> and completely remove <NavigationMenuViewport /> from <NavigationMenu />
I don't know if it will break something, but is working at least

This work but it will disable the closing of the submenu when clicked outside.
What I did is to add submenu-trigger class to all NavigationMenuTrigger and submenu-viewport class to NavigationMenuViewport and use the following script to update the left position of the viewport using the @update:model-value on NavigationMenu.
function onNavChange() {
  setTimeout(() => {
    const triggers = document.querySelectorAll('.submenu-trigger[data-state="open"]')
    if (triggers.length === 0)
      return

    const firstTrigger = triggers[0] as HTMLElement
    const viewports = document.getElementsByClassName('submenu-viewport')

    if (viewports.length > 0) {
      const viewport = viewports[0] as HTMLElement
      viewport.style.left = `${firstTrigger.offsetLeft}px`
    }
  })
}

<NavigationMenu @update:model-value="onNavChange">
<NavigationMenuViewport class="submenu-viewport">
<NavigationMenuTrigger class="submenu-trigger">

I tried @artur-dani answer but didn't work.
I found this answer instead: Add right:0 absolute left-auto top-full w-auto to <NavigationMenuContent ... /> and completely remove <NavigationMenuViewport /> from <NavigationMenu />
I don't know if it will break something, but is working at least

This work but it will disable the closing of the submenu when clicked outside. What I did is to add submenu-trigger class to all NavigationMenuTrigger and submenu-viewport class to NavigationMenuViewport and use the following script to update the left position of the viewport using the @update:model-value on NavigationMenu.
function onNavChange() {
  setTimeout(() => {
    const triggers = document.querySelectorAll('.submenu-trigger[data-state="open"]')
    if (triggers.length === 0)
      return

    const firstTrigger = triggers[0] as HTMLElement
    const viewports = document.getElementsByClassName('submenu-viewport')

    if (viewports.length > 0) {
      const viewport = viewports[0] as HTMLElement
      viewport.style.left = `${firstTrigger.offsetLeft}px`
    }
  })
}

<NavigationMenu @update:model-value="onNavChange">
<NavigationMenuViewport class="submenu-viewport">
<NavigationMenuTrigger class="submenu-trigger">

Could you elaborate on the @update:model-value="onNavChange" part? trying to use this in nextjs in the NavigationMenu component is giving me errors.

I just found a solution for me
I just create a component for NavigationMenuItem and add 'relative' to it.
const NavigationMenuItem = React.forwardRef<
  React.ElementRef<typeof NavigationMenuPrimitive.Item>,
  React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Item>
>(({ className, ...props }, ref) => (
  <NavigationMenuPrimitive.Item
    ref={ref}
    className={cn("relative", className)}
    {...props}
  />
));
NavigationMenuItem.displayName = 'NavigationMenuItem';

BTW I remove Navigation MenuViewport too and add this to the Menu
const NavigationMenuContent = React.forwardRef<
  React.ElementRef<typeof NavigationMenuPrimitive.Content>,
  React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Content>
>(({ className, ...props }, ref) => (
  <NavigationMenuPrimitive.Content
    ref={ref}
    className={cn(
      "right-0  absolute",
      "absolute top-full w-fit bg-popover mt-[5px]",
      "data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52",
      className
    )}
    {...props}
  />
));

Hope it helps.
Example Image:

I just found a solution for me
I just create a component for NavigationMenuItem and add 'relative' to it.
const NavigationMenuItem = React.forwardRef<
  React.ElementRef<typeof NavigationMenuPrimitive.Item>,
  React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Item>
>(({ className, ...props }, ref) => (
  <NavigationMenuPrimitive.Item
    ref={ref}
    className={cn("relative", className)}
    {...props}
  />
));
NavigationMenuItem.displayName = 'NavigationMenuItem';

BTW I remove Navigation MenuViewport too and add this to the Menu
const NavigationMenuContent = React.forwardRef<
  React.ElementRef<typeof NavigationMenuPrimitive.Content>,
  React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Content>
>(({ className, ...props }, ref) => (
  <NavigationMenuPrimitive.Content
    ref={ref}
    className={cn(
      "right-0  absolute",
      "absolute top-full w-fit bg-popover mt-[5px]",
      "data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52",
      className
    )}
    {...props}
  />
));

Hope it helps.
Example Image:

thanks that works for me perfectly.

I just found a solution for me
I just create a component for NavigationMenuItem and add 'relative' to it.
const NavigationMenuItem = React.forwardRef<
  React.ElementRef<typeof NavigationMenuPrimitive.Item>,
  React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Item>
>(({ className, ...props }, ref) => (
  <NavigationMenuPrimitive.Item
    ref={ref}
    className={cn("relative", className)}
    {...props}
  />
));
NavigationMenuItem.displayName = 'NavigationMenuItem';

BTW I remove Navigation MenuViewport too and add this to the Menu
const NavigationMenuContent = React.forwardRef<
  React.ElementRef<typeof NavigationMenuPrimitive.Content>,
  React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Content>
>(({ className, ...props }, ref) => (
  <NavigationMenuPrimitive.Content
    ref={ref}
    className={cn(
      "right-0  absolute",
      "absolute top-full w-fit bg-popover mt-[5px]",
      "data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52",
      className
    )}
    {...props}
  />
));

Hope it helps.
Example Image:

A full year and this is such a gem to find... Thank you, it still works which means the problem was never looked into after this issue opened.

I removed the reference to NavigationMenuViewport in NavigationMenu in the navigation-menu.ts file.
const NavigationMenu = React.forwardRef<
  React.ElementRef<typeof NavigationMenuPrimitive.Root>,
  React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Root>
>(({ className, children, ...props }, ref) => (
  <NavigationMenuPrimitive.Root
    ref={ref}
    className={cn(
      "relative z-10 flex max-w-max flex-1 items-center justify-center",
      className
    )}
    {...props}
  >
    {children}
    {/* <NavigationMenuViewport /> */}
  </NavigationMenuPrimitive.Root>
))

I modified NavigationMenuContent to the following because the previous example left out the styling of the default MenuViewport which includes a border and shadow.
const NavigationMenuContent = React.forwardRef<
  React.ElementRef<typeof NavigationMenuPrimitive.Content>,
  React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Content>
>(({ className, ...props }, ref) => (
  <NavigationMenuPrimitive.Content
    ref={ref}
    className={cn(
      "left-0  absolute",
      "absolute top-full w-fit bg-popover mt-[5px]",
      "data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52",
      "origin-top-center absolute mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 md:w-[var(--radix-navigation-menu-viewport-width)]",
      className
    )}
    {...props}
  />
))

Here is the result:

I removed the reference to NavigationMenuViewport in NavigationMenu in the navigation-menu.ts file.

Yep, also just found that solution

Finally found a solution here. Thanks for this thread,  I've been trying to fix this for hours

The default behavior is so broken, both implementations from @dongnez and @AoverK are way better, thanks for sharing 💜

I just found a solution for me
I just create a component for NavigationMenuItem and add 'relative' to it.
const NavigationMenuItem = React.forwardRef<
  React.ElementRef<typeof NavigationMenuPrimitive.Item>,
  React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Item>
>(({ className, ...props }, ref) => (
  <NavigationMenuPrimitive.Item
    ref={ref}
    className={cn("relative", className)}
    {...props}
  />
));
NavigationMenuItem.displayName = 'NavigationMenuItem';

BTW I remove Navigation MenuViewport too and add this to the Menu
const NavigationMenuContent = React.forwardRef<
  React.ElementRef<typeof NavigationMenuPrimitive.Content>,
  React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Content>
>(({ className, ...props }, ref) => (
  <NavigationMenuPrimitive.Content
    ref={ref}
    className={cn(
      "right-0  absolute",
      "absolute top-full w-fit bg-popover mt-[5px]",
      "data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52",
      className
    )}
    {...props}
  />
));

Hope it helps.
Example Image:

thanks worked for me

I removed the reference to NavigationMenuViewport in NavigationMenu in the navigation-menu.ts file.
const NavigationMenu = React.forwardRef<
  React.ElementRef<typeof NavigationMenuPrimitive.Root>,
  React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Root>
>(({ className, children, ...props }, ref) => (
  <NavigationMenuPrimitive.Root
    ref={ref}
    className={cn(
      "relative z-10 flex max-w-max flex-1 items-center justify-center",
      className
    )}
    {...props}
  >
    {children}
    {/* <NavigationMenuViewport /> */}
  </NavigationMenuPrimitive.Root>
))

I modified NavigationMenuContent to the following because the previous example left out the styling of the default MenuViewport which includes a border and shadow.
const NavigationMenuContent = React.forwardRef<
  React.ElementRef<typeof NavigationMenuPrimitive.Content>,
  React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Content>
>(({ className, ...props }, ref) => (
  <NavigationMenuPrimitive.Content
    ref={ref}
    className={cn(
      "left-0  absolute",
      "absolute top-full w-fit bg-popover mt-[5px]",
      "data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52",
      "origin-top-center absolute mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 md:w-[var(--radix-navigation-menu-viewport-width)]",
      className
    )}
    {...props}
  />
))

Here is the result:

Thank you!!!! This problem was driving me crazy!

This issue has been automatically closed because it received no activity for a while. If you think it was closed by accident, please leave a comment. Thank you.

This is still an issue.

Came here to say this is still an issue. Thanks to @AoverK and @dongnez for your fixes!

Hi can u reopen this issue.Is the issue fixed i tried the fix by @dongnez  but the fix didn't please provide some insight and if possible an example of usage with full demo very much appreciate

what is up with all these automatically close a issue?

Hi can u reopen this issue.Is the issue fixed i tried the fix by @dongnez but the fix didn't work. Please provide some insight and if possible an example of usage with full demo very much appreciate

I also don't think the solution provided here are helpful at all ( not work ).
Here is my solution and I hope it works for everyone:
import * as React from "react"
import * as NavigationMenuPrimitive from "@radix-ui/react-navigation-menu"
import { cva } from "class-variance-authority"
import { ChevronDown } from "lucide-react"

import { cn } from "@/lib/utils"

const NavigationMenu = React.forwardRef<
  React.ElementRef<typeof NavigationMenuPrimitive.Root>,
  React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Root>
>(({ className, children, ...props }, ref) => (
  <NavigationMenuPrimitive.Root
    ref={ref}
    className={cn(
      "relative z-10 flex max-w-max flex-1 items-center justify-center",
      className,
    )}
    {...props}
  >
    {children}
    {/* <NavigationMenuViewport /> */}
  </NavigationMenuPrimitive.Root>
));
NavigationMenu.displayName = NavigationMenuPrimitive.Root.displayName;

const NavigationMenuList = React.forwardRef<
  React.ElementRef<typeof NavigationMenuPrimitive.List>,
  React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.List>
>(({ className, ...props }, ref) => (
  <NavigationMenuPrimitive.List
    ref={ref}
    className={cn(
      "group flex flex-1 list-none items-center justify-center space-x-1",
      className,
    )}
    {...props}
  />
));
NavigationMenuList.displayName = NavigationMenuPrimitive.List.displayName;

const NavigationMenuItem = NavigationMenuPrimitive.Item;

const navigationMenuTriggerStyle = cva(
  "group inline-flex h-10 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[active]:bg-accent/50 data-[state=open]:bg-accent/50",
);

const NavigationMenuTrigger = React.forwardRef<
  React.ElementRef<typeof NavigationMenuPrimitive.Trigger>,
  React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Trigger>
>(({ className, children, ...props }, ref) => (
  <NavigationMenuPrimitive.Trigger
    ref={ref}
    className={cn(navigationMenuTriggerStyle(), "group", className)}
    {...props}
  >
    {children}{" "}
    <ChevronDown
      className="relative top-[1px] ml-1 h-3 w-3 transition duration-200 group-data-[state=open]:rotate-180"
      aria-hidden="true"
    />
  </NavigationMenuPrimitive.Trigger>
));
NavigationMenuTrigger.displayName = NavigationMenuPrimitive.Trigger.displayName;

const NavigationMenuContent = React.forwardRef<
  React.ElementRef<typeof NavigationMenuPrimitive.Content>,
  React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Content>
>(({ className, ...props }, ref) => (
  <NavigationMenuPrimitive.Content
    ref={ref}
    className={cn(
      "absolute left-auto right-auto rounded-md border bg-popover text-popover-foreground shadow-lg",
      "absolute top-full mt-[5px] w-fit bg-popover",
      "data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52",
      className,
    )}
    {...props}
  />
));
NavigationMenuContent.displayName = NavigationMenuPrimitive.Content.displayName;

const NavigationMenuLink = NavigationMenuPrimitive.Link;

const NavigationMenuViewport = React.forwardRef<
  React.ElementRef<typeof NavigationMenuPrimitive.Viewport>,
  React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Viewport>
>(({ className, ...props }, ref) => (

    <NavigationMenuPrimitive.Viewport
      className={cn(
        "origin-top-center relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 md:w-[var(--radix-navigation-menu-viewport-width)]",
        className,
      )}
      ref={ref}
      {...props}
    />

));
NavigationMenuViewport.displayName =
  NavigationMenuPrimitive.Viewport.displayName

const NavigationMenuIndicator = React.forwardRef<
  React.ElementRef<typeof NavigationMenuPrimitive.Indicator>,
  React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Indicator>
>(({ className, ...props }, ref) => (
  <NavigationMenuPrimitive.Indicator
    ref={ref}
    className={cn(
      "top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in",
      className
    )}
    {...props}
  >

  </NavigationMenuPrimitive.Indicator>
))
NavigationMenuIndicator.displayName =
  NavigationMenuPrimitive.Indicator.displayName

export {
  navigationMenuTriggerStyle,
  NavigationMenu,
  NavigationMenuList,
  NavigationMenuItem,
  NavigationMenuContent,
  NavigationMenuTrigger,
  NavigationMenuLink,
  NavigationMenuIndicator,
  NavigationMenuViewport,
}

and If you are importing the  inside the component, remove it like this:
import {
  NavigationMenu,
  NavigationMenuContent,
  NavigationMenuIndicator,
  NavigationMenuItem,
  NavigationMenuLink,
  NavigationMenuList,
  NavigationMenuTrigger,
  NavigationMenuViewport,
} from "@/components/ui/navigation-menu";
import { cn } from "@/lib/utils";
import Link from "next/link";

export function NavMenu() {
  return (

      {/* Desktop Navigation */}

        <NavigationMenu>
          <NavigationMenuList className="gap-2">
            <NavigationMenuItem>
              <NavigationMenuTrigger className="bg-transparent text-sm font-normal text-white hover:bg-white/20">
                Countries
              </NavigationMenuTrigger>
              <NavigationMenuContent>

                  {}

              </NavigationMenuContent>
            </NavigationMenuItem>

            <NavigationMenuItem>
              <NavigationMenuTrigger className="bg-transparent text-sm font-normal text-white hover:bg-white/20">
                Questions
              </NavigationMenuTrigger>
              <NavigationMenuContent>

                  {}

              </NavigationMenuContent>
            </NavigationMenuItem>

            <NavigationMenuItem>
              <NavigationMenuTrigger className="bg-transparent text-sm font-normal text-white hover:bg-white/20">
                Services
              </NavigationMenuTrigger>
              <NavigationMenuContent>

                  {}

              </NavigationMenuContent>
            </NavigationMenuItem>

            <NavigationMenuItem>
              <NavigationMenuTrigger className="bg-transparent text-sm font-normal text-white hover:bg-white/20">
                Relationships
              </NavigationMenuTrigger>
              <NavigationMenuContent>

                  {}

              </NavigationMenuContent>
            </NavigationMenuItem>
          </NavigationMenuList>
          <NavigationMenuIndicator />
          {/* <NavigationMenuViewport /> */}
        </NavigationMenu>

  );
}

const ListItem = React.forwardRef<
  React.ElementRef<"a">,
  React.ComponentPropsWithoutRef<"a"> & {
    title: string;
    disabled?: boolean;
  }
>(({ className, title, children, disabled, ...props }, ref) => {
  return (

      <NavigationMenuLink asChild>

                  {title}

            {children && (

                {children}

            )}

      </NavigationMenuLink>

  );
});
ListItem.displayName = "ListItem";

@yaba101 I added this logic for positioning and overflow... thanks for sharing :)
export function NavItemExpendable({ item }: NavItemProps) {
  const ref = useRef<HTMLLIElement>(null);
  const [position, setPosition] = useState('left');
  const boxSize = 300;

  useEffect(() => {
    //   need to check if the sub menu has enough space to be displayed left or right
    if (ref.current) {
      const rect = ref.current.getBoundingClientRect();
      const spaceLeft = rect.left;
      const spaceRight = window.innerWidth - rect.right;

      if (spaceRight < boxSize) {
        setPosition('right');
      } else if (spaceLeft < boxSize) {
        setPosition('left');
      } else {
        setPosition('center');
      }
    }
    return () => {
      setPosition('left');
    };
  }, []);

  return (
    <NavigationMenuItem ref={ref ?? undefined}>
      <NavigationMenuTrigger className="text-base">
        <motion.span>{item?.label}</motion.span>
      </NavigationMenuTrigger>

      <NavigationMenuContent
        className={cn(
          position === 'right' ? 'right-0 left-auto bg-red-500' : 'bg-blue-500'
        )}
      >

          {item?.subItems?.map((subItem, subIndex) => {
            const link = subItem.link;
            return (
              <motion.li
                key={subItem.id}
                initial={{ opacity: 0, x: -10 }}
                animate={{ opacity: 1, x: 0 }}
                transition={{
                  duration: 0.2,
                  delay: 0.1 * subIndex,
                }}
              >
                <NavigationMenuLink asChild>
                  <CMSLink
                    {...link}
                    className="block select-none space-y-1 rounded-md p-3 leading-none no-underline outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground"
                  >

                      {subItem.link.label}

                  </CMSLink>
                </NavigationMenuLink>
              </motion.li>
            );
          })}

      </NavigationMenuContent>
    </NavigationMenuItem>
  );
}


Create GFF loader

Currently the only way to load data into the Redis database is from Chado using chado_to_redis.py or by wrapping your own loading script. Though the Python script consumes a vanilla Chado database, rather than the modified version required by the Django app, it is still an inconvenient step. For this reason, we should wrap our own script that allows users to populate the database directly from GFF files.

Whoops. I duplicated this in issue #10. We've been using that issue so I'll close this one.


Should we have an Enumerable Eth::Chains that is a collection of Eth::Chain objects?

see https://github.com/mculp/eth.rb/blob/add-chainlist/data/chainlist.json

I'm afraid most users won't need custom chains anyway. I would carefully say this is low priority, however, I would never reject a PR that improves the library ;)


Flood fill animation

So at some point in the video Daniel Shiffman said that we could animate the floodFill
The original code
this.floodFill();
instead we should say:
setTimeout(() => {       this.floodFill();     }, 450);
Just so the floodFill doesn't happen instantly

here is the coding challenge with your suggestion<EMAIL_ADDRESS>

I like a timeout of 0 best especially with larger grids
https://github.com/CodingTrain/website/issues/1470
I wouldnt use a w below 8 tohugh otherwise it gets really laggy


Update WinGet sandbox script to use Repair-WinGetPackageManager cmdlet

Instead of manually downloading and installing dependencies, use the Repair-WinGetPackageManager cmdlet for bootstrapping WinGet.
cc @denelon

We need to make sure this works across multiple architectures as well as Windows 10 RS5+ and Windows 11.

Thanks for uncovering a bug:

https://github.com/microsoft/winget-cli/issues/4903

Let's get that one fixed before we take the changes with the indication of preview versions.

The upstream bug was resolved. We should be set to take in this PR
cc @denelon @mattwojo

Merged! :)  Thanks for this update!!


Can't find functions

So upon executing certain commands (I'm on an iPhone 6 on iOS 12.1.1), such as fpr, fc, or even just reading, memctl prints this out:
warning: could not find _bzero_phys
warning: could not find _pthread_kext_register
warning: could not find __FREE
Assertion failed: (kr == KEXT_SUCCESS), function ksim_set_pc, file src/libmemctl/arm64/ksim.c, line 307.
deinitialized
Abort trap: 6

I'm not really sure what's wrong here. Any ideas?

My guess is that this a bug related to the new (as of iOS 12) merged kernelcache format, which is causing libmemctl to unexpectedly fail to find the kext Mach-O corresponding to a given address.
Unfortunately I don't have a device I can test on. Are you able to get a backtrace on the crash to see who called ksim_set_pc? My guess is it should be coming from kernel_find_kauth_cred_setsvuidgid.

Yeah, looks like kernel_find_kauth_cred_setsvuidgid is the most likely/only suspect, as (looking at the warnings) all of the other methods that call ksim_set_pc would've returned before getting to that point.
I couldn't be sure why though, as I'm not super well-versed in this kind of thing. I'm actually planning on using memctl as a tool while learning more about XNU.


Ftx usertrades streaming (With sub-account support)

Worked on top of PR #4075 by @makarid

Rebased on top of latest develop branch, and added sub-account support.
Minor coding style fixes mentioned in original PR

Usage:
ExchangeSpecification.setUserName is used as sub-account, which is naturally null when not specified.

@imTigger thank you for this PR


actions/no-channel-pr: re run when base branch is updated

Additionally, no permissions are needed so set it to an empty set
Signed-off-by: John Titor<EMAIL_ADDRESS>Fixes a bug with this action reported in https://github.com/NixOS/nixpkgs/issues/355847#issuecomment-2564687743

I am not sure this will work. Wouldn't it just re-run the action and fail again?

In #369170, I tried adding some conditionals around github.base_ref - but it didn't really work since the value appears to be cached.

Nope, A manual re run is where some things are cached. This is an automatic re run, just like when running actions on a force push.

So, Github will:

trigger the "edited" event
notice the workflow no longer applies
remove the previous failing workflow from the overview

In that case it should work.

Yep, on edited action it will restart the workflow on an entirely new set of variables, which is not the same as restarting a failed job.


Expose the max number of retries to formatters

Hey @davidjgoss and @charlierudolph!
Would it be possible to make the information about the max number of retries specified via --retry parameter available to Cucumber formatters?
At the moment Cucumber messages provide information about the current attempt number, for example:
{"testCaseStarted":{"attempt":1,"timestamp":{"seconds":"1609892232","nanos":945000000},"testCaseId":"d6c24ef0-66c4-42f7-a62e-2d6b976a40ff","id":"9b5d1c83-09a3-466d-8c14-e3c2b14918ea"}}

However, they don't tell how many attempts there are left, which makes reporting a bit inconvenient.
Perhaps this information could be added to IFormatterOptions either to the main options object itself or under parsedArgvOptions. I think the behaviour could be similar to how the RerunFormatter works.
Is this a feature you'd be willing to add / review a PR for?

Moved this to the main repo, as I think it would only be practically achievable by adding to the standard messages - the test cases that can be retried could be a subset because of —retry-tag-filter so a global setting would seem off to me.
I think this would need to live on the TestCase message as eg “maximum_attempts”. Balanced with this is ongoing maintenance across implementations of something that is perhaps a bit niche.
@charlierudolph @mpkorstanje @aslakhellesoy wdyt?

Moved this to the main repo, as I think it would only be practically achievable by adding to the standard messages - the test cases that can be retried could be a subset because of —retry-tag-filter so a global setting would seem off to me.
I think this would need to live on the TestCase message as eg “maximum_attempts”. Balanced with this is ongoing maintenance across implementations of something that is perhaps a bit niche.
@charlierudolph @mpkorstanje @aslakhellesoy wdyt?

Again I've not dived into the protobuf stuff much, but what I would think is that if a specific scenario failed once but passed 2nd time around, that wouldn't affect another scenario. As such to save weight (And possibly time), couldn't this be something that wraps the whole message structure at the top level?

Again I've not dived into the protobuf stuff much, but what I would think is that if a specific scenario failed once but passed 2nd time around, that wouldn't affect another scenario. As such to save weight (And possibly time), couldn't this be something that wraps the whole message structure at the top level?

@luke-hill the issue with putting something like maximum_attempts at the top level would be that it only applies to some test cases (depending on --retry-tag-filter).

@luke-hill the issue with putting something like maximum_attempts at the top level would be that it only applies to some test cases (depending on --retry-tag-filter).

As in it only applies if the original test failed? Or if the param was input?
Because if the param is input then you can hard-code the value to 1 But maybe I'm misunderstanding.

As in it only applies if the original test failed? Or if the param was input?
Because if the param is input then you can hard-code the value to 1 But maybe I'm misunderstanding.


Updating the security group auditor to treat ::/0 the same as <IP_ADDRESS>/0.

Coverage decreased (-0.03%) to 60.323% when pulling cf3989494896b617070876d254aacab363d348de on sgauditor_ipv6 into d3cb39d3f0bf709c1ee0bb857c9ae27cc515e6e9 on develop.


Fix enabledContentGestureInteraction with selectable

When enabledContentGestureInteraction is true, you can not select components in a ScrollView, there are workarounds for this (which causes loss of SOME functionality). But will there ever be a fix internally?

If anyone can guide me on how to fix this I would try to make a pull request.
This issue seems to only persist on android and I need this fixed to release my app.

Same here. TouchableOpacity from 'react-native-gesture-handler' works on android, but not on ios. ToucahbleOpacity from 'react-native' works on ios but not on android..

Seems like if you hold the screenon Android it works.

@karimcambridge yes, holding the screen is the only way that I can scroll on android.
I have been trying a lot of things but for some reason I cant place enabledContentGestureInteraction={true} on android. It makes everything not touchable/scrollable on the Flatlist that I have on my renderContent

Hey @Xadinsx, @SocialBrothersDEV actually gave us the key.
I literally just fixed it. So I was using onPress from List.Item in react-native-paper but what I do now is use Platform.select outside of my react function and select the native-native TouchableOpacity if ios, else if android select the gesture-handler one!
It works great on android and I am waiting on my tester to tell me the result of iOS.

import React, { useState } from 'react';
import { Platform, StyleSheet, TouchableOpacity as TouchableOpacityNative } from 'react-native';
import { List } from 'react-native-paper';
import { TouchableOpacity as TouchableOpacityGesture } from 'react-native-gesture-handler';

const
	TouchableComponent = Platform.select({ // workaround for reanimated-bottom-sheet
        ios: TouchableOpacityNative,
        android: TouchableOpacityGesture,
	});
;

const LocationItem = props => {
	return (
		<TouchableComponent
			onPress={onLocationSelected}
		>
			<List.Item
				style={styles.listItem}
			/>
		</TouchableComponent>
	);
};

Thank you @SocialBrothersDEV! Just some minor information like that can solve a persons' horrors.


[HUDI-6076] Change clustering.plan.strategy.small.file.limit's unit to byte

Change Logs
clustering.plan.strategy.target.file.max.bytes's unit is byte, clustering.plan.strategy.small.file.limit should be unified with it.  And they also compare sizes somewhere, there's not even a uniform unit here, like this
  this.conf.setLong(FlinkOptions.CLUSTERING_PLAN_STRATEGY_SMALL_FILE_LIMIT.key(),
      this.conf.getLong(FlinkOptions.CLUSTERING_PLAN_STRATEGY_TARGET_FILE_MAX_BYTES) > this.conf.getLong(FlinkOptions.CLUSTERING_PLAN_STRATEGY_SMALL_FILE_LIMIT)
        ? this.conf.getLong(FlinkOptions.CLUSTERING_PLAN_STRATEGY_SMALL_FILE_LIMIT)
          : this.conf.getLong(FlinkOptions.CLUSTERING_PLAN_STRATEGY_TARGET_FILE_MAX_BYTES));

Impact
Change clustering.plan.strategy.small.file.limit's unit to byte
Risk level (write none, low medium or high below)
low
Documentation Update
none
Contributor's checklist

[ ] Read through contributor's guide
[ ] Change Logs and Impact were stated clearly
[ ] Adequate tests were added if applicable
[ ] CI passed

@danny0405  Can you help with a review?

@Zouxxyy, did you take the compatibility of this change into consideration? With this change, the config value of clustering.plan.strategy.small.file.limit must be changed when upgrade to the lastest version.

@Zouxxyy, did you take the compatibility of this change into consideration? With this change, the config value of clustering.plan.strategy.small.file.limit must be changed when upgrade to the lastest version. IMO, you should introduce new option for the config unification.

A valid concern, this may break the user code, we should take the modification as early and add some illustrations on the release note.

A valid concern, this may break the user code, we should take the modification as early and add some illustrations on the release note.

@danny0405  So should we use the new configuration, or just fix the bug and not change the unit?

just fix the bug and not change the unit

Let's fix the bug first.

@danny0405 done


extern Swift declaration not public

We are building a library that has swift code that should be called by rust in an extra swift file (besides the auto generated ones).
But we keep getting linker errors that __swift_bridge__$rust_handler could not be found.
Until we make the auto-generated function public:
@_cdecl("__swift_bridge__$rust_handler")
public func __swift_bridge__rust_handler (_ text: UnsafeMutableRawPointer) {
    rust_handler(text: RustString(ptr: text))
}

Could you fix the code autogenerator to make these public by default (or at least introduce some compile-time switch to do that)?

Could you share the minimal example?

See this zip file for a minimal example.
The build-rust.sh script is based upon https://github.com/chinedufn/swift-bridge/tree/master/book/src/building/swift-packages
The generated code looks like this:
import RustXcframework
public func test() {
    __swift_bridge__$test()
}
@_cdecl("__swift_bridge__$swift_handler")
func __swift_bridge__swift_handler (_ text: UnsafeMutableRawPointer) {
    swift_handler(text: RustString(ptr: text))
}

Thus the linker will report __swift_bridge__$swift_handler as missing once the generated LibTestBridge package is linked to from any swift project.
Adding public in front of the __swift_bridge__swift_handler definition will solve that issue.
That's because of swifts access control defaulting to internal which prevents the binary RustXcframework.xcframework from accessing the __swift_bridge__swift_handler supposed to be exposed as symbol __swift_bridge__$swift_handler in the object file generated by the swift compiler, but the swift compiler does not expose this symbol.
The swift compiler does not expose the symbol because the internal access control means this function should only be accessible by the swift module it resides in, not by any other modules (linked in).

If you point me in the right direction, I can create a pull request fixing this :)

@tmolitor-stud-tu
Sorry for the response and thank you for sharing the example.

If you point me in the right direction, I can create a pull request fixing this :)

I'll dive into this issue next weekend because I'm a bit busy right now.

@tmolitor-stud-tu
public func test() {
    __swift_bridge__$test()
}
@_cdecl("__swift_bridge__$swift_handler")
func __swift_bridge__swift_handler (_ text: UnsafeMutableRawPointer) {
    swift_handler(text: RustString(ptr: text))
}

In your example, it seems like __swift_bridge__swift_handler isn't called in other swift modules. Do you want to call this method in other swift modules?

As far as I remember, this method is used on the Rust side. So, other swift modules shouldn't call this.

As far as I remember, this method is used on the Rust side. So, other swift modules shouldn't call this.

Exactly, but the binary rust XCFramework has an unresolved symbol (__swift_bridge__$swift_handler) because the __swift_bridge__swift_handler swift function generated by swift-bridge is not public and thus its symbol won't be exported.
This means the linker sees two binaries, one containing the rust stuff that wants a symbol named __swift_bridge__$swift_handler and the other (the swift one) not exporting that symbol even though it should (that's the whole point of the __swift_bridge__swift_handler function in the first place: being there to be called by rust code).
Please note: even though I did not include swift code containing the swift_handler function, that linker problem is unrelated to this. Just create a swift file inside the test-bridge/generated directory containing that function.
Sidenote: a full (non-minimal) example can be found over here: https://github.com/monal-im/Monal/tree/develop/rust
Please note the sed invocation at the end of the build script fixing this issue: https://github.com/monal-im/Monal/blob/develop/rust/build-rust.sh#L60

@tmolitor-stud-tu
What linker do you use?

a full (non-minimal) example can be found over here: https://github.com/monal-im/Monal/tree/develop/rust
Please note the sed invocation at the end of the build script fixing this issue: https://github.com/monal-im/Monal/blob/develop/rust/build-rust.sh#L60

By the way, I added the your package to my minimal project like this:

Even though I don't put public in front of __swift_bridge__rust_panic_handler method, Xcode`s default linker could link them. Am I missing something?
Environment
Xcode: Version 14.3.1

This means the linker sees two binaries, one containing the rust stuff that wants a symbol named swift_bridge$swift_handler and the other (the swift one) not exporting that symbol even though it should (that's the whole point of the __swift_bridge__swift_handler function in the first place: being there to be called by rust code).

As you can see the immediately above comment, it seems like the programs run, which means the linker could link rust object files and swift object files.

https://github.com/chinedufn/swift-bridge/pull/262 should fix this

Thanks @jmp-0x7C0 !!!


Added cinder-volume service account to PrivilegedRoleBinding template to allow required privilege escalation

This change adds the service account 'cinder-volume' to the 'PrivilegedRoleBinding' template. The cinder-volume deployment now requires privilege escalation due to an upstream change to the cinder deployment-volume.yaml template. (https://github.com/openstack/openstack-helm/commit/f5bf6ec2deb0bf3a3803a4cb441c197fe19abe3b)

This change was already added to the deploy-osh role back on Feb 6th with commit a653e35, so it should only be necessary to add it to the airship-configure-caasp role.


MQTT Command topic stops working after 3 weeks

Revision 0.8.4+f39b68a (02-05-2021)
I post command (outside temperature) at a 1 minute interval through the command topic on MQTT. This works perfectly for about 18 days, after that the OTGW does not listen to the command topic anymore. Publishing it's own topics to the broker remains operational without issues. Sending commands through the network port with the opentherm gateway application also remains operational, so it appears to be in the MQTT handling.
After a reboot of the ESP all works well again.

Hi @MrSnuggels that's a weird issue... after 18 days it needs a reset? I immediately suspect a bug in on of the libs I use, like the pubsub for MQTT or something. So are you saying I need to reset once a week?

@MrSnuggels hmmm, just fixed a cmd queue bug that could have been related to your problem. The commands where due based on nos() not millis(), that might also cause your issue. However I have no other way than asking you to upgrade to v0.8.5 when released and find out.

Closing this issue, expect it is related to issue #60 and that was fixed. If you keep seeing your issue @MrSnuggels then please let me know and reopen this issue. We can investigate that if that would be needed.

Just flashed the new firmware release, will let you know in a couple of weeks if this resolves the issue.

Issue seems to be resolved indeed. Now at 36 days since boot and still responding to MQTT commands. Thank you very much.

Thanks for the confirmation @MrSnuggels


release: 0.4.0

This is the 0.4.0 bump of binaryen.ml - once this lands. I'll tag and push that up and it should kick of the release process.

Going to wait to tag/release this until I understand why Windows is failing.


DTSTART support

According to documentation of iCalendar-RFC-5545 (https://icalendar.org/iCalendar-RFC-5545/3-8-5-3-recurrence-rule.html), rrules might contain DTSTART, which is also my case, because the web application of our project, saves the format rrule like that "DTSTART:20220629T000000Z\nRRULE:FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR,SA,SU". Unfortunately as it seems, this is the only lib for rrule on dart, and i didn't find the DTSTART support in documentation. Please, help me out!

The DTSTART property is separate from the RRULE property in an iCalendar file. DTSTARTs can also be defined with a time zone, which is out of scope without there being a dedicated, well-maintained package for handling time zones in Dart. Therefore, rrule doesn't parse the DTSTART property.
You can still handle the de-/serialization of that property yourself, though, and then pass it to rrule.getInstances(start: myParsedDtstart).


AnalyzeWithCustomModel allow usage of MemoryStream

According to the C# sample it is possible to use ByteArrayContent
So it makes sense to also allow the usage of MemoryStream to Analyze a custom model combined with ContentType

Can one of the admins verify this patch?

Please file an issue describing the problem you are trying to solve.

@larcai I am closing this PR for now. If you would like to continue it, please file an issue describing the scenario you would like to achieve with this change.


A question of the example shell of the Haplotype-specific

Hi Tobias
I have a question of the example shell in the software folder.

When you convert the vcf file to the bcf format, you use the parameter (-m2 -M2 -c 1 -C 1) to filter some variant sites.
It seemed that this parameter would retain the variant sites of 0/1 type. Why you use this parameter?

When you want to split the data by haplotype only heterozygous variants (0/1) are informative for a diploid sample.

I got it. Thank you very much!


To add a Ping Pong game

Project title
Ping Pong Multiplayer game
Project Description
Ping pong, also known as table tennis, is a sport in which two or four players hit a lightweight ball back and forth across a table using small solid rackets.
They must prevent the ball from touching the surface of the table on their side
How to play? 🕹
Controls:
W: Up / S: Down (Player 1)
↑: Up / ↓: Down (Player 2)
Players must allow a ball played towards them to bounce once on their side of the table and must return it so that it bounces on the opposite side.
A point is scored when a player fails to return the ball within the rules. A player or team wins a game by scoring 11 points with a two-point margin.
This is a endless game, so both players can play as much as they want
Also added the Pause , Resume and Reset button below to make it more interesting.
Doc Domain

[] Solidity , Html, Css , JavaScript , Web3.js / Ether.js
[] Solidity , ReactJs /NextJs , Web3.js /Ether.js
[] Solidity , Python3 , Web3.py
[] Other , feel free to mention below

Are you contributing under any open-source program ?
I'm a SSOC contributor , please assign me this issue @Vikash-8090-Yadav

@ayan-joshi assigned to you. Start working on it.


independence testing

we don't ever really explicitly mention it, except perhaps briefly in the appendix,
but when X or Y is discrete, MGC is an independence test, right?
(i'm basing this off the Heller et. al (2016) paper).
if so, i should add some text somewhere about that....

that is true, I think, there is no constraint for dcorr, so there isn't any for MGC regarding discrete or continuous.


Update Slack @ Work link

link was the same as CocoaHeadNL

@jhihguan oops I copied the same link again. Many thanks Wane :+1:


Add a known field in the YAML output format for summary information

Describe the solution you'd like
A place to store short messages that we want sonobuoy to print regarding a test. The data type has a details map[string]interface{} and junit has fields system-out and failure which we put there.
However, the post-processor sidecar makes it easier to tweak results and add information/context to a result. We could append to failure/system-out but the issue is that those fields (from the e2e results at least) are extremely verbose. We wouldn't usually want to print that all of that data.
In addition, what if the test in question passed but we still want to add some data that may be printed in some context? We need a generic field that Sonobuoy knows is for this sort of user-facing data.
In addition, during sonobuoy results should print this data for failures and potentially consider printing the failure fields as well (less verbose than the system-out field but maybe give options for this).

Going to add this; I think summary works well but is often used in other contexts too. I could be more clear and say shortsummary or short to emphasize that it should be shorter in length.
Going to work on this but I'm open to renaming.

@johnSchnake , are you still working on this?


ROX-22590: Test disabling of Scanner V4

Description
A detailed explanation of the changes in your PR.
Feel free to remove this section if it is overkill for your PR, and the title of your PR is sufficiently descriptive.
Checklist

[ ] Investigated and inspected CI test results
[ ] Unit test and regression tests added
[ ] Evaluated and added CHANGELOG entry if required
[ ] Determined and documented upgrade steps
[ ] Documented user facing changes (create PR based on openshift/openshift-docs and merge into rhacs-docs)

If any of these don't apply, please comment below.
Testing Performed
Here I tell how I validated my change
TODO(replace-me)
Use this space to explain how you validated that your change functions exactly how you expect it.
Feel free to attach JSON snippets, curl commands, screenshots, etc. Apply a simple benchmark: would the information you
provided convince any reviewer or any external reader that you did enough to validate your change.
It is acceptable to assume trust and keep this section light, e.g. as a bullet-point list.
It is acceptable to skip testing in cases when CI is sufficient, or it's a markdown or code comment change only.
It is also acceptable to skip testing for changes that are too taxing to test before merging. In such case you are
responsible for the change after it gets merged which includes reverting, fixing, etc. Make sure you validate the change
ASAP after it gets merged or explain in PR when the validation will be performed.
Explain here why you skipped testing in case you did so.
Have you created automated tests for your change? Explain here which validation activities you did manually and why so.
Reminder for reviewers
In addition to reviewing code here, reviewers must also review testing and request further testing in case the
performed one does not seem sufficient. As a reviewer, you must not approve the change until you understand the
performed testing and you are satisfied with it.

/retest

@vlad, I had to push some fixes. The idea with the ABORT_ON_FAILURE required some teardown refactoring. And bash arrays don't work well as exported variables, so that had to be removed.

As of now CI is looking not bad:
Executing the ScannerV4 Test
1..10
ok 1 Upgrade from old Helm chart to HEAD Helm chart with Scanner v4 enabled # in 837036 ms
ok 2 Fresh installation of HEAD Helm chart with Scanner V4 disabled and enabling it later # in 723839 ms
ok 3 Fresh installation of HEAD Helm chart with Scanner v4 enabled # in 414210 ms
ok 4 Fresh installation of HEAD Helm charts with Scanner v4 enabled in multi-namespace mode # in 513258 ms
ok 5 [Manifest Bundle] Fresh installation without Scanner V4, adding Scanner V4 later # in 392336 ms
ok 6 [Operator] Fresh installation with Scanner V4 enabled # in 791021 ms
ok 7 [Operator] Fresh multi-namespace installation with Scanner V4 enabled # in 652933 ms

/retest

/retest


DevTools fail to show source files for SourceMap

Trying out the web-livereload example on windows and getting following error while trying to browse source code from DevTools
Could not load content for http://localhost:8181/src/app.ts (HTTP error: status code 404, net::ERR_HTTP_RESPONSE_CODE_FAILURE)
Do you know what changes are required to config or serve-http to enable linking source files

My workaround is:
  require("serve-http").createServer({
    port: 3000,
    pubdir: ".",
    indexFilename: "index-estrella.html"
  });

where index-estrella.html a copy of docs/index.html located in the parent directory and its script tag refers to docs/app.js instead of app.js.
Chrome needs HTTP access to the src/, which is why the existing approach fails.

I'm not sure what to do about symlinked dependencies' sourcemaps though if it's a monorepo. preserveSymlinks is an option for estrella that is semi related but doesn't help me

This happens since the web server in the web-livereload example is serving a subdirectory, "outside" the source directory (which is why you get a 404; the files simply do not exist from the web server's perspective.) To "fix" this you simply need to either run the web server from a parent directory where the source code is or copy the source code into the directory your web server is serving (docs/ in the case of the web-livereload example.)
Here's a pretty simple solution for the web-livereload example:
$ cd examples/web-livereload
$ npm install -D fs-extra  # for its "copy directory tree" function
$ #edit build.js

build.js
const { build, cliopts } = require("estrella")
const Path = require("path")
const fse = require('fs-extra')  // <- NEW ADDITION

build({
  outfile: "docs/app.js",
  bundle: true,
  sourcemap: true,
  onEnd: () => fse.copy('src', 'docs/src', {overwrite:true}),   // <- NEW ADDITION
})

// Run a local web server with livereload when -watch is set
cliopts.watch && require("serve-http").createServer({
  port: 8181,
  pubdir: Path.join(__dirname, "docs"),
})

@maxkrieger Or try sourcesContent: true (doesn't seem to really work atm)
This has recently been fixed and will be included with the next release :-)

Closing this since it's not a bug


Beam Search

Hi,
thanks for the great and simple repo!
Is the generation of the predict a greedy or a beam Search approach?
If you know how to implement an beam search generation, then I would be very happy if you could help me out!
Cheers, Jonas

Hi, I'm glad you enjoy using the repo! According to the original TrOCR paper, the Decoder already uses beam search to generate the output, see https://arxiv.org/pdf/2109.10282.pdf


[linux] Still epub

Hi,
I tried kepubify on ubuntu 17 yesterday.
Everything is fine, the conversion is running but when I check my original epub file is still an epub file.
I'm very interesting to get a solution to convert in kepub on linux and currently i have found no one.
Thks

it should create a new directory with the kebup files

Have a look at the [documentation](https://geek1011.github.io/kepubify].
For batch conversion, kepubify creates a new directory with the suffix _converted. For single conversion, kepubify creates a new file in the same directory with the extension .kepub.epub.

I tried a single conversion but nothing happened I just have my original file after the process.

Note that a kepub formatted book needs the extension to be .kepub.epub, that is two extensions. Otherwise it will not recognize the book as different from a normal epub.

https://wiki.mobileread.com/wiki/Kepub

I'm going to close this issue now. If you have anymore questions, feel free to reopen it.


[FEATURE REQUEST] ipv6 innernet-server support

Hello! It would be great to have ipv6 support for the innernet-server.

@pretentious7
In the Blog post:
https://blog.tonari.no/introducing-innernet
It implies IPv6 is supported.
In the Section Titled:  Getting Started

Our network CIDR is <IP_ADDRESS>/16, giving us 64k IP addresses to play with! It can be much bigger than this of course, and it can be IPv6 as well.

o, but when I try to put the ipv6 address of my server into the setup thing at the start of innernet-server it says invalid address?
? External endpoint () :

That's a bug alright! Thanks for the issue.


[Bug] filter_attributes function is located in an unexpected location

Description
The filter_attributes() function, located here: https://github.com/code42/py42/blob/master/src/py42/sdk/queries/query_filter.py#L188 does not make a lot of sense.  It is used on constants all around py42.  It should be moved to util.py or somewhere better.
Steps to Reproduce

Follow link and see that the function is in a weird spot

Expected Behavior
This be importable from util.py
Actual Behavior
Have to import from query_filter.py

I can take this on.


ENH: python -m datalad.install [COMPONENT[=version] [--adjust-bashrc] [-u|--upgrade] [-s|--scheme SCHEME]] [COMPONENT...]

We have https://github.com/datalad/datalad/blob/HEAD/tools/ci/install-annex.sh which came handy already on many occasions and used in our CI.  But it is a bash script, so CLI parsing is too basic, would not work on Windows natively, harder to unit-test etc. As its names says, it is only about annex.
For all means and purposes all systems we would care about would have python (be installed as part of some distribution,  or "natively"), so I think it would be beneficial to redo it in "pure" (no 3rd party libs outside of standard libraries) Python
First stage TODOs:

[x] redo in Python using only standard libs (so argparse, no click)
[x] place it as datalad.install submodule which would also support

a script (thus if __name__ == "__main__") mode
has a __main__ with callout to the same as script mode main

[x] support only git-annex as COMPONENT
[ ] add "native" Windows installation of git-annex from  http://datasets.datalad.org/datalad/packages/windows/ . but it probably would also require git installation first, so if too involved, could be postponed to later

Use case: I could just git clone git://github.com/datalad/datalad; python datalad/datalad/install.py git-annex (adjust paths / to \ if on windows), and have appropriate to the platform most recent (compatible) release of git-annex installed
Additional features to expand with:

[ ] add --upgrade -- detect how COMPONENT is installed given environment (conda, native, apt) and upgrade accordingly
[ ] add miniconda component: I keep copy pasting from the handbook... If with this helper I could automate -- that would be awesome!  (Having --env NAME  to mint a new/enter conda environment would also be a nice feature)
[ ] add datalad component (for --upgrade would use apt-get or pip depending on how was installed)
[ ] --deps (conda install --only-deps, apt-get build-dep -- not the same, but AFAIK closest we can do ATM)  -- install build dependencies for the component (if conda it is, conda install --only-deps -c conda-forge datalad to get myself all dependencies installed)
[ ] support of future "datalad-extensions-artifacts distribution"  (in particular for Windows ATM)
[ ] add venv component (may be, as an alternative to conda)

Use case:  so ultimately python -m datalad.install git-annex miniconda --env datalad-dev datalad --deps would install git-annex (as appropriate for OS, before considering miniconda), produce miniconda environment with datalad dependencies installed so I would be ready to "hack".  Order dependent, so miniconda --env datalad-dev  git-annex datalad --deps would first establish miniconda env, and then install git-annex via conda, ...
Notes:

may be argparsing should be [--options-applied-to-all] COMPONENT1[=version] [--options] COMPONENT2[=version] [--options] ... so --options applied per component to remove ambiguity, make more flexible etc
having it as a part of datalad package would allow us to use it internally, so we could offer automatic installation and/or upgrade of git-annex or datalad itself!
neurodocker (and reproman somewhat to do conda activate ... and propagate env changes to the next call ) sound like a big brother to this ;)  here we should aim for "standard library only script", but CLI interface ideas/implementation could be borrowed

WDYT @datalad/developers ?

I have transferred it from datalad issues since outstanding todos are to be addressed here if ever

I have transferred it from datalad issues since outstanding todos are to be addressed here if ever

let's consider this done for now, albeit without all envisioned features -- so far need didn't come for those apparently


What's the performance tuning suggestion on 3,000,000 files on master

Alluxio Version:
2.3.0
Describe the bug

There are 3,804,848 files and the total is 90 GB
I try to execute :

alluxio fs ls /
Getting directory status of 0 files or sub-directories may take a while.

But the fileSystemMaster directory is increased always

bash-4.4# cd -
/journal/FileSystemMaster/v1
bash-4.4# du -sh ./*
0	./_format_1595834030962
893.8M	./logs
bash-4.4# alluxio version -r
2.3.0-SNAPSHOT-b7629dcd4238efbbd15d75b1982f5520a881dc0c
bash-4.4# du -sh ./*
0	./_format_1595834030962
917.9M	./logs
bash-4.4# du -sh ./*
0	./_format_1595834030962
917.9M	./logs
bash-4.4# du -sh ./*
0	./_format_1595834030962
951.2M	./logs
bash-4.4# du -sh ./*
0	./_format_1595834030962
951.2M	./logs
bash-4.4# du -sh ./*
0	./_format_1595834030962
951.2M	./logs
bash-4.4# du -sh ./*
0	./_format_1595834030962
1005.5M	./logs

And the number of the logs are also increased

bash-4.4# ls
_format_1595834030962  logs
bash-4.4# cd logs/
bash-4.4# ls -ltr | wc -l
110
ls -ltr
total 1163168
-rw-r--r--    1 root     root      10495343 Jul 27 16:02 0x0-0x148a7
-rw-r--r--    1 root     root      10492570 Jul 27 16:02 0x148a7-0x29072
-rw-r--r--    1 root     root      10488710 Jul 27 16:02 0x29072-0x3d81b
-rw-r--r--    1 root     root      10486508 Jul 27 16:02 0x3d81b-0x51fb6

So I have 2 questions:

How to reduce the time of alluxio fs ls /
Any suggestions on Alluxio master for this secnario.

To Reproduce
Steps to reproduce the behavior (as minimally and precisely as possible)
Expected behavior
A clear and concise description of what you expected to happen.
Urgency
Describe the impact and urgency of the bug.
Additional context
Add any other context about the problem here.

we have make ls operation to avoid extra copies  by https://github.com/Alluxio/alluxio/pull/12315


Add more tasks functionality

Please test it before merging, i'm too sleepy to do it :)

Added status changes
Added subtasks

Is gud

uwu


Fix misspelling when checking cuda availbility

Hi, While I try to understand the model part, I think I found some misspelling. I think we should have to check the cuda availability for ovectors.weight

OMG thank you!!

 I really appreciate your project. This one is  the best repository I ever seen implementing skipgram with all other features!


Added support for setting up EFS for non-root Notebook user

Which issue is resolved by this Pull Request:
Resolves #267
Description of your changes:
Added uid & gid parameters for the automated script to setup EFS for non-root user.
Testing:

[x] Tested on vanilla kubeflow 1.4.1 using v1.4.1-aws-b1.0.0 on a new eks cluster.

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

@mbaijal can you look into this one?
@AlexandreBrown thanks for the contribution. Could you explain how you found the default UID and GID of this user?

After further investigation I'm not sure if this is needed for dynamic provisioning.
Regardless of the gid and uid, the access points that get automatically ignores those.
See https://github.com/kubernetes-sigs/aws-efs-csi-driver/issues/300#issuecomment-824911126
Also, I tried to test without setting it and non-root access worked for me for EFS so perhaps this PR is not needed.
Investigating.

UPDATE
After further testing and investigation (thanks to the Kubernetes community) I was able to confirm that the issue comes from the EFS CSI driver version.
Using v1.4.0 produces the expected behaviour and allows the fix from this MR to be applied for the gid and uid !
Result after setting up EFS with driver version v1.4.0 + using fix of this MR :

We can see the file system now correctly assigns the gid and uid that we passed in the efs setup script.
This completely fixes the issue where git new version complains that you don't own the directory and therefore cannot use git unless you add the directory to a safe directory whitelist etc.

Will improve doc for manual setup to mention that you need to replace the place holders for dynamic provisioning etc.

UPDATE
Sorry for the delay @surajkota @mbaijal , After further testing and investigation (thanks to the Kubernetes community) I was able to confirm that the issue comes from the EFS CSI driver version.
Using v1.4.0 produces the expected behaviour and allows the fix from this MR to be applied for the gid and uid !
Result after setting up EFS with driver version v1.4.0 + using fix of this MR :
We can see the file system now correctly assigns the gid and uid that we passed in the efs setup script. This completely fixes the issue where git new version complains that you don't own the directory and therefore cannot use git unless you add the directory to a safe directory whitelist etc.

Thanks a lot @AlexandreBrown for this effort and investigation. I will look into these changes and also test them from my side before approving this PR. Apologies for the delay on this.


chore: update CODEOWNERS

Adds CODEOWNERS for all components

The challenge with using a code owners file is that everyone listed needs write access to the repo. @dyladan created a tool that works around that limitation that we may want to consider.

The challenge with using a code owners file is that everyone listed needs write access to the repo. @dyladan created a tool that works around that limitation that we may want to consider.

I've simply done this: https://github.com/open-feature/community/pull/221
This extracts the contrib roles from the sdk roles. With the CODEOWNERS in place, this should cover our use cases. CODEOWNERS will be able to approve changes to their own modules and merge them, but not release or make wider changes without SDK maintainer approval.

The challenge with using a code owners file is that everyone listed needs write access to the repo. @dyladan created a tool that works around that limitation that we may want to consider.

I've simply done this: open-feature/community#221
This extracts the contrib roles from the sdk roles. With the CODEOWNERS in place, this should cover our use cases. CODEOWNERS will be able to approve changes to their own modules and merge them, but not release or make wider changes without SDK maintainer approval.

You're both right. The issue is that the contrib group can make changes to anything in the contrib repo or merge any PR that satisfies merge checks. If you're ok with that risk then I would recommend using the built in solution as long as it works for you. In otel we have many components with many different owners, some of whom are only occasionally present in the repo or are new to the repo so we wanted to be stricter with controlling those permissions.

The challenge with using a code owners file is that everyone listed needs write access to the repo. @dyladan created a tool that works around that limitation that we may want to consider.

I've simply done this: open-feature/community#221
This extracts the contrib roles from the sdk roles. With the CODEOWNERS in place, this should cover our use cases. CODEOWNERS will be able to approve changes to their own modules and merge them, but not release or make wider changes without SDK maintainer approval.

You're both right. The issue is that the contrib group can make changes to anything in the contrib repo or merge any PR that satisfies merge checks. If you're ok with that risk then I would recommend using the built in solution as long as it works for you. In otel we have many components with many different owners, some of whom are only occasionally present in the repo or are new to the repo so we wanted to be stricter with controlling those permissions.

I'd be open to more robust tooling if it's not a lot of overhead. This is just what we'd already talked about. I guess the risk would be a "low trust" CODEOWNER pushing/approving changes that are not carefully reviewed when a maintainer later releases them?

I'll mark as draft for now.

There are several potential risks of varying severity and likelihood, but most can be mitigated. The issue is that as the repo grows you have tens or hundreds of people with write permissions. Even if you've used branch protection rules and merge checks to lock things down as much as possible you may still run into issues like code owners merging PRs for components they don't own, closing issues that aren't resolved, et cetera. The more people have write permissions, the more likely it is something like this will happen even on accident.

There are several potential risks of varying severity and likelihood, but most can be mitigated. The issue is that as the repo grows you have tens or hundreds of people with write permissions. Even if you've used branch protection rules and merge checks to lock things down as much as possible you may still run into issues like code owners merging PRs for components they don't own, closing issues that aren't resolved, et cetera. The more people have write permissions, the more likely it is something like this will happen even on accident.

Ok I'll look at the tooling you're referring to... Assuming I can find it in the otel js contribs?

https://github.com/dyladan/component-owners

@dyladan @beeme1mr the TC has agrees to give this a go! Thanks Dan!
Please re-review.


Remove the #ifdef from the code and replace for #if

Current C++ guidelines advice to use #if and #if defined() instead of #ifdef
https://azure.github.io/azure-sdk/cpp_implementation.html#miscellaneous
Let's decide if we want to follow this guideline and update our code or if we need to update the guideline.
@RickWinter @JeffreyRichter  @ahsonkhan  @antkmsft

I'd vote for #if defined() because we can use || and && to implement complex logic.

The reasoning given in the guidelines against the use of #ifdef seems reasonable to me, so let's follow it in our code. @CaseyCarter, any concerns with it?


Update Readmes for TM and Reg consistency

Updating readme files for consistency
(TM) and ™ = ™
(R) and ® = ®

I just noticed there are a lot of whitespace changes included in these files as well.  It seems like maybe you changed all the end of line characters?  Was that intentional?


add source maps for e2e tests

https://github.com/aurelia/skeleton-navigation/issues/761

Looks good. Will merge momentarily. Thank you!
Would you mind submitting the same change for skeleton-esnext-aspnetcore?

Would you mind submitting the same change for skeleton-esnext-aspnetcore?

yea

Awesome! I'll merge it when you submit it. Thanks!


fix(trino,mysql): handle string typed decimal results

SUMMARY
Trino and MySQL return DECIMAL typed values as strings, rather than Decimal or float. This causes issues in the frontend, as most plugins expect GenericDataType.NUMERIC values to be of type number, not string. To get around this we introduce a new property column_type_mutators on BaseEngineSpec, where type-specific callbacks can be introduced to mutate the results coming back from the database. Here we implement logic on the Trino and MySQL spec to change string-based decimals to Decimal, similar to what Postgres already does automatically (I assume most connectors do the same).
The new logic can be expensive for big datasets, due to the need to iterate over the full result set. For this reason the for-loop is only triggered if there are columns present that need to be mutated.
Note, that the Trino connector will at some point start returning proper Decimals, but the feature is still deemed experimental. See this PR for details: https://github.com/trinodb/trino-python-client/pull/160
AFTER
Now the Big Number chart works as expected on Trino Decimal types (notice the value is now number in the response payload):

BEFORE
Previously Big Number chart would display "No data" due to the data type being string:

TESTING INSTRUCTIONS

ADDITIONAL INFORMATION

[x] Has associated issue: closes #18218
[ ] Required feature flags:
[ ] Changes UI
[ ] Includes DB Migration (follow approval process in SIP-59)

[ ] Migration is atomic, supports rollback & is backwards-compatible
[ ] Confirm DB migration upgrade and downgrade tested
[ ] Runtime estimates and downtime expectations provided

[ ] Introduces new feature or API
[ ] Removes existing feature or API

@villebro for Trino the Decimal type is no longer experimental per https://github.com/trinodb/trino-python-client/pull/308, i.e., now by default these types use the native Python type.

@villebro for Trino the DECIMAL type is no longer experimental per trinodb/trino-python-client#308, i.e., now by default these types use the native Python type.

Oh nice, thanks for the heads up. Let me confirm that by bumping the version 👍 I notice the original PR was changing other return types, too, have we confirmed that Superset handles them well?

Furthermore, regarding MySQL, doesn't the handling of the DECIMAL depend on how the various dialects handle this?

That may well be - let me check with the author of the issue which dialect they were using.

@villebro in https://github.com/apache/superset/pull/24069 I bumped the version of python-trino-client to the latest version somewhat recently, i.e., within the past couple of weeks.

@villebro in #24069 I bumped the version of python-trino-client to the latest version somewhat recently, i.e., within the past couple of weeks.

Oh nice, I didn't know it had this many improvements. Let me also check if those pesky non-standard timestamp strings are now replaced with proper datetimes that I had to work around in #23339

@villebro do you plan on resurrecting this PR?

@john-bodley I do, if there's still apetite for it. But as far as Trino is concerned, this doesn't seem needed anymore. So not sure if we want to introduce this additional complexity if it's not really needed.

FYI @john-bodley I removed the Trino logic as it's now redundant, but for MySQL this does seem to be needed. I'm going to follow-up with the author of the Ocient connector to see if we can migrate their custom mutator logic to this more standardized model.


expose bitemporal system time

The REST API fix for Bug 29573 sets the x-marklogic-system-time HTTP header in the response when documents are written or deleted.
The client drivers should expose the system time (when set) to the application. Maybe in the document descriptor?

Modified BiTemporalTest class to verify for system time in existing test methods.


Bump psr/log and openapi-codegen to latest version

Closes https://github.com/elastic/site-search-php/issues/20.

I think the integration tests are failing because the CircleCI project is missing the ST_API_KEY environment variable a secret, which should be a valid Swiftype API key (as they're integration tests, not unit tests).
I pushed 56c9416 to remove the usage of the void return type in our test cases as these aren't valid for PHP <7.1, and they add little benefit to the test cases themselves (but I note VSCode used to add them regardless, maybe were they came from back in 2019?).

For example in all the tests there is a notice saying the API token secret is missing from the env:
PHP Notice:  Undefined index: ST_API_KEY in /home/circleci/project/Tests/Integration/AbstractClientTestCase.php on line 31


Feature request: store the video

I have been storing and downloading the videos using https://github.com/yt-dlp/yt-dlp, and manually embeddeding them. If this plugin had an option to download them, with the metadata, it could embded the thumb (or the video itself) and work even if offline, or the original video was removed.
e.g.

That's very cool, thanks for telling me about that tool. I want to keep this plugin simple and lightweight, so I'm not going to add that sort of feature right now. There are plugins for embedding videos, and this idea might fit better with one of them.  I'd like to check it out.


Fallback to pyusb as the default backend.

This will try to use pyusb as the default USB Interface backend.
So far only selected list of OS has this parameter set.
This prevents pyOCD working on a platforms that are not on the list.
pyusb may be used as "fallback" in this case as most versatile solution.
If pyusb is not available or fails to work we will know that explicitly.
Signed-off-by: Tomasz 'CeDeROM' CEDRO<EMAIL_ADDRESS>

Not a bad idea. 😄

Also need to synchronize with #1154.

Allright need get back to this as in new venv this blocks pyocd operations :-)


Dependless undo and redo logic for componets

This code provides a lightweight solution with minimal dependencies for implementing automatic undo functionality in an editor. The key concept behind this library is to leverage Add, Changed, and RemovedComponent filters to dynamically create a chain of world state changes.
Core concept
All important world change can be describe as
pub trait EditorChange {
    fn revert(
        &self,
        world: &mut World,
        entity_remap: &HashMap<Entity, Entity>,
    ) -> Result<ChangeResult, String>;

    fn debug_text(&self) -> String;

    fn get_inverse(&self) -> Arc<dyn EditorChange + Send + Sync>;
}

These changes are then stored in the resource as Vec<Arc<dyn EditorChange>>, allowing seamless sequential undo operations through the implementation of the revert method within the EditorChange trait.
Change chain and undo/redo demonstration from space_editor crate

Example usage
Minimal example
use bevy::prelude::*;
use undo::*;

fn main() {
    let mut app = App::new()
      .add_plugins((DefaultPlugins, UndoPlugin)) //Add Undo plugin
      .auto_undo::<Name>() //register Name component in undo system
      .auto_reflected_undo::<Parent>() //example register components that not implement Clone, but implement Reflect
      .auto_reflected_undo::<Children>()
      .add_systems(Startup, setup)
      .run();
  }

fn setup(
        mut cmds : Commands) {
    cmds.spawn((
    UndoMarker, //Mark entity to be used in undo logic
    Name::new("Some name")
  ));
}

fn do_undo(
    mut events: EventWriter<UndoRedo>) {
  events.send(UndoRedo::Undo); //Will delete Name component
}

This is example from test, that restore two entities with parent-child relation after destruction
#[test]
    fn test_undo_with_remap() {
        let mut app = App::new();
        app.add_plugins(MinimalPlugins).add_plugins(UndoPlugin);
        app.add_plugins(HierarchyPlugin);

        app.auto_reflected_undo::<Parent>();
        app.auto_reflected_undo::<Children>();

        let test_id_1 = app.world.spawn(UndoMarker).id();
        let test_id_2 = app.world.spawn(UndoMarker).id();

        app.world.send_event(NewChange {
            change: Arc::new(AddedEntity { entity: test_id_1 }), //Undo can only catch delete/add/change for components, but not for entity spawn/delete. So entity spawn/delete must be added to change chain manually
        });
        app.world.send_event(NewChange {
            change: Arc::new(AddedEntity { entity: test_id_2 }),
        });

        app.update();
        app.update();

        app.world.entity_mut(test_id_1).add_child(test_id_2); //Make parent-child relation. undo logic will catch it automatically

        app.update();
        app.update();
        app.cleanup();

        app.world.entity_mut(test_id_1).despawn_recursive();
        app.world.send_event(NewChange {
            change: Arc::new(RemovedEntity { entity: test_id_1 }),
        });

        app.update();
        app.update();

        app.world.send_event(UndoRedo::Undo);

        app.update();
        app.update();
        app.update();

        assert!(app.world.get_entity(test_id_1).is_none()); //Check thats old entities despawned
        assert!(app.world.get_entity(test_id_2).is_none());
        assert_eq!(app.world.entities().len(), 2); //Check that new entities was restored

        let mut query = app.world.query::<&Children>();
        assert!(query.get_single(&app.world).is_ok()); //Check that new 2 entities has parent-child relation
    }

While the code is currently marked as a draft in the pull request, it lacks sufficient documentation and could benefit from improved code cleanliness. Despite these issues, the implemented functionality holds significant potential for future editor prototypes. I'm seeking assistance in determining the level of documentation required for the code to be accepted into the project.

I added an example, I think it's clear further how to use it

Looks good, would it be possible to notify about changes to components which do not implement undo?

Throw warnings about changes to components whose changes are hidden with OneFrameUndoIgnore? Or warn about changes in all components that are not registered via auto_reflected_undo?

I meant the latter, I'm not sure what first is about.

Looking awesome! is there a way we can help with anything? like adding more features

I meant the latter, I'm not sure what first is about 🤔

Theoretically yes. But we need to create a system to request changes to all components for all objects. That could be an expensive calculation, I think.

Looking awesome! is there a way we can help with anything? like adding more features
Thanks!

This plugin does not support automatic change logging for resources and for entity creation and destruction events. Probably some of these things should be added next.

This looks really cool, and interesting to see your implementation of this. I tried myself to implement a commands based undo system in bevy for a 3rd party editor I'm working on, but ultimately gave up due to complications arising from things like other components storing entity IDs which, if deleted and reinserted in the undo system, would then have a different entity ID. How does this implementation get around this problem?

Ugh. That's a very good question.
The proposed Undo plugin solves this problem partially. If deletion of a group of entities was detected, Undo can be used to restore the whole group, and the plugin will also set up-to-date values of all fields with Entity type in all restored components by recursive function based on Reflect trait. So, ingroup entity links will be work after Undo action.
However, if entities outside the deleted group had references to that group, they will not be restored as there is no created logic to restore Entity references. A
lthough I have an idea how to do it a bit brootforce style. For example, register all components that may have references and when recreating an entity using Undo, run through all registered components with references, through all their fields with Entity type and if there is an id with a restored Entity, replace the value with up-to-date.

You could also, perhaps, instead of actually deleting entities, delete all the components off the entity (so it's just an empty entity) and then replace all the components on an undo - that way the ID is reserved so it doesn't need to be manually replaced.
Another question I have, is how (if at all) does your system deal with the fact that modifications could happen over multiple frames, e.g. dragging the position of something using a gizmo - as you wouldn't want the undo stack filling up with every frame the thing was modified.
Complex relationships are always a challenge when building commands undo systems, the way I'm planning on implementing undo (unless I end up being able to use your system!) is just serialising the bevy world every time an undo point needs to be set - I haven't tried this approach yet though, so I don't know how well it will work!

The entity saving approach could indeed solve the problem of saving dependencies. However, if there are frequently created short-lived entities in the world ( for example particle system), it is actually possible to overflow the u32 index of the entity without deleting them. (Although it would take 111 hours for 10000 entities per second, this is still achievable).
The proposed system has two stages for dealing with time durationally extended changes. The first stage is to register the change of a component using Change. As soon as a component is changed the entity is marked with ChangeMarker. The second system waits until all marked components are no longer in the changed state. Once this happens, the system waits two more frames (so as not to register changes to the stack due to a one-frame stop) and only then creates an event that a component of such an entity has been changed.
The event is caught by the system that manages the entire Undo system stack. If multiple changes happen in a single frame or multiple frames in a row, they are logged as a single combined ManyChanges change. This allows you to undo an time extended change with a single Ctrl-Z. For example, such a combination is necessary because the change of position from parent to child is transferred with a delay of 1 frame from the Transform calculation to the PostUpdate schedule. And it also allows any other changes that have been passed down the reaction chain to be combined.

ah cool, that sounds pretty great. Your system seems really cool and far beyond anything I was able to achieve! If you can implement a way to register entities that may hold entity references which would need to be updated, then I'd love to be able to start using your system in my own editor. The entity reference thing is important for me because my editor stores a graph data structure where each entity holds references to 'next' and 'previous' entities. Without entity ref updating things would very quickly break!

@rewin123 I'm inclined to merge this; can you swap the crate name to match the new crate structure?

@rewin123 I'm inclined to merge this; can you swap the crate name to match the new crate structure?

Yeah. I just finished updating to the latest version of bevy and renamed crate in the process ^_^


[BUG] Localization errors on startup in V3.0.62

🔵 Describe the bug:
Errors on login from the CN and TW localization files.
🔵 To reproduce: (Steps to reproduce the behavior)

Enable lua error log
Login

🔵 The error:
3x GSE\Localization\ModL_zhCN.lua:8: attempt to index local 'L' (a nil value)
[string "@GSE\Localization\ModL_zhCN.lua"]:8: in main chunk
3x GSE\Localization\ModL_zhTW.lua:8: attempt to index local 'L' (a nil value)
[string "@GSE\Localization\ModL_zhTW.lua"]:8: in main chunk

🔵 **Desktop (please complete the following information):**
 - OS: [e.g. Windows 10 64bit]
 - Game Version [e.g. classic/bcc/retail (9.1.0)]

🔵 **GSE Version:**
 - Version: 3.0.62
 - Downloaded From: e.g. https://www.curseforge.com
 - game version: Retail

🔵 **Additional context:**
Looks like you used == instead of ~= for the CE and TW localization files

Found it - releasing a fix now