[go_router] Throws registry.containsKey(page) is not true in ShellRoute using rootNavigator when extendBodyBehindAppBar is true

Is there an existing issue for this?

[X] I have searched the existing issues
[X] I have read the guide to filing a bug

Steps to reproduce
Sorry, for now I have no clear steps.
I will try to come up with repro steps a little bit later.
For now this issue is for tracking purpose.
What I can see now is that the objects  and page keys are identical but hashes are not
Hashes in registry

Page hash

The workaround it to use
   final router = GoRouter.of(this);
   final RouteMatch lastMatch = GoRouter.of(this).routerDelegate.currentConfiguration.last;
   final RouteMatchList matchList =
     lastMatch is ImperativeRouteMatch ? lastMatch.matches : router.routerDelegate.currentConfiguration;
   final String location = matchList.uri.toString();

   return location;

Expected results
No errors in log.
Actual results
'package:go_router/src/state.dart': Failed assertion: line 211 pos 12: 'registry.containsKey(page)':
is not true.

The relevant error-causing widget was:
  Widget

When the exception was thrown, this was the stack:
#2      GoRouterStateRegistry._createPageRouteAssociation (package:go_router/src/state.dart:211:12)
#3      GoRouterState.of (package:go_router/src/state.dart:126:25)

Code sample
Code sample
[Paste your code here]

Screenshots or Video

Screenshots / Video demonstration
[Upload media here]

Logs
Logs
[Paste your logs here]

Flutter Doctor output
Doctor output
[✓] Flutter (Channel stable, 3.7.12, on macOS 13.3.1 22E772610a darwin-arm64, locale en-UA)
[!] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
    ✗ cmdline-tools component is missing
      Run `path/to/sdkmanager --install "cmdline-tools;latest"`
      See https://developer.android.com/studio/command-line for more details.
    ✗ Android license status unknown.
      Run `flutter doctor --android-licenses` to accept the SDK licenses.
      See https://flutter.dev/docs/get-started/install/macos#android-setup for more details.
[✓] Xcode - develop for iOS and macOS (Xcode 14.3)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2022.2)
[✓] IntelliJ IDEA Community Edition (version 2022.2.5)
[✓] VS Code (version 1.79.1)
[✓] Connected device (3 available)
[✓] HTTP Host Availability

Hi @vasilich6107, please update here with a minimal sample when you're able to make one.
Please also provide the version of go_router you're using.
Thank you

The issue is reproducible using the ShellRoute example and setting extendBodyBehindAppBar to true for the Scaffold in ScaffoldWithNavBar.  See the recording below
https://github.com/flutter/flutter/assets/88313112/7d8dae41-b1a0-4c92-aa58-262a3a5a12a1

complete sample
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';

final GlobalKey<NavigatorState> _rootNavigatorKey =
    GlobalKey<NavigatorState>(debugLabel: 'root');
final GlobalKey<NavigatorState> _shellNavigatorKey =
    GlobalKey<NavigatorState>(debugLabel: 'shell');

// This scenario demonstrates how to set up nested navigation using ShellRoute,
// which is a pattern where an additional Navigator is placed in the widget tree
// to be used instead of the root navigator. This allows deep-links to display
// pages along with other UI components such as a BottomNavigationBar.
//
// This example demonstrates how to display a route within a ShellRoute and also
// push a screen using a different navigator (such as the root Navigator) by
// providing a `parentNavigatorKey`.

void main() {
  runApp(ShellRouteExampleApp());
}

/// An example demonstrating how to use [ShellRoute]
class ShellRouteExampleApp extends StatelessWidget {
  /// Creates a [ShellRouteExampleApp]
  ShellRouteExampleApp({super.key});

  final GoRouter _router = GoRouter(
    navigatorKey: _rootNavigatorKey,
    initialLocation: '/a',
    debugLogDiagnostics: true,
    routes: <RouteBase>[
      /// Application shell
      ShellRoute(
        navigatorKey: _shellNavigatorKey,
        builder: (BuildContext context, GoRouterState state, Widget child) {
          return ScaffoldWithNavBar(child: child);
        },
        routes: <RouteBase>[
          /// The first screen to display in the bottom navigation bar.
          GoRoute(
            path: '/a',
            builder: (BuildContext context, GoRouterState state) {
              return const ScreenA();
            },
            routes: <RouteBase>[
              // The details screen to display stacked on the inner Navigator.
              // This will cover screen A but not the application shell.
              GoRoute(
                path: 'details',
                builder: (BuildContext context, GoRouterState state) {
                  return const DetailsScreen(label: 'A');
                },
              ),
            ],
          ),

          /// Displayed when the second item in the the bottom navigation bar is
          /// selected.
          GoRoute(
            path: '/b',
            builder: (BuildContext context, GoRouterState state) {
              return const ScreenB();
            },
            routes: <RouteBase>[
              /// Same as "/a/details", but displayed on the root Navigator by
              /// specifying [parentNavigatorKey]. This will cover both screen B
              /// and the application shell.
              GoRoute(
                path: 'details',
                parentNavigatorKey: _rootNavigatorKey,
                builder: (BuildContext context, GoRouterState state) {
                  return const DetailsScreen(label: 'B');
                },
              ),
            ],
          ),

          /// The third screen to display in the bottom navigation bar.
          GoRoute(
            path: '/c',
            builder: (BuildContext context, GoRouterState state) {
              return const ScreenC();
            },
            routes: <RouteBase>[
              // The details screen to display stacked on the inner Navigator.
              // This will cover screen A but not the application shell.
              GoRoute(
                path: 'details',
                builder: (BuildContext context, GoRouterState state) {
                  return const DetailsScreen(label: 'C');
                },
              ),
            ],
          ),
        ],
      ),
    ],
  );

  @override
  Widget build(BuildContext context) {
    return MaterialApp.router(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      routerConfig: _router,
    );
  }
}

final extendBodyBehindAppBar = ValueNotifier(true);

/// Builds the "shell" for the app by building a Scaffold with a
/// BottomNavigationBar, where [child] is placed in the body of the Scaffold.
class ScaffoldWithNavBar extends StatelessWidget {
  /// Constructs an [ScaffoldWithNavBar].
  const ScaffoldWithNavBar({
    required this.child,
    super.key,
  });

  /// The widget to display in the body of the Scaffold.
  /// In this sample, it is a Navigator.
  final Widget child;

  @override
  Widget build(BuildContext context) {
    return ValueListenableBuilder(
      valueListenable: extendBodyBehindAppBar,
      builder: (context, value, child2) {
        return Scaffold(
          extendBodyBehindAppBar: value,
          body: Column(
            children: [
              Text('extendBodyBehindAppBar: $value'),
              Expanded(child: child),
            ],
          ),
          bottomNavigationBar: BottomNavigationBar(
            items: const <BottomNavigationBarItem>[
              BottomNavigationBarItem(
                icon: Icon(Icons.home),
                label: 'A Screen',
              ),
              BottomNavigationBarItem(
                icon: Icon(Icons.business),
                label: 'B Screen',
              ),
              BottomNavigationBarItem(
                icon: Icon(Icons.notification_important_rounded),
                label: 'C Screen',
              ),
            ],
            currentIndex: _calculateSelectedIndex(context),
            onTap: (int idx) => _onItemTapped(idx, context),
          ),
          floatingActionButton: FloatingActionButton(onPressed: () {
            extendBodyBehindAppBar.value = !extendBodyBehindAppBar.value;
          }),
        );
      }
    );
  }

  static int _calculateSelectedIndex(BuildContext context) {
    final String location = GoRouterState.of(context).uri.toString();
    if (location.startsWith('/a')) {
      return 0;
    }
    if (location.startsWith('/b')) {
      return 1;
    }
    if (location.startsWith('/c')) {
      return 2;
    }
    return 0;
  }

  void _onItemTapped(int index, BuildContext context) {
    switch (index) {
      case 0:
        GoRouter.of(context).go('/a');
        break;
      case 1:
        GoRouter.of(context).go('/b');
        break;
      case 2:
        GoRouter.of(context).go('/c');
        break;
    }
  }
}

/// The first screen in the bottom navigation bar.
class ScreenA extends StatelessWidget {
  /// Constructs a [ScreenA] widget.
  const ScreenA({super.key});

  @override
  Widget build(BuildContext context) {
    print(GoRouterState.of(context).uri.toString());
    return Scaffold(
      appBar: AppBar(),
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: <Widget>[
            const Text('Screen A'),
            TextButton(
              onPressed: () {
                GoRouter.of(context).go('/a/details');
              },
              child: const Text('View A details'),
            ),
          ],
        ),
      ),
    );
  }
}

/// The second screen in the bottom navigation bar.
class ScreenB extends StatelessWidget {
  /// Constructs a [ScreenB] widget.
  const ScreenB({super.key});

  @override
  Widget build(BuildContext context) {
    print(GoRouterState.of(context).uri.toString());
    return Scaffold(
      appBar: AppBar(),
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: <Widget>[
            const Text('Screen B'),
            TextButton(
              onPressed: () {
                GoRouter.of(context).go('/b/details');
              },
              child: const Text('View B details'),
            ),
          ],
        ),
      ),
    );
  }
}

/// The third screen in the bottom navigation bar.
class ScreenC extends StatelessWidget {
  /// Constructs a [ScreenC] widget.
  const ScreenC({super.key});

  @override
  Widget build(BuildContext context) {
    print(GoRouterState.of(context).uri.toString());
    return Scaffold(
      appBar: AppBar(),
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: <Widget>[
            const Text('Screen C'),
            TextButton(
              onPressed: () {
                GoRouter.of(context).go('/c/details');
              },
              child: const Text('View C details'),
            ),
          ],
        ),
      ),
    );
  }
}

/// The details screen for either the A, B or C screen.
class DetailsScreen extends StatelessWidget {
  /// Constructs a [DetailsScreen].
  const DetailsScreen({
    required this.label,
    super.key,
  });

  /// The label to display in the center of the screen.
  final String label;

  @override
  Widget build(BuildContext context) {
    print(GoRouterState.of(context).uri.toString());
    return Scaffold(
      appBar: AppBar(
        title: const Text('Details Screen'),
      ),
      body: Center(
        child: Text(
          'Details for $label',
          style: Theme.of(context).textTheme.headlineMedium,
        ),
      ),
    );
  }
}

flutter doctor -v
[✓] Flutter (Channel stable, 3.10.6, on macOS 13.4.1 22F770820d darwin-arm64, locale en-GB)
    • Flutter version 3.10.6 on channel stable at /Users/nexus/dev/sdks/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision f468f3366c (13 days ago), 2023-07-12 15:19:05 -0700
    • Engine revision cdbeda788a
    • Dart version 3.0.6
    • DevTools version 2.23.1

[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
    • Android SDK at /Users/nexus/Library/Android/sdk
    • Platform android-33, build-tools 33.0.0
    • Java binary at: /Users/nexus/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/222.4459.24.2221.10121639/Android Studio.app/Contents/jbr/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 17.0.6+0-17.0.6b802.4-9586694)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 14.3)
    • Xcode at /Applications/Xcode-14.3.0.app/Contents/Developer
    • Build 14E222b
    • CocoaPods version 1.12.1

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2022.2)
    • Android Studio at /Users/nexus/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/222.4459.24.2221.10121639/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 17.0.6+0-17.0.6b802.4-9586694)

[✓] IntelliJ IDEA Ultimate Edition (version 2023.1.4)
    • IntelliJ at /Users/nexus/Applications/JetBrains Toolbox/IntelliJ IDEA Ultimate.app
    • Flutter plugin version 74.0.4
    • Dart plugin version 231.9161.14

[✓] IntelliJ IDEA Ultimate Edition (version 2023.1.3)
    • IntelliJ at /Users/nexus/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/231.9161.38/IntelliJ IDEA.app
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart

[✓] IntelliJ IDEA Ultimate Edition (version 2023.1.4)
    • IntelliJ at /Users/nexus/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/231.9225.16/IntelliJ IDEA.app
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart

[✓] VS Code (version 1.80.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.68.0

[✓] Connected device (2 available)
    • macOS (desktop) • macos  • darwin-arm64   • macOS 13.4.1 22F770820d darwin-arm64
    • Chrome (web)    • chrome • web-javascript • Google Chrome 114.0.5735.248

[✓] Network resources
    • All expected network resources are available.

• No issues found!

[!] Flutter (Channel master, 3.13.0-10.0.pre.26, on macOS 13.4.1 22F770820d darwin-arm64, locale en-GB)
    • Flutter version 3.13.0-10.0.pre.26 on channel master at /Users/nexus/dev/sdks/flutters
    ! Warning: `flutter` on your path resolves to /Users/nexus/dev/sdks/flutter/bin/flutter, which is not inside your current Flutter SDK checkout at /Users/nexus/dev/sdks/flutters. Consider adding /Users/nexus/dev/sdks/flutters/bin to the front of your path.
    ! Warning: `dart` on your path resolves to /Users/nexus/dev/sdks/flutter/bin/dart, which is not inside your current Flutter SDK checkout at /Users/nexus/dev/sdks/flutters. Consider adding /Users/nexus/dev/sdks/flutters/bin to the front of your path.
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision af08b11aaa (3 hours ago), 2023-07-26 00:12:07 -0400
    • Engine revision 43f727e474
    • Dart version 3.1.0 (build 3.1.0-348.0.dev)
    • DevTools version 2.25.0
    • If those were intentional, you can disregard the above warnings; however it is recommended to use "git" directly to perform update checks and upgrades.

[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
    • Android SDK at /Users/nexus/Library/Android/sdk
    • Platform android-33, build-tools 33.0.0
    • Java binary at: /Users/nexus/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/222.4459.24.2221.10121639/Android Studio.app/Contents/jbr/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 17.0.6+0-17.0.6b802.4-9586694)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 14.3)
    • Xcode at /Applications/Xcode-14.3.0.app/Contents/Developer
    • Build 14E222b
    • CocoaPods version 1.12.1

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2022.2)
    • Android Studio at /Users/nexus/Library/Application Support/JetBrains/Toolbox/apps/AndroidStudio/ch-0/222.4459.24.2221.10121639/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 17.0.6+0-17.0.6b802.4-9586694)

[✓] IntelliJ IDEA Ultimate Edition (version 2023.1.3)
    • IntelliJ at /Users/nexus/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/231.9161.38/IntelliJ IDEA.app
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart

[✓] IntelliJ IDEA Ultimate Edition (version 2023.1.4)
    • IntelliJ at /Users/nexus/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/231.9225.16/IntelliJ IDEA.app
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart

[✓] VS Code (version 1.80.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.68.0

[✓] Connected device (2 available)
    • macOS (desktop) • macos  • darwin-arm64   • macOS 13.4.1 22F770820d darwin-arm64
    • Chrome (web)    • chrome • web-javascript • Google Chrome 114.0.5735.248

[✓] Network resources
    • All expected network resources are available.

! Doctor found issues in 1 category.

I got the same error, and moving the GlobalKey variables from the global state fixed the issue, as suggested in this StackOverflow answer: https://stackoverflow.com/a/75101717

Got same error, when calling this in ShellRoute in getCurrentIndex
    GoRouterState.of(context).uri.toString()

[GoRouter] Full paths for routes:
             => /cupertino
             => /splash
             => /api_test
             => /login
             => /home/r
             =>   /home/r/:room
             => /home/contacts
             => /home/searchroom
             => /home/allusers
             => /home/profile

Cant even predict when it happens, and what is reason. Sometimes happens, othertimes not. It is not crashing app.
Cant put globalkeys in createGorouter function, it throws exception. I am am using GoRouterBuilder.
final GlobalKey<NavigatorState> _rootNavigatorKey = GlobalKey<NavigatorState>();
final GlobalKey<NavigatorState> _shellNavigatorKey = GlobalKey<NavigatorState>();

@immutable
class ChatScreenRoute extends GoRouteData {
  final String room;

  const ChatScreenRoute(this.room);

  static final GlobalKey<NavigatorState> $parentNavigatorKey = _rootNavigatorKey;

  static const String path = ':room';

  @override
  Widget build(BuildContext context, GoRouterState state) {
    // return ChatScreen(id: room);
    return FireChat(roomId: room);
  }
}

@TypedGoRoute<CupertinoTestRoute>(path: CupertinoTestRoute.path)
@immutable
class CupertinoTestRoute extends GoRouteData {
  static const String path = '/cupertino';

  static final GlobalKey<NavigatorState> $parentNavigatorKey = _rootNavigatorKey;

  @override
  Widget build(BuildContext context, GoRouterState state) {
    return const CupertinoTest();
  }
}

@TypedGoRoute<SplashRoute>(path: SplashRoute.path)
@immutable
class SplashRoute extends GoRouteData {
  static const String path = '/splash';

  static final GlobalKey<NavigatorState> $parentNavigatorKey = _rootNavigatorKey;

  @override
  Widget build(BuildContext context, GoRouterState state) {
    return const SplashPage();
  }
}

@TypedGoRoute<ApiTestRoute>(path: ApiTestRoute.path)
@immutable
class ApiTestRoute extends GoRouteData {
  static const String path = '/api_test';

  static final GlobalKey<NavigatorState> $parentNavigatorKey = _rootNavigatorKey;

  @override
  Widget build(BuildContext context, GoRouterState state) {
    return const SnapRest();
  }
}

@TypedGoRoute<LoginRoute>(path: LoginRoute.path)
@immutable
class LoginRoute extends GoRouteData {
  static const String path = '/login';

  static final GlobalKey<NavigatorState> $parentNavigatorKey = _rootNavigatorKey;

  @override
  Widget build(BuildContext context, GoRouterState state) {
    return const Login();
    // return const SnapAuth();
  }
}

//----------------------

@TypedShellRoute<HomeShellRoute>(
  routes: <TypedRoute<RouteData>>[
    TypedGoRoute<AllRoomsRoute>(
      path: AllRoomsRoute.path,
      routes: <TypedGoRoute<ChatScreenRoute>>[
        TypedGoRoute<ChatScreenRoute>(path: ChatScreenRoute.path),
      ],
    ),
    TypedGoRoute<FlutterContactRoute>(path: FlutterContactRoute.path),
    TypedGoRoute<SearchRoomRoute>(path: SearchRoomRoute.path),
    TypedGoRoute<AllUsersRoute>(path: AllUsersRoute.path),
    TypedGoRoute<ProfileRoute>(path: ProfileRoute.path),
  ],
)
class HomeShellRoute extends ShellRouteData {
  const HomeShellRoute();

  static final GlobalKey<NavigatorState> $navigatorKey = _shellNavigatorKey;
  static const String path = '/home';

  static List<ShellData> data = [
    ShellData(name: 'Rooms', location: AllRoomsRoute.path),
    ShellData(name: 'Contacts', location: FlutterContactRoute.path),
    ShellData(name: 'Search', location: SearchRoomRoute.path),
    ShellData(name: 'Users', location: AllUsersRoute.path),
    ShellData(name: 'Profile', location: ProfileRoute.path),
  ];

  static int getCurrentIndex(BuildContext context) {
    try {
      final String location = GoRouterState.of(context).uri.toString();
      lava('---------- ----------');
      lava('Location : $location');
      lava('---------- ----------');

      final i = data.indexWhere((element) => location.contains(element.location));

      return i == -1 ? 0 : i;
    } catch (e) {
      lava('Error : $e');
    }
    return 0;
  }

  static go(int value, BuildContext context) {
    GoRouter.of(context).go(HomeShellRoute.data[value].location);
    HomeShellRoute.getCurrentIndex(context);
  }

  @override
  Widget builder(BuildContext context, GoRouterState state, Widget navigator) {
    return SnapHome(child: navigator);
  }
}

@immutable
class AllRoomsRoute extends GoRouteData {
  static const String path = '${HomeShellRoute.path}/r';

  @override
  Widget build(BuildContext context, GoRouterState state) {
    return const AllRoomsPage();
  }
}

@immutable
class FlutterContactRoute extends GoRouteData {
  static const String path = '${HomeShellRoute.path}/contacts';

  @override
  Widget build(BuildContext context, GoRouterState state) {
    return const FlutterContactPage();
  }
}

@immutable
class SearchRoomRoute extends GoRouteData {
  static const String path = '${HomeShellRoute.path}/searchroom';

  @override
  Widget build(BuildContext context, GoRouterState state) {
    return const SearchRoomPage();
  }
}

@immutable
class AllUsersRoute extends GoRouteData {
  static const String path = '${HomeShellRoute.path}/allusers';

  @override
  Widget build(BuildContext context, GoRouterState state) {
    return const AllUsersPage();
  }
}

@immutable
class ProfileRoute extends GoRouteData {
  static const String path = '${HomeShellRoute.path}/profile';

  @override
  Widget build(BuildContext context, GoRouterState state) {
    return const ProfilePage();
  }
}

//----------------------

@Riverpod(keepAlive: true)
GoRouter goRouter(GoRouterRef ref) {
  // final authListenable = ref.watch(authProvider.notifier);
  final user = ref.watch(currentUserProvider).value;

  return GoRouter(
    navigatorKey: _rootNavigatorKey,
    // refreshListenable: AuthChanges(),
    // refreshListenable: authListenable,
    debugLogDiagnostics: true,
    initialLocation: AllRoomsRoute.path,
    routes: $appRoutes,
    errorBuilder: (context, state) {
      return AgniError(state.error);
    },
    redirect: (BuildContext context, GoRouterState state) {
      log('Redirect : $user');
      // print(
      // 'oo  : ${authState.isLoading} : ${authState.userId} : ${FirebaseAuth.instance.currentUser?.uid} : ${state.location}}');
      // if (authState.isLoading) return null;

      // final loggedIn = authState.userId != null;
      // final loggedIn = FirebaseAuth.instance.currentUser != null;
      final loggedIn = user != null;
      final isLoggingIn = state.uri.toString() == LoginRoute().location;
      // print(' oo : ${authState.isLoading} : ${authState.userId} : ${state.location}');

      if (isLoggingIn) return loggedIn ? AllRoomsRoute().location : null;
      if (!isLoggingIn) return loggedIn ? null : LoginRoute().location;

      return null;
    },
  );
}

Got same error, when calling this in ShellRoute in getCurrentIndex
    GoRouterState.of(context).uri.toString()            //It is in getCurrentIndex() function

[GoRouter] Full paths for routes:
             => /cupertino
             => /splash
             => /api_test
             => /login
             => /home/r
             =>   /home/r/:room
             => /home/contacts
             => /home/searchroom
             => /home/allusers
             => /home/profile

Cant put globalkeys in createGorouter function, it throws new exception.
Exception : allowedKeys.contains(parentKey)

I am using GoRouterBuilder, RiverPod, Firebase

@Riverpod(keepAlive: true)
Stream<User?> currentUser(CurrentUserRef ref) {
  return auth.FirebaseAuth.instance.userChanges().map(
        (auth.User? u) => u != null
            ? User(
                id: u.uid,
                nam: u.displayName,
                email: u.email,
                avatar: u.photoURL,
                phone: u.phoneNumber,
              )
            : null,
      );
}

goRouterProvider with is listening to FirebaseAuth.instance.userChanges() stream,
 every time stream updates goRouter will rebuild itself and exception will occur.

There are 5 pages in ShellRoute in tabs.
If the exception occurs then automatically tab changes to 0 index page, from which ever page it was.

final GlobalKey<NavigatorState> _rootNavigatorKey = GlobalKey<NavigatorState>();
final GlobalKey<NavigatorState> _shellNavigatorKey = GlobalKey<NavigatorState>();

@immutable
class ChatScreenRoute extends GoRouteData {
  final String room;

  const ChatScreenRoute(this.room);

  static final GlobalKey<NavigatorState> $parentNavigatorKey = _rootNavigatorKey;

  static const String path = ':room';

  @override
  Widget build(BuildContext context, GoRouterState state) {
    // return ChatScreen(id: room);
    return FireChat(roomId: room);
  }
}

@TypedGoRoute<CupertinoTestRoute>(path: CupertinoTestRoute.path)
@immutable
class CupertinoTestRoute extends GoRouteData {
  static const String path = '/cupertino';

  static final GlobalKey<NavigatorState> $parentNavigatorKey = _rootNavigatorKey;

  @override
  Widget build(BuildContext context, GoRouterState state) {
    return const CupertinoTest();
  }
}

@TypedGoRoute<SplashRoute>(path: SplashRoute.path)
@immutable
class SplashRoute extends GoRouteData {
  static const String path = '/splash';

  static final GlobalKey<NavigatorState> $parentNavigatorKey = _rootNavigatorKey;

  @override
  Widget build(BuildContext context, GoRouterState state) {
    return const SplashPage();
  }
}

@TypedGoRoute<ApiTestRoute>(path: ApiTestRoute.path)
@immutable
class ApiTestRoute extends GoRouteData {
  static const String path = '/api_test';

  static final GlobalKey<NavigatorState> $parentNavigatorKey = _rootNavigatorKey;

  @override
  Widget build(BuildContext context, GoRouterState state) {
    return const SnapRest();
  }
}

@TypedGoRoute<LoginRoute>(path: LoginRoute.path)
@immutable
class LoginRoute extends GoRouteData {
  static const String path = '/login';

  static final GlobalKey<NavigatorState> $parentNavigatorKey = _rootNavigatorKey;

  @override
  Widget build(BuildContext context, GoRouterState state) {
    return const Login();
    // return const SnapAuth();
  }
}

//----------------------

@TypedShellRoute<HomeShellRoute>(
  routes: <TypedRoute<RouteData>>[
    TypedGoRoute<AllRoomsRoute>(
      path: AllRoomsRoute.path,
      routes: <TypedGoRoute<ChatScreenRoute>>[
        TypedGoRoute<ChatScreenRoute>(path: ChatScreenRoute.path),
      ],
    ),
    TypedGoRoute<FlutterContactRoute>(path: FlutterContactRoute.path),
    TypedGoRoute<SearchRoomRoute>(path: SearchRoomRoute.path),
    TypedGoRoute<AllUsersRoute>(path: AllUsersRoute.path),
    TypedGoRoute<ProfileRoute>(path: ProfileRoute.path),
  ],
)
class HomeShellRoute extends ShellRouteData {
  const HomeShellRoute();

  static final GlobalKey<NavigatorState> $navigatorKey = _shellNavigatorKey;
  static const String path = '/home';

  static List<ShellData> data = [
    ShellData(name: 'Rooms', location: AllRoomsRoute.path),
    ShellData(name: 'Contacts', location: FlutterContactRoute.path),
    ShellData(name: 'Search', location: SearchRoomRoute.path),
    ShellData(name: 'Users', location: AllUsersRoute.path),
    ShellData(name: 'Profile', location: ProfileRoute.path),
  ];

  static int getCurrentIndex(BuildContext context) {
    try {
      final String location = GoRouterState.of(context).uri.toString();
      lava('---------- ----------');
      lava('Location : $location');
      lava('---------- ----------');

      final i = data.indexWhere((element) => location.contains(element.location));

      return i == -1 ? 0 : i;
    } catch (e) {
      lava('Error : $e');
    }
    return 0;
  }

  static go(int value, BuildContext context) {
    GoRouter.of(context).go(HomeShellRoute.data[value].location);
    HomeShellRoute.getCurrentIndex(context);
  }

  @override
  Widget builder(BuildContext context, GoRouterState state, Widget navigator) {
    return SnapHome(child: navigator);
  }
}

@immutable
class AllRoomsRoute extends GoRouteData {
  static const String path = '${HomeShellRoute.path}/r';

  @override
  Widget build(BuildContext context, GoRouterState state) {
    return const AllRoomsPage();
  }
}

@immutable
class FlutterContactRoute extends GoRouteData {
  static const String path = '${HomeShellRoute.path}/contacts';

  @override
  Widget build(BuildContext context, GoRouterState state) {
    return const FlutterContactPage();
  }
}

@immutable
class SearchRoomRoute extends GoRouteData {
  static const String path = '${HomeShellRoute.path}/searchroom';

  @override
  Widget build(BuildContext context, GoRouterState state) {
    return const SearchRoomPage();
  }
}

@immutable
class AllUsersRoute extends GoRouteData {
  static const String path = '${HomeShellRoute.path}/allusers';

  @override
  Widget build(BuildContext context, GoRouterState state) {
    return const AllUsersPage();
  }
}

@immutable
class ProfileRoute extends GoRouteData {
  static const String path = '${HomeShellRoute.path}/profile';

  @override
  Widget build(BuildContext context, GoRouterState state) {
    return const ProfilePage();
  }
}

//----------------------

@Riverpod(keepAlive: true)
GoRouter goRouter(GoRouterRef ref) {
  // final authListenable = ref.watch(authProvider.notifier);
  final user = ref.watch(currentUserProvider).value;

  return GoRouter(
    navigatorKey: _rootNavigatorKey,
    // refreshListenable: AuthChanges(),
    // refreshListenable: authListenable,
    debugLogDiagnostics: true,
    initialLocation: AllRoomsRoute.path,
    routes: $appRoutes,
    errorBuilder: (context, state) {
      return AgniError(state.error);
    },
    redirect: (BuildContext context, GoRouterState state) {
      log('Redirect : $user');
      // print(
      // 'oo  : ${authState.isLoading} : ${authState.userId} : ${FirebaseAuth.instance.currentUser?.uid} : ${state.location}}');
      // if (authState.isLoading) return null;

      // final loggedIn = authState.userId != null;
      // final loggedIn = FirebaseAuth.instance.currentUser != null;
      final loggedIn = user != null;
      final isLoggingIn = state.uri.toString() == LoginRoute().location;
      // print(' oo : ${authState.isLoading} : ${authState.userId} : ${state.location}');

      if (isLoggingIn) return loggedIn ? AllRoomsRoute().location : null;
      if (!isLoggingIn) return loggedIn ? null : LoginRoute().location;

      return null;
    },
  );
}

[log]   🌋  ROUTER    Location : /home/r
[log]   🌋  ROUTER    ---------- ----------
[log]   🌋  ROUTER    Error : 'package:go_router/src/state.dart': Failed assertion: line 204 pos 12: 'registry.containsKey(page)': is not true.
state.dart:204
[log]   🌋  SNAPAPP    Flutter Demangle : #0      BuildOwner.finalizeTree.<anonymous closure>
framework.dart:3110
#1      BuildOwner.finalizeTree
framework.dart:3135
#2      WidgetsBinding.drawFrame
binding.dart:906
#3      SchedulerBinding._invokeFrameCallback
binding.dart:1284
#4      SchedulerBinding.handleDrawFrame
binding.dart:1214
#5      _rootRun (dart:async/zone.dart:1399:13)
#6      _CustomZone.run (dart:async/zone.dart:1301:19)
#7      _CustomZone.runGuarded (dart:async/zone.dart:1209:7)

[log]   🌋  SNAPAPP    Flutter Error : ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞════════════════════════
      The following assertion was thrown while finalizing the widget
      tree:
      Duplicate GlobalKey detected in widget tree.
      The following GlobalKey was specified multiple times in the
      widget tree. This will lead to parts of the widget tree being
      truncated unexpectedly, because the second time a key is seen,
      the previous instance is moved to the new location. The key was:
      - [LabeledGlobalKey<NavigatorState>#61ca3]
      This was determined by noticing that after the widget with the
      above global key was moved out of its respective previous
      parents, those previous parents never updated during this frame,
      meaning that they either did not update at all or updated before
      the widget was moved, in either case implying that they still
      think that they should have a child with that global key.
      The specific parents that did not update after having one or more
      children forcibly removed due to GlobalKey reparenting are:
      - HeroControllerScope
        SingleChildRenderObjectElement#4345a(DEFUNCT)(no widget)
        SingleChildRenderObjectElement#a8f48(DEFUNCT)(no widget)
      A GlobalKey can only be specified on one widget at a time in the
      widget tree.

      When the exception was thrown, this was the stack:
#0      BuildOwner.finalizeTree.<anonymous closure>
framework.dart:3110
#1      BuildOwner.finalizeTree
framework.dart:3135
#2      WidgetsBinding.drawFrame
binding.dart:906
#3      SchedulerBinding._invokeFrameCallback
binding.dart:1284
#4      SchedulerBinding.handleDrawFrame
binding.dart:1214
      (elided 3 frames from dart:async)
      ═════════════════════════════════════════════════════════════════

did u find any solution ? i have the same problem when i logout

Simply do this:
 ShellRoute(
    navigatorKey: _shellNavigatorKey,

     //Remove this.
      builder: (BuildContext context, GoRouterState state, Widget child) {
      return ScaffoldWithNavBar(child: child);

   //Replace with
    pageBuilder: (BuildContext context, GoRouterState state, Widget child) { //Remove
      return NoTransitionPage(child: ScaffoldWithNavBar(child: child));
    },

 ... rest of code.

Before
@Riverpod(keepAlive: true)
GoRouter goRouter(GoRouterRef ref) {
  // final authListenable = ref.watch(authProvider.notifier);
  final user = ref.watch(currentUserProvider).value;

  return GoRouter(
    navigatorKey: _rootNavigatorKey,
    // refreshListenable: AuthChanges(),

~~~~~~~~~~~~~~~~~Same~~~~~~~~~~~~~~~~~~
}

After
@Riverpod(keepAlive: true)
GoRouter goRouter(GoRouterRef ref) {
  lava('Building Go Router ${DateTime.now()}');

  // Do not watch but listen, watch will rebuild gorouter and cause same exception
  ref.listen(routerRedirectorProvider, (prev, next) {});

  return GoRouter(
    navigatorKey: _rootNavigatorKey,
    refreshListenable: AuthChanges(),

~~~~~~~~~~~~~~~~~Same~~~~~~~~~~~~~~~~~~
}

class AuthChanges extends Listenable {
  static VoidCallback? _listener;
  static bool onboarded = false;
  static User? user;
  @override
  void addListener(VoidCallback listener) {
    _listener = listener;
  }

  @override
  void removeListener(VoidCallback listener) {
    _listener = null;
  }

  static void notify(User? u, bool bo) {
    lava('Notify Auth Changes');
    user = u;
    onboarded = bo;
    _listener?.call();
  }
}

@Riverpod(keepAlive: true)
Future routerRedirector(RouterRedirectorRef ref) async {
  final onboarded = ref.watch(onboardedProvider);
  final user = ref.watch(currentUserProvider).value;

  lava('Router Redirector {onboarded : $onboarded} {user : $user}');

  AuthChanges.notify(user, onboarded);
  return false;
}

Basically what was happening was, gorouterprovider was watching other providers and rebuilding accordingly, this causes 2 gorouters with same navigator_key, which is obviously error, two widgets can't have same key. So you have to stop watching other providers and use refreshlistenable to update gorouter.
So i create a new provider called 'routerRedirector', which in turn of gorouterprovider watches all changes and notify the 'AuthChanges' Listener, which gorouter is listening to.
go_router_riverpod
https://github.com/rrousselGit/riverpod/discussions/1357

I am currenly encounter this issue, did you solve this issue?

https://github.com/flutter/flutter/assets/57244338/2a4a3694-f642-41dd-bcc1-5d749f6075d8

class AppRouter extends RouterBase {
  AppRouter(
    this.ref, {
    required super.routeService,
  });
  final Ref ref;

  final rootRouteNavigatorKey = GlobalKey<NavigatorState>();

  @override
  late final GoRouter router = GoRouter(
    navigatorKey: rootRouteNavigatorKey,
    routes: ref.read(
      routesProvider(
          routeService: routeService!,
          parentNavigatorKey: rootRouteNavigatorKey),
    ),
    /// other codes here
    }
    ```
    ###  Main Route
    ``` dart

@riverpod
List<RouteBase> routes(RoutesRef ref,
    {required RouterServiceBase routeService,
    required GlobalKey<NavigatorState> parentNavigatorKey}) {
  final homeShellNavKey = GlobalKey<NavigatorState>();
  final chatShellNavKey = GlobalKey<NavigatorState>();
  final medLabShellNavKey = GlobalKey<NavigatorState>();
  final doctorClinicShellNavKey = GlobalKey<NavigatorState>();
  final calendarShellNavKey = GlobalKey<NavigatorState>();
  final userManagementShellNavKey = GlobalKey<NavigatorState>();

  return <RouteBase>[
    ref.read(
      videoCallRouteProvider(
        routeService: routeService,
        parentNavigatorKey: parentNavigatorKey,
      ),
    ),
    GoRoute(
      parentNavigatorKey: parentNavigatorKey,
      path: RootRoute.splash.path,
      name: RootRoute.splash.name,
      builder: (context, state) => const SplashPage(),
    ),
    GoRoute(
        parentNavigatorKey: parentNavigatorKey,
        path: RootRoute.login.path,
        name: RootRoute.login.name,
        builder: (context, state) => const LoginPage()),
    GoRoute(
      parentNavigatorKey: parentNavigatorKey,
      path: RootRoute.root.path,
      name: RootRoute.root.name,
      redirect: (context, state) {
        final isVerifiedSession = routeService.verifiedSession;
        final isLogin = routeService.login;

        if (!isVerifiedSession && !isLogin) {
          return state.namedLocation(RootRoute.login.name);
        }
        final isRoot = state.fullPath == "/";
        if (isRoot) {
          return state.namedLocation(HomeShellRoute.home.name);
        }
        return null;
      },
      routes: [
        StatefulShellRoute.indexedStack(
          parentNavigatorKey: parentNavigatorKey,
          builder: (context, state, navigationShell) {
            return SuiteShell(
              navigationShell: navigationShell,
            );
          },
          branches: [
            StatefulShellBranch(
              navigatorKey: homeShellNavKey,
              routes: [
                GoRoute(
                  parentNavigatorKey: homeShellNavKey,
                  path: HomeShellRoute.home.path,
                  name: HomeShellRoute.home.name,
                  builder: (context, state) => const LandingPage(),
                ),
              ],
            ),
            StatefulShellBranch(
              navigatorKey: chatShellNavKey,
              routes: [
                ref.read(
                  chatRouteProvider(
                    routeService: routeService,
                    parentNavigatorKey: chatShellNavKey,
                  ),
                ),
              ],
            ),
            StatefulShellBranch(
              navigatorKey: medLabShellNavKey,
              routes: [
                ref.read(
                  medLabRouteProvider(
                    routeService: routeService,
                    parentNavigatorKey: medLabShellNavKey,
                  ),
                ),
              ],
            ),
            StatefulShellBranch(
              navigatorKey: doctorClinicShellNavKey,
              routes: [
                ref.read(
                  doctorClinicsRouteProvider(
                    routeService: routeService,
                    parentNavigatorKey: doctorClinicShellNavKey,
                  ),
                ),
              ],
            ),
            StatefulShellBranch(
              navigatorKey: calendarShellNavKey,
              routes: [
                ref.read(
                  calendarRouteProvider(
                    routeService: routeService,
                    parentNavigatorKey: calendarShellNavKey,
                  ),
                ),
              ],
            ),
            StatefulShellBranch(
              navigatorKey: userManagementShellNavKey,
              routes: [
                ref.read(
                  userManagementRouteProvider(
                    routeService: routeService,
                    parentNavigatorKey: userManagementShellNavKey,
                  ),
                ),
              ],
            ),
          ],
        ),
      ],
    ),
    ref.read(
      consultationRouteProvider(
        routeService: routeService,
        parentNavigatorKey: parentNavigatorKey,
      ),
    ),
  ];
}

Doctor Routes

@riverpod
RouteBase doctorClinicsRoute(DoctorClinicsRouteRef ref,
    {required RouterServiceBase routeService,
    required GlobalKey<NavigatorState> parentNavigatorKey}) {
  final doctorClinicsNavKey = GlobalKey<NavigatorState>();
  final doctorMedlabNavKey = GlobalKey<NavigatorState>();
  final doctorClinicConsultationNavKey = GlobalKey<NavigatorState>();
  final doctorClinicSettingsNavKey = GlobalKey<NavigatorState>();
  return GoRoute(
    parentNavigatorKey: parentNavigatorKey,
    path: DoctorShellRoute.doctor.path,
    name: DoctorShellRoute.doctor.name,
    redirect: (context, state) {
      final doctorRootLocation =
          state.namedLocation(DoctorShellRoute.doctor.name);

      final isGoingToDoctorRoot = state.fullPath == doctorRootLocation;

      if (isGoingToDoctorRoot) {
        return state.namedLocation(DoctorShellRoute.doctorClinics.name);
      }
      return null;
    },
    routes: [
      StatefulShellRoute.indexedStack(
        parentNavigatorKey: parentNavigatorKey,
        builder: (context, state, child) => DoctorClinicsShell(
          navigationShell: child,
        ),
        branches: [
          StatefulShellBranch(
            navigatorKey: doctorClinicsNavKey,
            routes: [
              GoRoute(
                parentNavigatorKey: doctorClinicsNavKey,
                path: DoctorShellRoute.doctorClinics.path,
                name: DoctorShellRoute.doctorClinics.name,
                builder: (context, state) => const DoctorClinicsScreen(),
              ),
            ],
          ),
          StatefulShellBranch(
            navigatorKey: doctorMedlabNavKey,
            routes: [
              GoRoute(
                parentNavigatorKey: doctorMedlabNavKey,
                path: DoctorShellRoute.doctorMedLab.path,
                name: DoctorShellRoute.doctorMedLab.name,
                builder: (context, state) => const DoctorMedLabScreen(),
              ),
            ],
          ),
        ],
      ),
      GoRoute(
        path: DoctorShellRoute.doctorClinic.path,
        name: DoctorShellRoute.doctorClinic.name,
        redirect: (context, state) {
          final isRoot = state.fullPath == "/doctor/clinics/:clinic";

          if (isRoot) {
            return state.namedLocation(
                DoctorShellRoute.doctorClinicConsultation.name,
                pathParameters: state.pathParameters);
          }
          return null;
        },
        routes: [
          StatefulShellRoute.indexedStack(
            parentNavigatorKey: parentNavigatorKey,
            builder: (context, state, child) => DoctorClinicShell(
              navigationShell: child,
            ),
            branches: [
              StatefulShellBranch(
                navigatorKey: doctorClinicConsultationNavKey,
                routes: [
                  GoRoute(
                    parentNavigatorKey: doctorClinicConsultationNavKey,
                    path: DoctorShellRoute.doctorClinicConsultation.path,
                    name: DoctorShellRoute.doctorClinicConsultation.name,
                    builder: (context, state) => const DoctorConsultScreen(),
                  ),
                ],
              ),
              StatefulShellBranch(
                navigatorKey: doctorClinicSettingsNavKey,
                routes: [
                  GoRoute(
                    parentNavigatorKey: doctorClinicSettingsNavKey,
                    path: DoctorShellRoute.doctorClinicSettings.path,
                    name: DoctorShellRoute.doctorClinicSettings.name,
                    builder: (context, state) =>
                        const DoctorClinicSettingsScreen(),
                  ),
                ],
              ),
            ],
          ),
        ],
      ),
    ],
  );
}

As you can see here that ever routes has parentNavigatorKey, and  navigatorKey was settled because I was assume that it will fix this 'registry.containsKey(page)' but it is not, you can view the video where that error occurs on my application

Nested routes really not stable yet, I hope that the will focus on this bugs. It affects my client experience

This so frustrating to me , this kind of bugs always occurs.

Same problem here...

Updating to the latest version produced this issue for me.

Still facing this issue


evalv3: tools/flow: unexpected error, when flow task result field use as list item.

What version of CUE are you using (cue version)?

$ cue version

0.11.0

Does this issue reproduce with the latest stable release?
yes
What did you do?
$ CUE_EXPERIMENT=evalv3 cue cmd build ./x_tool.cue

-- x_tool.cue --
package x

import (
	"strings"

	"tool/exec"
	"tool/cli"
)

command: build: X = {
	#Project & {
		"main": "./cmd/x"

		"ldflags": [
			"-s", "-w",
			"-X \(X.module)/internal/version.version=v0.0.0",
		]
	}

	print: cli.Print & {
		text: strings.Join(X.ldflags, " ")
	}
}

#Project: {
	main!: string
	ldflags: [...string] | *["-s", "-w"]

	load_module: exec.Run & {
		cmd: ["echo", "path/to/x"]
		mustSucceed: true
		stdout:      string
	}

	module: strings.TrimSpace(load_module.stdout)
}

What did you expect to see?
print the joined ldflags same as evalv2 did
$ cue cmd build ./x_tool.cue
-s -w -X path/to/x/internal/version.version=v0.0.0

What did you see instead?
got unexpected error
$ CUE_EXPERIMENT=evalv3 cue cmd build ./x_tool.cue
command.build.ldflags: incompatible list lengths (2 and 3):
    ./x_tool.cue:14:14
command.build.ldflags.2: field not allowed:
    ./x_tool.cue:14:14

Quick analysis: this is not specific to flow, but an evaluation error, albeit a subtle one. It can be boiled down to this:
list: [...string] | *["a", "b"]
list: [ "a", "b", "c\(c)" ]
c: _

Eval V3 makes this a permanent error, which causes flow to fail immediately. Eval V2 makes this an "incomplete" error, which allows flow to run to ultimately satisfy the value.
Note that for
a: "c\(c)"
c: _

both evaluators report an incomplete error, so at the very least V3's behavior seems to be inconsistent here.


Mixed workload operation types must be one of {'put','get','delete','updatemeta','head'}, but got

Using current release on Ubuntu 18.04 I get this incomplete message about my mixedWorkload file:
$ ./s3tester `
-bucket one001 `
-concurrency 1 `
-endpoint "https://<IP_ADDRESS>:1443" `
-ratelimit 4 `
-requests 100 `
-size 8888 `
-workload "w.json"

2020/11/02 12:17:37 Mixed workload operation types must be one of {'put','get','delete','updatemeta','head'}, but got

That's all it says.
w.json looks good:
$ cat w.json

{
  "mixedWorkload": [
    {
      "operation": "put",
      "ratio": 50
    },
    {
      "operationType": "get",
      "ratio": 50
    }
  ]
}

Executed without -workload, it works fine.

Also tried with the invalid JSON from README.md, no luck.
$ cat w.json
'{'mixedWorkload':
    [{'operation':'put','ratio':25},
    {'operationType':'get','ratio':25},
    {'operationType':'updatemeta','ratio':25},
    {'operationType':'delete','ratio':25}]}'

$ ./s3tester -bucket one001 -concurrency 1 -endpoint "https://<IP_ADDRESS>:1443" -ratelimit 1 -requests 100 -size 2000 -workload "w.json"
panic: runtime error: integer divide by zero

$ go version
go version go1.15 linux/amd64
goroutine 1 [running]:
main.calcStats(0xc000263678, 0x1, 0xdb221)
        /home/sean/go/src/github.com/s3tester/s3tester/s3tester.go:460 +0x185
main.setupResultStat(0xc000263678)
        /home/sean/go/src/github.com/s3tester/s3tester/s3tester.go:448 +0x49
main.processTestResult(0xc000263678, 0x1, 0x7d0, 0xc000091aa0, 0x1, 0x1, 0x9db2e0, 0x3, 0x7ffc0ed43680, 0x6, ...)
        /home/sean/go/src/github.com/s3tester/s3tester/s3tester.go:435 +0x74
main.runtest(0x1, 0x7d0, 0xc000091aa0, 0x1, 0x1, 0x9db2e0, 0x3, 0x7ffc0ed43680, 0x6, 0x9ddca8, ...)
        /home/sean/go/src/github.com/s3tester/s3tester/s3tester.go:187 +0x1f8
main.main()
        /home/sean/go/src/github.com/s3tester/s3tester/s3tester.go:576 +0x9d8

i get exactly the same behavior (s3tester 2.1.0

i get exactly the same behavior (s3tester 2.1.0

Thanks for the info. I think you can try using "operationType" exclusively. Drop the first mention of "operation".

Thanks for the info. I think you can try using "operationType" exclusively. Drop the first mention of "operation".

@vmore are you saying this would work? I don't have access to S3 right now.
{
  "mixedWorkload": [
    {
      "operationType": "put",
      "ratio": 50
    },
    {
      "operationType": "get",
      "ratio": 50
    }
  ]
}

@vmore are you saying this would work? I don't have access to S3 right now.
{
  "mixedWorkload": [
    {
      "operationType": "put",
      "ratio": 50
    },
    {
      "operationType": "get",
      "ratio": 50
    }
  ]
}

Thanks Vlad,
that made the trick.
Now the mixed workload is executed.
I noticed that the command output refers to the first operation mentioned (here “put”) although using a slightly modified workload profile
[root@cbc-hadoop01 SG]# cat mixed1.json
{
"mixedWorkload":[
{
"operationType":"put",
"ratio":25
},
{
"operationType":"get",
"ratio":15
},
{
"operationType":"head",
"ratio":50
},
{
"operationType":"delete",
"ratio":10
}
]
}
    --- Total Results ---

Operation: put
Concurrency: 1024
Total number of requests: 200000
Failed requests: 0
Total elapsed time: 2m0.954621641s
Average request time: 14.76135ms
Minimum request time: 1.96ms
Maximum request time: 635.91ms
Nominal requests/s: 69370.3
Actual requests/s: 1653.5
Content throughput: 0.056769 MB/s
Average Object Size: 36
Response Time Percentiles
50     :   4.58 ms
75     :   18.97 ms
90     :   40.97 ms
95     :   54.36 ms
I suggest correcting the readme as it requires to use operation is first parameter.
Kind regards
Oliver
From: Vlad A<EMAIL_ADDRESS>Sent: Mittwoch, 20. Januar 2021 20:33
To: s3tester/s3tester<EMAIL_ADDRESS>Cc: Haensel, Oliver<EMAIL_ADDRESS>Comment<EMAIL_ADDRESS>Subject: Re: [s3tester/s3tester] Mixed workload operation types must be one of {'put','get','delete','updatemeta','head'}, but got (#24)
NetApp Security WARNING: This is an external email. Do not click links or open attachments unless you recognize the sender and know the content is safe.
Thanks for the info. I think you can try using "operationType" exclusively. Drop the first mention of "operation".
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHubhttps://github.com/s3tester/s3tester/issues/24#issuecomment-763881776, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AH7HBZCIQMMZWSLDQ2EDWVTS24VVXANCNFSM4TG4IU4A.

Thanks Vlad,
that made the trick.
Now the mixed workload is executed.
I noticed that the command output refers to the first operation mentioned (here “put”) although using a slightly modified workload profile
[root@cbc-hadoop01 SG]# cat mixed1.json
{
"mixedWorkload":[
{
"operationType":"put",
"ratio":25
},
{
"operationType":"get",
"ratio":15
},
{
"operationType":"head",
"ratio":50
},
{
"operationType":"delete",
"ratio":10
}
]
}
    --- Total Results ---

Operation: put
Concurrency: 1024
Total number of requests: 200000
Failed requests: 0
Total elapsed time: 2m0.954621641s
Average request time: 14.76135ms
Minimum request time: 1.96ms
Maximum request time: 635.91ms
Nominal requests/s: 69370.3
Actual requests/s: 1653.5
Content throughput: 0.056769 MB/s
Average Object Size: 36
Response Time Percentiles
50     :   4.58 ms
75     :   18.97 ms
90     :   40.97 ms
95     :   54.36 ms
I suggest correcting the readme as it requires to use operation is first parameter.
Kind regards
Oliver
From: Vlad A<EMAIL_ADDRESS>Sent: Mittwoch, 20. Januar 2021 20:33
To: s3tester/s3tester<EMAIL_ADDRESS>Cc: Haensel, Oliver<EMAIL_ADDRESS>Comment<EMAIL_ADDRESS>Subject: Re: [s3tester/s3tester] Mixed workload operation types must be one of {'put','get','delete','updatemeta','head'}, but got (#24)
NetApp Security WARNING: This is an external email. Do not click links or open attachments unless you recognize the sender and know the content is safe.
Thanks for the info. I think you can try using "operationType" exclusively. Drop the first mention of "operation".
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHubhttps://github.com/s3tester/s3tester/issues/24#issuecomment-763881776, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AH7HBZCIQMMZWSLDQ2EDWVTS24VVXANCNFSM4TG4IU4A.

This is now fixed by #23 . Thanks everyone.

This is now fixed by #23 . Thanks everyone.


Add method to get the content as a string

This method will be implemented by the runtime which is consuming the carbon message.

Will be merging with server connector refactoring


Add documentation to UIText widget.

Add Javadoc documentation to the UIText widget class.

Can one of the admins please verify this patch?

@GooeyHub: ok to test

Hooray Jenkins reported success with all tests good!


Configure previousArtifacts to ignore for 2.12.0-M4

Btw the failure (which is 2.12.0-M4 failing to find a Scala.js for 2.12.0-M4) was expected. Just pushing the problem forward.
Also, an alternative fix to this would be publishing a version of shapeless 2.3.0 for Scala 2.12.0-M4.

From https://travis-ci.org/milessabin/shapeless/jobs/122327604 the build for 2.12 is still broken, but it looks live you've published a version of shapeless 2.3.0 for Scala 2.12.0-M4.

Yes, I did. Sorry, I should have caught up with this PR sooner :-(


Implemented TinyBadge feature

TinyBadge is small filled cycle without a counter, smaller than a regular badge. e.g. the green dot in the screenshot below.
SetTinyBadge(int position, Color color)  takes a tab position and color value.
To remove a TinyBadge, just use RemoveBadge(int position) which works on both regular and tiny badges.

Cool thanks!

Ive also updated the nuget package + sample project + docs for this feature


Feature/cartesilike landing page

Landing page revamp
It is a separate nextjs app, which means no risk to break anything when merging.

@dimitarangelkov could you please set the URLs as environment variables?

@dimitarangelkov could you please set the URLs as environment variables?

here is the PR https://github.com/crypto-bug-hunters/bug-buster/pull/191
We still have the URLs in the codebase as fallback, in case the env var is missing


Make instance property and makeObservable() method protected

Make instance property and makeObservable() method protected instead of private
PR Checklist
Please check if your PR fulfills the following requirements:

[x] The commit message follows our guidelines: https://github.com/nestjs/nest/blob/master/CONTRIBUTING.md
[ ] Tests for the changes have been added (for bug fixes / features)
[ ] Docs have been added / updated (for bug fixes / features)

PR Type
What kind of change does this PR introduce?

[x] Bugfix
[x] Feature
[ ] Code style update (formatting, local variables)
[ ] Refactoring (no functional changes, no api changes)
[ ] Build related changes
[ ] CI related changes
[ ] Other... Please describe:

What is the current behavior?
Currently instance and makeObservable() are marked private this makes it difficult to subclass the HttpService and add additional functionality.
Issue Number: N/A
What is the new behavior?
instance and makeObservable() are marked as protected so subclasses can utilize.
Does this PR introduce a breaking change?

[ ] Yes
[x] No

Other information

LGTM


chore(terraform): Offboarded Adam S

I have no idea what I am doing. Might be the entry in tf/env/staging/remote-state/main.tf has been meant as some educational example. Not sure if it would be meant to kept with the deleted account any way

looks fine to me


The log file is erased whenever the server is restarted

Versions:
Meteor: <IP_ADDRESS>
<EMAIL_ADDRESS><EMAIL_ADDRESS>Debian, problem on the server (only tested server side yet).
This doesn't seem to happen every-time. But if I stop and restart the meteor project, the log file gets erased. Is this the expected behavior?

Hello @FernandoCesarS ,
This is expected behavior. All logs will be removed as soon as your application rebuilds or you run meteor reset. To keep your logs persistent during development use an absolute path outside of your project folder, e.g. /logs directory. Make sure selected directory is writable by node/meteor's process owner.

@FernandoCesarS added this info to the FAQ. Thank you for contribution.
Feel free to reopen it in case if the issue is still persists on your end.
Please, support this project by:

Star on GitHub
Star on Atmosphere
Check other packages we have made

Thanks for your answer and updated the FAQ. I'm not an expert in Meteor, but running Meteor apps in production environment sometimes implies restarting a container in case of a crash. Deleting the log in that situation would make it more difficult to identify the problem.

@FernandoCesarS read this docs where we explained how to create persistent storage on containers.
Let me know wdyt


Add tests for the createWants RPC port

Ooops, this needs some code that is in one of the other pull requests.


bug

namespace App\Admin\Controllers;

use App\Models\Page;
use Encore\Admin\Form;
use Encore\Admin\Grid;
use Encore\Admin\Facades\Admin;
use Encore\Admin\Layout\Content;
use App\Http\Controllers\Controller;
use Encore\Admin\Controllers\ModelForm;

use Encore\Admin\Auth\Permission;

class PageController extends Controller {

    use ModelForm;

    public function __construct() {
        // Check permissions, the role of the user permissions can be accessed
        Permission::check('user');

        // 'editor' and 'developer' role can be accessed
        Permission::allow(['editor', 'developer']);

        // 'editor' and 'developer' role are denied
        Permission::deny(['editor', 'developer']);
    }

...

}

1/1
FatalThrowableError in Permission.php line 90:
Call to a member function isRole() on null
in Permission.php line 90
at Permission::isAdministrator() in Permission.php line 20
at Permission::check('user') in EntregaController.php line 21
at EntregaController->__construct()
at ReflectionClass->newInstanceArgs(array()) in Container.php line 752
at Container->build('App\Admin\Controllers\EntregaController') in Container.php line 598
at Container->resolve('App\Admin\Controllers\EntregaController') in Container.php line 567
at Container->make('App\Admin\Controllers\EntregaController') in Application.php line 708
at Application->make('App\Admin\Controllers\EntregaController') in Route.php line 217
at Route->getController() in Route.php line 736
at Route->controllerMiddleware() in Route.php line 697
at Route->gatherMiddleware() in Router.php line 572
at Router->gatherRouteMiddleware(object(Route)) in Router.php line 552
at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 520
at Router->dispatchToRoute(object(Request)) in Router.php line 498
at Router->dispatch(object(Request)) in Kernel.php line 174
at Kernel->Illuminate\Foundation\Http{closure}(object(Request)) in Pipeline.php line 30
at Pipeline->Illuminate\Routing{closure}(object(Request)) in TransformsRequest.php line 30
at TransformsRequest->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing{closure}(object(Request)) in TransformsRequest.php line 30
at TransformsRequest->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing{closure}(object(Request)) in ValidatePostSize.php line 27
at ValidatePostSize->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing{closure}(object(Request)) in CheckForMaintenanceMode.php line 46
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing{closure}(object(Request)) in Pipeline.php line 102
at Pipeline->then(object(Closure)) in Kernel.php line 149
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 116
at Kernel->handle(object(Request)) in index.php line 55

In laravel 5.3+ use following code instead:
    public function __construct() {

        $this->middleware(function () {
            Permission::check('user');
        });
    }


Testing the CLA launcher.

 Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.

👍


Add more tests

Coverage increased (+2.1%) to 83.624% when pulling 63e2f1b46b56a02d365965786c4096b857641b30 on dalessr:branch_last_version into d3e606e2405a59d84e20e65dd1903798d9f9e1ef on CS2103AUG2017-W09-B3:master.


CU-85zrraxy4_config-cors-to-eneable-credentials_leonardo-salas

added credentials to the cors settings.

Task linked: CU-85zrraxy4 config cors to eneable credentials


Please add a rainbow map

It's very nice when themperature is cool show "blue", when is spring "green" and when become summer "yellow" or "red"... a rainbow map like this can be much more fine:
https://blendcommerce.com/blogs/shopify/heatmaps-how-a-game-of-hot-and-cold-can-help-grow-your-website

That's a fairly classic color scale indeed. I have a backlog/wishlist of stuff to add, some additional scales are a part of that.

That's a fairly classic color scale indeed. I have a backlog/wishlist of stuff to add, some additional scales are a part of that.

maybe the best thing is to expose a sort of scales.json in which users can add custom scales....

I close this in favour of absolute scale (i opened an issue on that problem).


[SPARK-44391][SQL] Check the number of argument types in InvokeLike

What changes were proposed in this pull request?
In the PR, I propose to check the number of argument types in the InvokeLike expressions. If the input types are provided, the number of types should be exactly the same as the number of argument expressions.
Why are the changes needed?

This PR checks the contract described in the comment explicitly:
https://github.com/apache/spark/blob/d9248e83bbb3af49333608bebe7149b1aaeca738/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/objects/objects.scala#L247

that can prevent the errors of expression implementations, and improve code maintainability.

Also it fixes the issue in the UrlEncode and UrlDecode.

Does this PR introduce any user-facing change?
No.
How was this patch tested?
By running the related tests:
$ build/sbt "test:testOnly *UrlFunctionsSuite"
$ build/sbt "test:testOnly *DataSourceV2FunctionSuite"

how far shall we backport it?

how far shall we backport it?

To 3.4, but I expects some conflicts in branch-3.4. Let's merge this to master, and I'll open a separate PR with a backport.

All GAs passed. Merging to master. Thank you, @cloud-fan for review.


Extension causes high cpu load

Issue Type: Performance
Extension Name: LiveServer
Extension Version: 5.5.1
OS Version: Windows_NT x64 10.0.17763
VSCode version: 1.31.1

:warning: Make sure to attach this file from your home-directory: C:\Users\Anonymous\ritwickdey.LiveServer-unresponsive.cpuprofile.txt :warning:
Find more details here: https://github.com/Microsoft/vscode/wiki/Explain:-extension-causes-high-cpu-load

Hello. few questions!!,
When you're getting this issue? after load of vscode or after clicking to Go Live ?
Is this happen every-time ? or random ?
Please reply here https://github.com/ritwickdey/vscode-live-server/issues/278
Duplicate of https://github.com/ritwickdey/vscode-live-server/issues/278

[Note: This issue is closed by a javascript code (written by me).
https://gist.github.com/ritwickdey/36682dabe4a992c57e4562c935bfbbdd ]

Thank You.


Fetch web dependencies from cdn for offline use

Hi, It's a small change, to pre-fetch all the files from cdn, and use them offline.
It would make it possible to use the docker in offline environment.

Hello @ferreus ,
Thank you very much for your interest in etcd-viewer.
I understand that there are isolated environments where http clients (browsers) do not have internet access to retrieve the css and js resources.
I understand that your approach is to add the resources to the source tree, but I would prefer to use webjars to include the external resources into the project. Thus avoid having the resources in the source tree and exclude them in gitignore.
Please check the latest commit and verify whether the resources are available offline.
In addition by adding a system property USE_MAXCDN with value "true" (-DUSE_MAXCDN=true) then resources are served through maxcdn.
Kind regards,
Nikos

Thanks for quick response,
I have verified the last commit, and the resources are available offline.
Thank you very much for the project and this specific fix.
Kind regards,
Vladimir
On Fri, Dec 9, 2016 at 4:00 PM, Nikos Fountas<EMAIL_ADDRESS>wrote:

Hello @ferreus https://github.com/ferreus ,
Thank you very much for your interest in etcd-viewer.
I understand that there are isolated environments where http clients
(browsers) do not have internet access to retrieve the css and js resources.
I understand that your approach is to add the resources to the source
tree, but I would prefer to use webjars to include the external resources
into the project. Thus avoid having the resources in the source tree and
exclude them in gitignore.
Please check the latest commit and verify whether the resources are
available offline.
In addition by adding a system property USE_MAXCDN with value "true"
(-DUSE_MAXCDN=true) then resources are served through maxcdn.
Kind regards,
Nikos
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/nikfoundas/etcd-viewer/pull/10#issuecomment-266020196,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAMmrKAjPIBZeMDS7vSd9qvjiBwbqssJks5rGV7tgaJpZM4LH1uW
.

--
If you can't explain it simply, you don't understand it well enough. -
Albert Einstein


Update jboss-test-audit version and remove some @SpecAssertions annot…

…ations.

Can one of the admins add this person to the trusted builders? (reply with: "add to whitelist" or "ok to test")

ok to test

@tremes merged, thanks! And a big thanks for taking the time to remove the annotations.

Np. There are still some...I can open new PR later.

I think we will change them along the road. No biggie!


Appstudio update test-component-pac-vbtw

Pipelines as Code configuration proposal
To start the PipelineRun, add a new comment with content /ok-to-test
For more detailed information about running a PipelineRun, please refer to Pipelines as Code documentation Running the PipelineRun
To customize the proposed PipelineRuns after merge, please refer to Build Pipeline customization

Pipelines as Code CI/test-component-pac-vbtw-on-pull-request has successfully validated your commit.

StatusDurationName

✅ Succeeded
7 seconds
init

✅ Succeeded
15 seconds
clone-repository

✅ Succeeded
38 seconds
build-container

✅ Succeeded
21 seconds
inspect-image

✅ Succeeded
19 seconds
deprecated-base-image-check

✅ Succeeded
1 minute
clamav-scan

✅ Succeeded
12 seconds
clair-scan

✅ Succeeded
12 seconds
sbom-json-check

✅ Succeeded
13 seconds
label-check

✅ Succeeded
7 seconds
show-sbom

✅ Succeeded
10 seconds
show-summary

Pipelines as Code CI/test-component-pac-vbtw-on-pull-request has successfully validated your commit.

StatusDurationName

✅ Succeeded
7 seconds
init

✅ Succeeded
16 seconds
clone-repository

✅ Succeeded
38 seconds
build-container

✅ Succeeded
16 seconds
inspect-image

✅ Succeeded
14 seconds
deprecated-base-image-check

✅ Succeeded
1 minute
clamav-scan

✅ Succeeded
11 seconds
clair-scan

✅ Succeeded
10 seconds
sbom-json-check

✅ Succeeded
15 seconds
label-check

✅ Succeeded
9 seconds
show-summary

✅ Succeeded
6 seconds
show-sbom


[11.0 stable] Enhance LinuxCollector to support detecting multiple app VIF IPs

Application VIF may have multiple IP address assigned. They can be either assigned directly on the same interface, or used on separate VLAN sub-interfaces which share the parent interface MAC address.
LinuxCollector should detect and publish all of them, instead of flapping between them and generating many IP address change notifications, which trigger a flood of NI and App info messages published to the controller.
For DHCP assigned IP addresses, we use lease time to determine if a previously detected IP address is still valid. For statically assigned IP, we expect to see at least one associated ARP packet every 10 minutes. Otherwise, we consider the IP address to be removed or simply not used anymore.
This commit also enhances LinuxCollector to support enabling or disabling ARP snooping in runtime, without requiring to recreate all switch network instances or rebooting device.
Signed-off-by: Milan Lenco<EMAIL_ADDRESS>(cherry picked from commit 5b2acf4)

The Eden test results look suspicious, I would say.

The Eden test results look suspicious, I would say.

Eden tests are very broken on 11.0 Problem is that the patches I did for Eden are likely not compatible with EVE 11.0 so I cannot bring them to this branch (but I can try just as an experiment).

So, the only way to test the PR with any smoke tests is by ztests?
I just want to have at least some guarantee that a PR does not break anything... I know it's very unlikely in this case, but still...

The Eden test results look suspicious, I would say.

Eden tests are very broken on 11.0 Problem is that the patches I did for Eden are likely not compatible with EVE 11.0 so I cannot bring them to this branch (but I can try just as an experiment).

So, the only way to test the PR with any smoke tests is by ztests? I just want to have at least some guarantee that a PR does not break anything... I know it's very unlikely in this case, but still...

OK, let's try this: https://github.com/lf-edge/eve/pull/4260
If test results are better, I can then rebase this PR.

As far as we do not have reliable Eden tests for this PR... should we just believe the PR is fine? )
Runnign ztests...

Ran manual ztests overnight to verify there are no regressions.


Replace incorrect "burmilla"s back to "rancher"s

Hi, I recently heavily searched docs and still it has so many incorrect "burmilla" exists.
It was a bit frustrating and  I tried to fix those step by step.
I hope I've eliminated all incorrect "burmilla"s.
Could you confirm these commits?
p.s.
I think we can list up unmodified "burmilla"s remains in the repo with the command below.
$ egrep --color=always 'burmilla[^/o]' **/*.md | egrep -v '(tar\.gz|github)'

LGTM, thanks

I think https://github.com/burmilla/os/issues/179 can be closed now.
(I also think some non-doc related tickets of burmilla/os can be closed too...)


Add EMR screenshot, clean up folders

Closes #27
Add EMR setup screenshot - cleaned images into folder structure by milestone.

milestone 2 has not yet been graded, I'm concerned about this change... how do you folks think?

@Andrew-Tan Thanks for raising that point, we can leave a comment on the canvas submission maybe that signals this change?

Hey @Andrew-Tan @elabandari, good question. I actually pasted as embedded image into our milestone 2 notebook so it can render without those images in the exact folder structure.
I think we should be good to change the folders but let me know if you see any other issue with this

@dbandrews, shouldn't be a problem then!

Yep. Seems like they've just reviewed milestone 2 and provided feedbacks.


Add Iterator::assert() that raises an exception if the given predicate does not apply to an item

Add Iterator::assert() that raises an exception if the given predicate does not apply to an item.

Maybe add assertSome and assertAll to check that all items match or that there exists a matching item? Although assertSome would probably not be as useful.

Thanks for the review! ::assertAll() would be like the current ::assert() behavior in this PR (bail as soon as one item is found that does not meet the conditions). Do we know use cases for::assertSome()/::assertAny()? I'm trying to come up with one where we'd want to bail out of processing an iterable if not at least one item meets a condition (meaning n-1 can still NOT meet the condition). This is keeping in mind that assertions are more a development tool than a simple condition check: use them only when you really want things to fail.

Also note that my original use case for this PR was to ensure an iterable is a proper list or map (all keys and values share the same type), so I'll have to take some time to try and come up with ::assertSome() use cases as well :)

While biking from the office just now I realized the iterator behavior of this method is identical to that of ::each(): perform an action with possible side effects for each item, without producing a result (that's why they both provide a fluent interface for daisy chaining). From this perspective we've got the same dilemma as with https://github.com/bartfeenstra/fu-php/issues/61: do we want to provide such shortcut methods on our primary interface, if they can easily be composed by two other methods as well? Assertions with ::each() would look like this:
$iterator->each(function ($value) {
  assert($value instanceof Foo);
})->map(...);

versus
$iterator->assert(P\instance_of([Foo::class])->map(...);

Using ::each() we have maximum flexibility. ::assert() is shorter and easy to read, but limited to using predicates (which contribute to the fact it's shorter) and it can only throw exceptions of a single type, meaning it's more useful for debugging, and less for runtime checks where exceptions are used to catch recoverable problems, as API-specific exceptions cannot be thrown.

https://github.com/bartfeenstra/fu-php/pull/68#issuecomment-330353701 proposes ::assert() takes an optional second parameter which is an operation (like ::each() takes) and throws the exception.


[RFC] Support tabs directory

How do you envision this feature/change to look/work like?
Anything placed in tabs gets turned into a react-mounted (or svelte/vue etc...) page for the extension.
Thus:
tabs/hello.tsx -> tabs/hello.html + hello.hash.js

What is the purpose of this change/feature? Why?
https://discord.com/channels/946290204443025438/1015686988055191623/1015980676488630373
(OPTIONAL) Example implementations
No response
(OPTIONAL) Contact Details
No response
Verify canary release

[X] I verified that the issue exists in plasmo canary release

Code of Conduct

[X] I agree to follow this project's Code of Conduct
[X] I checked the current issues for duplicate problems.

To implement this feature, we will likely use a combination of the manifest transformer, and the namer:

Our precompiler adds a tabs directory with a tab//[index.html, index.ts]
The transformer pick up the items in this tabs, and add them into the bundler with a metadata specifying they are "tabs"
The namer pick up the metadata, and ensure they are copied to the right location in the bundle (tabs//etc..)


Request: prefix template blocks with two_factor_

As it's commonplace for projects to use the name content for blocks within the project, two_factor's use of the same generic name makes it difficult to override _base.html for style without effectively having to override everything.
Expected Behaviour
Ideally, one should be able to create a my_app/two_factor/_base.html with contents like the following:
{% extends 'my-base.html' %}

{% block content %}

2fa Stuffs</1>

    {% block two_factor_content %}{% endblock %}

{% endblock %}

Current Behavior
Django doesn't like it when you nest blocks:
'block' tag with name 'content' appears more than once

Possible Solution
Rename all references from {% block content %} to {% block two_factor_content %}.
Context
I'm looking at writing a hackish template tag that sort of side-loads the template and writes the output so I can do this:
{% extends 'my-base.html' %}

{% block content %}

2fa Stuffs</1>

    {% two_factor_hack 'login.html' %}

{% endblock %}

Not ideal, but I'd rather do this than copy/paste this project's templates into mine and hope to keep them in sync between updates.
Your Environment

Python version: 3.6
Django version: 1.11
django-otp version: 0.4.2
django-two-factor-auth version: 1.7.0

This would be a useful change for me as well.
I currently have a account/base.html template that provides some common markup for all of my account pages. My individual account pages put their distinct content into an account_content block, and then the account/base.html templates put all of the account_content content into a content block which is then put into my main site base.html template.
Since the two_factor app uses the block name content, that nice hierarchical separation is bypassed and the two_factor content goes directly into my main site's base.html template without the proper common account_content markup surrounding it.


How can this operator support olm?

I want to integrate this operator into the catalog in openshift

Go for it! So far you are the fist one asking. Are you working for redhat?


[iOS] DevOps build failing with an error MT2101: Can't resolve the reference 'System.String System.String::Trim(System.Char)'

Description
The DevOps build definition is failing to build the project with the latest pre-release of the FFImageLoading (<IP_ADDRESS>0-pre). it might be that the issue is more Xamarin.Forms related than FFImageLoading, so feel free to pass that onto them if necessary.
The VS 2019 (16.0.0) debug build works perfectly fine.
The reason behind using the pre-release version of the library is this: https://github.com/luberda-molinet/FFImageLoading/issues/1154
Steps to Reproduce
Expected Behavior
Build finishes successfully, without any errors
Actual Behavior
Build failes with an error:

MTOUCH : error MT2101: Can't resolve the reference 'System.String System.String::Trim(System.Char)', referenced from the method 'System.Threading.Tasks.Task`1<FFImageLoading.Work.DataResolverResult> FFImageLoading.DataResolvers.BundleDataResolver::ResolveFromBundlesAsync(System.String,System.String,FFImageLoading.Work.TaskParameter,System.Threading.CancellationToken)' in 'mscorlib, Version=<IP_ADDRESS>, Culture=neutral, PublicKeyToken=7cec85d7bea7798e'. [<path_to_the_project>.iOS.csproj]

Basic Information

Version with issue: <IP_ADDRESS>0-pre
Last known good version: <IP_ADDRESS>9
Platform: iOS

Screenshots
Reproduction Link / Code

Hi.. I am also getting the same error...

ha, I am getting into the same trouble

It looks similar to this: https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/issues/745
Possible workaround: https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/issues/852#issuecomment-461318277

@daniel-luberda  - I am getting this error while taking a debug build and not during DevOps...

@xhashimks Yes, but it's still Mono/Xamarin/Visual Studio issue

@daniel-luberda - Not sure on that.. because when I remove the FFImageLoading dependency, the iOS build goes fine... only error occurs when this is added.

I am also getting this error, does appear be FFImageLoading causing this.. :(

@Ruddy2007  @xhashimks  I have the same problem in the Azure Pipeline. If you select the sdk version of xamarin 5_18_1, the problem will disappear. I leave the link to change the version of the sdk of xamarin in Azure Pipeline: https://go.microsoft.com/fwlink/?linkid=871629

@RaFaGG That did the trick, cheers for the reply.

@RaFaGG that works well,thanks a lot

@Ruddy2007 @xhashimks I have the same problem in the Azure Pipeline. If you select the sdk version of xamarin 5_18_1, the problem will disappear. I leave the link to change the version of the sdk of xamarin in Azure Pipeline: https://go.microsoft.com/fwlink/?linkid=871629

Can confirm that we too saw this error message come by on our DevOps build and @RaFaGG's solution has worked for us too. That is:

We created a new mono.version-variable, which value was set to 5_18_1.
Added a Command Line task to our iOS build phase.
Included this as the command line script to execute: /bin/bash -c "sudo $AGENT_HOMEDIRECTORY/scripts/select-xamarin-sdk.sh $(mono.version)".

Lets also not forget to give credit where credit's due: thanks @RaFaGG! Works like a charm!

Thanks a lot @RaFaGG, your solution works like a charm!

Awesome solution, worked for me too..Thanks @RaFaGG for the steps..

Worked for me too


fix(version): update ngx-login-client to 1.1.10

@fabric8cd fabric8/fabric8-ui:SNAPSHOT-PR-2269-1 is deployed and available for testing at https://fabric8-ui-fabric8-ui-pr-2269-fabric8-planner.badger.fabric8.io


Catch potential decimal conversion errors in group calculation

Pull Request Test Coverage Report for Build<PHONE_NUMBER>
Details

5 of 5 (100.0%)  changed or added relevant lines in 1 file are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 99.95%

Totals

Change from base Build<PHONE_NUMBER>:
0.0%

Covered Lines:
4038

Relevant Lines:
4040

💛  - Coveralls


client side describe was calling describe_keyspaces wrongly

seem like in 9ccfa7e29d1372262c2980d78fb35e22b85e039a by mistake we were calling describe_keyspaces and not describe_keyspaces_client
hence casuing the following error:
cqlsh> DESCRIBE KEYSPACES
Shell.describe_keyspaces() missing 1 required positional argument: 'rows'

When https://github.com/scylladb/scylladb/pull/11106 would be done, maybe we could ditch all of this client side code...