Getting _InternalLinkedHashMap cast error only when context has been restored

I'm trying to allow my pages to be restorable, even though some arguments are passed to those pages.
Steps to Reproduce

Execute code sample
Navigate normally and tap in button with the corresponding action
Put app in background (with Don't Keep Activities enabled in Developer Options) and bring it back

Expected results:
By what is shown on the sample code I'd expect the code to run in the same way from Navigation and from Restorations. Which doesn't seem to happen, even though the debugger data shows up as being exactly the same.
Actual results:
When I run the sample code for the first time (not from restoration, but by navigation) I get NO errors and my page loads normally.
When I put the app in the background, as mentioned above, and bring it back (forcing a restoration) I get a "_InternalLinkedHashMap cast" error. According to the debugger data there should be no problems when casting those arguments.

Code sample and Error images

child: MaterialApp(
  restorationScopeId: 'root_app',
  onGenerateRoute: Routes.buildRoutes(),
  title: 'My App',
  theme: ThemeData(primarySwatch: Colors.teal),
)

static RouteFactory buildRoutes() {
  return (settings) {
    final arguments = settings.arguments != null ? settings.arguments as Map<String, dynamic> : <String, dynamic>{};
    Widget _view;

    var route = findRoute(settings.name);
    switch (route) {
      case Routes.menu:
        _view = const Menu();
        break;
      case Routes.selection:
        _view = const Page2(arguments);
        break;
      default:
        return null;
    }

    return MaterialPageRoute(
        settings: settings,
        builder: (context) => RestorationScope(restorationId: route.restorationId, child: _view),
    );
  };
}

onSuccess: (List<Map<String, dynamic>> evalData) =>
  Navigator.restorablePushReplacementNamed(context, widget._route.value, arguments: <String, dynamic>{'data': evalData}),

Logs
From my actual code:
PS E:\Projetos\Flutter\ludo_simulado_2022> flutter run -t lib/app_main.dart
Using hardware rendering with device Android SDK built for x86. If you notice graphics artifacts, consider enabling software rendering with "--enable-software-rendering".
Launching lib/app_main.dart on Android SDK built for x86 in debug mode...
Running Gradle task 'assembleDebug'...                             18,1s
√  Built build\app\outputs\flutter-apk\app-debug.apk.
D/EGL_emulation(23111): eglMakeCurrent: 0xa38c3620: ver 3 0 (tinfo 0x8f58e400)
D/EGL_emulation(23111): eglMakeCurrent: 0xa38c3620: ver 3 0 (tinfo 0x8f58e400)
Syncing files to device Android SDK built for x86...               240ms

Flutter run key commands.
r Hot reload.
R Hot restart.
h List all available interactive commands.
d Detach (terminate "flutter run" but leave application running).
c Clear the screen
q Quit (terminate the application on the device).

 Running with sound null safety

An Observatory debugger and profiler on Android SDK built for x86 is available at: http://<IP_ADDRESS>:54106/gOsOG6QJJLs=/
I/zygote  (23111): Do partial code cache collection, code=14KB, data=20KB
I/zygote  (23111): After code cache collection, code=14KB, data=20KB
I/zygote  (23111): Increasing code cache capacity to 128KB
D/skia    (23111): Shader compilation error
D/skia    (23111): ------------------------
D/skia    (23111): Errors:
D/skia    (23111): link failed but did not provide an info log
D/skia    (23111): Shader compilation error
D/skia    (23111): ------------------------
D/skia    (23111): Errors:
D/skia    (23111): link failed but did not provide an info log
D/skia    (23111): Shader compilation error
D/skia    (23111): ------------------------
D/skia    (23111): Errors:
D/skia    (23111): link failed but did not provide an info log
D/skia    (23111): Shader compilation error
D/skia    (23111): ------------------------
D/skia    (23111): Errors:
D/skia    (23111): link failed but did not provide an info log
D/skia    (23111): Shader compilation error
D/skia    (23111): ------------------------
D/skia    (23111): Errors:
D/skia    (23111): link failed but did not provide an info log
D/EGL_emulation(23111): eglMakeCurrent: 0xa38c3500: ver 3 0 (tinfo 0x8cd0f5f0)
The Flutter DevTools debugger and profiler on Android SDK built for x86 is available at: http://<IP_ADDRESS>:9101?uri=http://<IP_ADDRESS>:54106/gOsOG6QJJLs=/
D/skia    (23111): Shader compilation error
D/skia    (23111): ------------------------
D/skia    (23111): Errors:
D/skia    (23111): link failed but did not provide an info log
D/skia    (23111): Shader compilation error
D/skia    (23111): ------------------------
D/skia    (23111): Errors:
D/skia    (23111): link failed but did not provide an info log
D/skia    (23111): Shader compilation error
D/skia    (23111): ------------------------
D/skia    (23111): Errors:
D/skia    (23111): link failed but did not provide an info log
D/skia    (23111): Shader compilation error
D/skia    (23111): ------------------------
D/skia    (23111): Errors:
D/skia    (23111): link failed but did not provide an info log
D/skia    (23111): Shader compilation error
D/skia    (23111): ------------------------
D/skia    (23111): Errors:
D/skia    (23111): link failed but did not provide an info log
D/skia    (23111): Shader compilation error
D/skia    (23111): ------------------------
D/skia    (23111): Errors:
D/skia    (23111): link failed but did not provide an info log
D/skia    (23111): Shader compilation error
D/skia    (23111): ------------------------
D/skia    (23111): Errors:
D/skia    (23111): link failed but did not provide an info log
D/skia    (23111): Shader compilation error
D/skia    (23111): ------------------------
D/skia    (23111): Errors:
D/skia    (23111): link failed but did not provide an info log
D/skia    (23111): Shader compilation error
D/skia    (23111): ------------------------
D/skia    (23111): Errors:
D/skia    (23111): link failed but did not provide an info log
D/skia    (23111): Shader compilation error
D/skia    (23111): ------------------------
D/skia    (23111): Errors:
D/skia    (23111): link failed but did not provide an info log
D/skia    (23111): Shader compilation error
D/skia    (23111): ------------------------
D/skia    (23111): Errors:
D/skia    (23111): link failed but did not provide an info log
D/skia    (23111): Shader compilation error
D/skia    (23111): ------------------------
D/skia    (23111): Errors:
D/skia    (23111): link failed but did not provide an info log
D/skia    (23111): Shader compilation error
D/skia    (23111): ------------------------
D/skia    (23111): Errors:
D/skia    (23111): link failed but did not provide an info log
D/EGL_emulation(23111): eglMakeCurrent: 0xa38c3500: ver 3 0 (tinfo 0x8cd0f5f0)
E/libEGL  (23111): call to OpenGL ES API with no current context (logged once per thread)
D/EGL_emulation(23111): eglMakeCurrent: 0xa38c3620: ver 3 0 (tinfo 0x8f58e400)
D/EGL_emulation(23111): eglCreateContext: 0xacee3080: maj 3 min 0 rcv 3
D/EGL_emulation(23111): eglCreateContext: 0xacee30e0: maj 3 min 0 rcv 3
D/        (23111): HostConnection::get() New Host Connection established 0xa5298480, tid 23163
D/EGL_emulation(23111): eglMakeCurrent: 0xacee30e0: ver 3 0 (tinfo 0xa5283520)
D/PathProviderPlugin(23111): Use TaskQueues.
I/zygote  (23111): Do partial code cache collection, code=61KB, data=54KB
I/zygote  (23111): After code cache collection, code=61KB, data=54KB
I/zygote  (23111): Increasing code cache capacity to 256KB
D/        (23111): HostConnection::get() New Host Connection established 0x8f5a8180, tid 23162
D/EGL_emulation(23111): eglMakeCurrent: 0xacee3080: ver 3 0 (tinfo 0xa4fd8fc0)
D/EGL_emulation(23111): eglCreateContext: 0xacee37a0: maj 3 min 0 rcv 3
D/EGL_emulation(23111): eglMakeCurrent: 0xacee37a0: ver 3 0 (tinfo 0xa4fd8fc0)
D/EGL_emulation(23111): eglMakeCurrent: 0xacee3080: ver 3 0 (tinfo 0xa4fd8fc0)
D/EGL_emulation(23111): eglMakeCurrent: 0xacee3080: ver 3 0 (tinfo 0xa4fd8fc0)
D/EGL_emulation(23111): eglMakeCurrent: 0xacee3080: ver 3 0 (tinfo 0xa4fd8fc0)

══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
The following _CastError was thrown building IconTheme(color: Color(0xdd000000)):
type '_InternalLinkedHashMap<Object?, Object?>' is not a subtype of type 'Map<String, dynamic>' in
type cast

The relevant error-causing widget was:
  MaterialApp MaterialApp:file:///E:/Projetos/Flutter/ludo_simulado_2022/lib/app_main.dart:27:14

When the exception was thrown, this was the stack:
#0      Routes.buildRoutes.<anonymous closure> (package:ludo_simulado_2022/app_routes.dart:35:44)
#1      _WidgetsAppState._onGenerateRoute (package:flutter/src/widgets/app.dart:1370:37)
#2      NavigatorState._routeNamed (package:flutter/src/widgets/navigator.dart:4049:46)
#3      _NamedRestorationInformation.createRoute (package:flutter/src/widgets/navigator.dart:5265:44)
#4      _RestorationInformation.toRouteEntry (package:flutter/src/widgets/navigator.dart:5222:34)
#5      _HistoryProperty.restoreEntriesForPage (package:flutter/src/widgets/navigator.dart:5442:69)
#6      NavigatorState.restoreState (package:flutter/src/widgets/navigator.dart:3267:42)
#7      RestorationMixin._doRestore (package:flutter/src/widgets/restoration.dart:887:5)
#8      RestorationMixin.didChangeDependencies (package:flutter/src/widgets/restoration.dart:873:7)
#9      NavigatorState.didChangeDependencies (package:flutter/src/widgets/navigator.dart:3336:11)
#10     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4963:11)
#11     ComponentElement.mount (package:flutter/src/widgets/framework.dart:4781:5)
...     Normal element mounting (267 frames)
#278    Element.inflateWidget (package:flutter/src/widgets/framework.dart:3817:16)
#279    Element.updateChild (package:flutter/src/widgets/framework.dart:3545:20)
#280    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4832:16)
#281    StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4977:11)
#282    Element.rebuild (package:flutter/src/widgets/framework.dart:4529:5)
#283    BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2659:19)
#284    WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:891:21)
#285    RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:367:5)
#286    SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1146:15)
#287    SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1083:9)
#288    SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> (package:flutter/src/scheduler/binding.dart:864:7)
(elided 11 frames from class _RawReceivePortImpl, class _Timer, dart:async, and dart:async-patch)

════════════════════════════════════════════════════════════════════════════════════════════════════
D/skia    (23111): Shader compilation error
D/skia    (23111): ------------------------
D/skia    (23111): Errors:
D/skia    (23111): link failed but did not provide an info log
D/skia    (23111): Shader compilation error
D/skia    (23111): ------------------------
D/skia    (23111): Errors:
D/skia    (23111): link failed but did not provide an info log
D/skia    (23111): Shader compilation error
D/skia    (23111): ------------------------
D/skia    (23111): Errors:
D/skia    (23111): link failed but did not provide an info log
D/skia    (23111): Shader compilation error
D/skia    (23111): ------------------------
D/skia    (23111): Errors:
D/skia    (23111): link failed but did not provide an info log
D/EGL_emulation(23111): eglMakeCurrent: 0xa38c3500: ver 3 0 (tinfo 0x8cd0f5f0)

PS E:\Projetos\Flutter\ludo_simulado_2022> flutter analyze
Analyzing ludo_simulado_2022...
No issues found! (ran in 17.3s)

PS E:\Projetos\Flutter\ludo_simulado_2022> flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel beta, 2.13.0-0.2.pre, on Microsoft Windows [versÆo 10.0.19044.1645], locale pt-BR)
[√] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
[√] Chrome - develop for the web
[√] Visual Studio - develop for Windows (Visual Studio Community 2022 17.1.3)
[!] Android Studio (not installed)
[√] Connected device (4 available)
[√] HTTP Host Availability

! Doctor found issues in 1 category.

As stated, in both situations the debugger shows me that "settings.arguments" is a Map with an key "data", but during restoration I do get a Cast error:

The example code you've provided isn't complete. Could you provide an example that fully reproduces the issue?

Here follows an full minial code sample with the problem.
While buinding this code sample I've noticed that it may have something to do with the size of the structure being passed to settings.arguments.
Is there any kind of limitations that I should bea aware of?

Code sample
import 'dart:convert';
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      restorationScopeId: 'root_app',
      onGenerateRoute: Routes.buildRoutes(),
      theme: ThemeData(primarySwatch: Colors.teal),
    );
  }
}

enum Routes {
  home('/', 'rid_home'),
  page2('/page2', 'rid_page2');
  //Add more here

  final String name;
  final String restorationId;
  const Routes(this.name, this.restorationId);

  static RouteFactory buildRoutes() {
    return (settings) {
      final arguments = settings.arguments != null ? settings.arguments as Map<String, dynamic> : <String, dynamic>{};
      //Widget Function(Map<String, dynamic>? args) _view;
      Widget view;

      var route = Routes.values.lastWhere((element) => element.name == settings.name);
      switch (route) {
        case Routes.home:
          view = const MyHomePage();
          break;
        case Routes.page2:
          view = MyPage2(arguments, title: 'Flutter Demo Home Page'); //Cant be const
          break;
        default:
          return null;
      }

      return MaterialPageRoute(
        settings: settings,
        builder: (context) => RestorationScope(
          restorationId: route.restorationId,
          child: view,
        ),
      );
    };
  }
}

class MyHomePage extends StatelessWidget {
  const MyHomePage({Key? key}) : super(key: key);

  List<Map<String, dynamic>> getData() {
    var fakeData =
        '[{"id": 1, "love": "yeah"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"}]';
    return List<Map<String, dynamic>>.from(json.decode(fakeData));
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Test Home Page'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            List<Map<String, dynamic>> evalData = getData();
            Navigator.restorablePushReplacementNamed(
              context,
              Routes.page2.name,
              arguments: <String, dynamic>{'data': evalData},
            );
          },
          child: const Text('Click Me!'),
        ),
      ),
    );
  }
}

class MyPage2 extends StatefulWidget {
  final String title;
  final Map<String, dynamic> data;
  const MyPage2(this.data, {required this.title, Key? key}) : super(key: key);

  @override
  State<MyPage2> createState() => _MyPage2State();
}

class _MyPage2State extends State<MyPage2> with RestorationMixin {
  final _counter = RestorableInt(0);

  void _incrementCounter() {
    setState(() {
      _counter.value++;
    });
  }

  @override
  void dispose() {
    _counter.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '${_counter.value}',
              style: Theme.of(context).textTheme.headline4,
            ),
            const Text(
              'First data ID is:',
            ),
            Text(
              '${widget.data['data'][0]['id']}',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }

  @override
  String? get restorationId => Routes.page2.restorationId;

  @override
  void restoreState(RestorationBucket? oldBucket, bool initialRestore) {
    registerForRestoration(_counter, restorationId!);
  }
}

Hi @Marcelo-Petrucelli, Thanks for filing the issue. Can you please recheck this piece of code, it looks syntactically incorrect
enum Routes {
  home('/', 'rid_home'),
  page2('/page2', 'rid_page2');

Hello @maheshmnj, I'm actually using Enhanced Enums from Dart 2.17 (beta) (and Flutter version 2.13 pre).

Thanks for the clarification @Marcelo-Petrucelli, I wasn't aware of that :)
I am able to reproduce the typecast error with your code sample, You can fix that by not forcing the Map typecast to Map<String,dynamic>
Just replace
final arguments = settings.arguments != null ? settings.arguments as Map<String, dynamic> : <String, dynamic>{};

with this
final arguments = settings.arguments != null ? settings.arguments as Map : {};

Heres the complete code sample

modified code sample
import 'dart:convert';
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  static RouteFactory buildRoutes() {
    return (settings) {
      final arguments =
          settings.arguments != null ? settings.arguments as Map : {};
      //Widget Function(Map<String, dynamic>? args) _view;
      Widget view;
      String rid;

      switch (settings.name) {
        case '/':
          view = const MyHomePage();
          rid = 'rid_home';
          break;
        case '/page2':
          view = MyPage2(arguments,
              title: 'Flutter Demo Home Page'); //Cant be const
          rid = 'rid_page2';
          break;
        default:
          return null;
      }

      return MaterialPageRoute(
        settings: settings,
        builder: (context) => RestorationScope(
          restorationId: rid,
          child: view,
        ),
      );
    };
  }

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      restorationScopeId: 'root_app',
      onGenerateRoute: buildRoutes(),
      theme: ThemeData(primarySwatch: Colors.teal),
    );
  }
}

class MyHomePage extends StatelessWidget {
  const MyHomePage({Key? key}) : super(key: key);

  List<Map<String, dynamic>> getData() {
    var fakeData =
        '[{"id": 1, "love": "yeah"},	{"id": 2, "love": "nono"},	{"id": 2, "love": "nono"}]';
    return List<Map<String, dynamic>>.from(json.decode(fakeData));
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Test Home Page'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            List<Map<String, dynamic>> evalData = getData();
            Navigator.restorablePushReplacementNamed(
              context,
              '/page2',
              arguments: <String, dynamic>{'data': evalData},
            );
          },
          child: const Text('Click Me!'),
        ),
      ),
    );
  }
}

class MyPage2 extends StatefulWidget {
  final String title;
  final Map data;
  const MyPage2(this.data, {required this.title, Key? key}) : super(key: key);

  @override
  State<MyPage2> createState() => _MyPage2State();
}

class _MyPage2State extends State<MyPage2> with RestorationMixin {
  final _counter = RestorableInt(0);

  void _incrementCounter() {
    setState(() {
      _counter.value++;
    });
  }

  @override
  void dispose() {
    _counter.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '${_counter.value}',
              style: Theme.of(context).textTheme.headline4,
            ),
            const Text(
              'First data ID is:',
            ),
            Text(
              '${widget.data['data'][0]['id']}',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }

  @override
  String? get restorationId => 'rid_page2';

  @override
  void restoreState(RestorationBucket? oldBucket, bool initialRestore) {
    registerForRestoration(_counter, restorationId!);
  }
}

flutter doctor -v (mac)
[✓] Flutter (Channel stable, 2.10.5, on macOS 12.3 21E230 darwin-arm, locale en-IN)
    • Flutter version 2.10.5 at /Users/mahesh/Documents/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 5464c5bac7 (12 hours ago), 2022-04-18 09:55:37 -0700
    • Engine revision 57d3bac3dd
    • Dart version 2.16.2
    • DevTools version 2.9.2

[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
    • Android SDK at /Users/mahesh/Library/Android/sdk
    • Platform android-32, build-tools 31.0.0
    • ANDROID_HOME = /Users/mahesh/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.11+0-b60-7772763)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 13.2.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • CocoaPods version 1.10.2

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

[✓] Android Studio (version 2021.1)
    • Android Studio at /Applications/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 11.0.11+0-b60-7772763)

[✓] IntelliJ IDEA Community Edition (version 2021.2.1)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 61.2.4
    • Dart plugin version 212.5080.8

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

[✓] Connected device (4 available)
    • Redmi K20 Pro (mobile) • <IP_ADDRESS>:55555                    • android-arm64  • Android 11 (API 30)
    • iPhone 12 Pro (mobile) • 535317A4-921C-488F-B234-C2CC6D4AE5A1 • ios            • com.apple.CoreSimulator.SimRuntime.iOS-14-5 (simulator)
    • macOS (desktop)        • macos                                • darwin-arm64   • macOS 12.3 21E230 darwin-arm
    • Chrome (web)           • chrome                               • web-javascript • Google Chrome 100.0.4896.88

[✓] HTTP Host Availability
    • All required HTTP hosts are available

• No issues found!

Hello again @maheshmnj.
I've tried it again on 2.17 beta channel and got the same thing when casting it using From:

When using the Map solution I get in problems when trying to access the value at any point in my code, since I need to eventually cast it to Map<String, dynamic> to access it's content (otherwise I'm stuck to a Map<dynamic, dynamic> or even a List<Object?>).
The interesting thing about this is that it only happens when Restoration of my Route kicks in, since it doesn't happen when actually Navigating in the app.

I've tried it again on 2.17 beta channel and got the same thing when casting it using From:

Please ensure you are rebuilding the app (not hot reloading or hot restarting), Because the change I suggested above seems  to work fine for me on all flutter channels (including beta)
mahesh@Maheshs-MacBook-Air-M1 newapp % flutterb --version
Flutter 2.13.0-0.1.pre • channel beta • https://github.com/flutter/flutter.git
Framework • revision 13a2fb10b8 (2 weeks ago) • 2022-04-12 15:34:25 -0500
Engine • revision 499984f99c
Tools • Dart 2.17.0 (build 2.17.0-266.1.beta) • DevTools 2.12.1
mahesh@Maheshs-MacBook-Air-M1 newapp %

The interesting thing about this is that it only happens when Restoration of my Route kicks in, since it doesn't happen when actually Navigating in the app.

However, I can confirm that this casting works settings.arguments as Map<String, dynamic during route Navigation but not during state restoration. This is reproducible on both the stable and the master channel. Labeling this issue for further insights from the team.

logs
Launching lib/main.dart on Redmi K20 Pro in debug mode...
Warning: Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Warning: Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Warning: Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Warning: Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
✓  Built build/app/outputs/flutter-apk/app-debug.apk.
Connecting to VM Service at ws://<IP_ADDRESS>:53771/fQKxt3Ni7x8=/ws
I/.example.newap( 1868): WaitForGcToComplete blocked RunEmptyCheckpoint on ProfileSaver for 7.249ms
I/.example.newap( 1868): ProcessProfilingInfo new_methods=1023 is saved saved_to_disk=1 resolve_classes_delay=8000
D/MIUIInput( 1868): [MotionEvent] ViewRootImpl { action=ACTION_DOWN, id[0]=0, pointerCount=1, eventTime=237951932, downTime=237951932 } moveCount:0
W/MirrorManager( 1868): this model don't Support
D/MIUIInput( 1868): [MotionEvent] ViewRootImpl { action=ACTION_UP, id[0]=0, pointerCount=1, eventTime=237951990, downTime=237951932 } moveCount:0
D/MIUIInput( 1868): [MotionEvent] ViewRootImpl { action=ACTION_DOWN, id[0]=0, pointerCount=1, eventTime=237953111, downTime=237953111 } moveCount:0
D/MIUIInput( 1868): [MotionEvent] ViewRootImpl { action=ACTION_UP, id[0]=0, pointerCount=1, eventTime=237953202, downTime=237953111 } moveCount:0
D/MIUIInput( 1868): [MotionEvent] ViewRootImpl { action=ACTION_DOWN, id[0]=0, pointerCount=1, eventTime=237953250, downTime=237953250 } moveCount:0
D/MIUIInput( 1868): [MotionEvent] ViewRootImpl { action=ACTION_UP, id[0]=0, pointerCount=1, eventTime=237953359, downTime=237953250 } moveCount:0
D/MIUIInput( 1868): [MotionEvent] ViewRootImpl { action=ACTION_DOWN, id[0]=0, pointerCount=1, eventTime=237953402, downTime=237953402 } moveCount:0
D/MIUIInput( 1868): [MotionEvent] ViewRootImpl { action=ACTION_UP, id[0]=0, pointerCount=1, eventTime=237953528, downTime=237953402 } moveCount:0
D/MIUIInput( 1868): [MotionEvent] ViewRootImpl { action=ACTION_DOWN, id[0]=0, pointerCount=1, eventTime=237953594, downTime=237953594 } moveCount:0
D/MIUIInput( 1868): [MotionEvent] ViewRootImpl { action=ACTION_UP, id[0]=0, pointerCount=1, eventTime=237953669, downTime=237953594 } moveCount:0
D/MIUIInput( 1868): [MotionEvent] ViewRootImpl { action=ACTION_DOWN, id[0]=0, pointerCount=1, eventTime=237953708, downTime=237953708 } moveCount:0
D/MIUIInput( 1868): [MotionEvent] ViewRootImpl { action=ACTION_UP, id[0]=0, pointerCount=1, eventTime=237953902, downTime=237953708 } moveCount:0
D/MIUIInput( 1868): [MotionEvent] ViewRootImpl { action=ACTION_DOWN, id[0]=0, pointerCount=1, eventTime=237953932, downTime=237953932 } moveCount:0
D/MIUIInput( 1868): [MotionEvent] ViewRootImpl { action=ACTION_UP, id[0]=0, pointerCount=1, eventTime=237954033, downTime=237953932 } moveCount:0
D/SurfaceView( 1868): UPDATE null, mIsCastMode = false

════════ Exception caught by widgets library ═══════════════════════════════════
The following _CastError was thrown building IconTheme(color: Color(0xdd000000)):
type '_InternalLinkedHashMap<Object?, Object?>' is not a subtype of type 'Map<String, dynamic>' in type cast

The relevant error-causing widget was
MaterialApp
When the exception was thrown, this was the stack
#0      MyApp.buildRoutes.<anonymous closure>
#1      _WidgetsAppState._onGenerateRoute
#2      NavigatorState._routeNamed
#3      _NamedRestorationInformation.createRoute
#4      _RestorationInformation.toRouteEntry
#5      _HistoryProperty.restoreEntriesForPage
#6      NavigatorState.restoreState
#7      RestorationMixin._doRestore
#8      RestorationMixin.didChangeDependencies
#9      NavigatorState.didChangeDependencies
#10     StatefulElement._firstBuild
#11     ComponentElement.mount
...     Normal element mounting (267 frames)
#278    Element.inflateWidget
#279    Element.updateChild
#280    ComponentElement.performRebuild
#281    StatefulElement.performRebuild
#282    Element.rebuild
#283    BuildOwner.buildScope
#284    WidgetsBinding.drawFrame
#285    RendererBinding._handlePersistentFrameCallback
#286    SchedulerBinding._invokeFrameCallback
#287    SchedulerBinding.handleDrawFrame
#288    SchedulerBinding.scheduleWarmUpFrame.<anonymous closure>
(elided 11 frames from class _RawReceivePortImpl, class _Timer, dart:async, and dart:async-patch)
════════════════════════════════════════════════════════════════════════════════

flutter doctor -v (mac)
[✓] Flutter (Channel stable, 2.10.5, on macOS 12.3 21E230 darwin-arm, locale en-IN)
    • Flutter version 2.10.5 at /Users/mahesh/Documents/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 5464c5bac7 (12 hours ago), 2022-04-18 09:55:37 -0700
    • Engine revision 57d3bac3dd
    • Dart version 2.16.2
    • DevTools version 2.9.2

[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
    • Android SDK at /Users/mahesh/Library/Android/sdk
    • Platform android-32, build-tools 31.0.0
    • ANDROID_HOME = /Users/mahesh/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.11+0-b60-7772763)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 13.2.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • CocoaPods version 1.10.2

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

[✓] Android Studio (version 2021.1)
    • Android Studio at /Applications/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 11.0.11+0-b60-7772763)

[✓] IntelliJ IDEA Community Edition (version 2021.2.1)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 61.2.4
    • Dart plugin version 212.5080.8

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

[✓] Connected device (4 available)
    • Redmi K20 Pro (mobile) • <IP_ADDRESS>:55555                    • android-arm64  • Android 11 (API 30)
    • iPhone 12 Pro (mobile) • 535317A4-921C-488F-B234-C2CC6D4AE5A1 • ios            • com.apple.CoreSimulator.SimRuntime.iOS-14-5 (simulator)
    • macOS (desktop)        • macos                                • darwin-arm64   • macOS 12.3 21E230 darwin-arm
    • Chrome (web)           • chrome                               • web-javascript • Google Chrome 100.0.4896.88

[✓] HTTP Host Availability
    • All required HTTP hosts are available

• No issues found!

[✓] Flutter (Channel master, 2.13.0-0.0.pre.712, on macOS 12.3 21E230 darwin-arm, locale en-IN)
    • Flutter version 2.13.0-0.0.pre.712 at /Users/mahesh/Documents/flutter_master
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 8c22f5648a (77 minutes ago), 2022-04-25 05:34:07 -0400
    • Engine revision 10efa195bf
    • Dart version 2.18.0 (build 2.18.0-44.0.dev)
    • DevTools version 2.12.2

[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
    • Android SDK at /Users/mahesh/Library/Android/sdk
    • Platform android-32, build-tools 31.0.0
    • ANDROID_HOME = /Users/mahesh/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.11+0-b60-7772763)
    • All Android licenses accepted.

[!] Xcode - develop for iOS and macOS (Xcode 13.2.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    ! CocoaPods 1.10.2 out of date (1.11.0 is recommended).
        CocoaPods is used to retrieve the iOS and macOS platform side's plugin code that
        responds to your plugin usage on the Dart side.
        Without CocoaPods, plugins will not work on iOS or macOS.
        For more info, see https://flutter.dev/platform-plugins
      To upgrade see https://guides.cocoapods.org/using/getting-started.html#installation for
      instructions.

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

[✓] Android Studio (version 2021.1)
    • Android Studio at /Applications/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 11.0.11+0-b60-7772763)

[✓] IntelliJ IDEA Community Edition (version 2021.2.1)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 61.2.4
    • Dart plugin version 212.5080.8

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

[✓] Connected device (3 available)
    • Redmi K20 Pro (mobile) • <IP_ADDRESS>:5533 • android-arm64  • Android 11 (API 30)
    • macOS (desktop)        • macos            • darwin-arm64   • macOS 12.3 21E230 darwin-arm
    • Chrome (web)           • chrome           • web-javascript • Google Chrome 100.0.4896.127

[✓] HTTP Host Availability
    • All required HTTP hosts are available

! Doctor found issues in 1 category.

Thanks @maheshmnj
Yeah, it's true that it is possible to keep working with List<Object?> or even Map<Object?, Object?> and accessing these values, but not being able to cast it to a guaranteed typed Map and List does come with a big cost, and this seems to happen only when being restored.
Just to be transparent here, it is very likely (couldn't test yet) that using json.decode(json.encode(data)) would solve the problem (after the restoration case). But in my specific case this data tends to be large and this king of conversion would come at another high cost.
I look forward to having an option for this casting problem.

got the same problem.
one possible easy workaround would be
Map<String, dynamic> rebox(dynamic value) {
  final encoded = jsonEncode(value);
  final decoded = jsonDecode(encoded);
  return decoded;
}

although, if you had some bloc on previous page, which needs to be loaded before accepting updates, state restoration won't resolve the problem, as the states of underlying pages don't seem to be instantiated or drawn on restoration. (i.e. if one creates bloc in didChangeDependencies, fetching configured repository from inherited widget)


Sound just dies sometimes.

Description

Sometimes, with absolutely no warning, the sound for the game will just decide to not.
It will continue to not for the remainder of the client process.
Restarting the client will make the sounds work again, but reconnecting from the same client process will not.
Has happened several times over the last several days.
Reproduction

Play game as normal.
Suddenly silence.

Screenshots

N/A
Additional context

The client console was outputting a bunch of independent

[ERRO] midi.fluidsynth: Not a SoundFont file.
[DEBG] clyde.oal: Cleaning out buffered source N which finalized in another thread.
during the session when this last occurred, but they were sporadically happening for the entire session, not just before the sound cut out.

Probably similar to #14634


AnimeJin

Aim
Anime Recommendation System. You can search any anime on the website and view anime based on various Genres.
Details
Here I am going to use the Jikan API which will show the anime content as seen in the web-page.
Do I want to work on this:

[x]  Yes
[ ] No

Aim
Anime Recommendation System. You can search any anime on the website and view anime based on various Genres.
Details
Here I am going to use the Jikan API which will show the anime content as seen in the web-page.
Do I want to work on this:

[x]   Yes
[ ]  No

Assign this issue to me under GSSOC'23

Not Needed for this Repo.


Have setType() return $this to realize fluent setter

This would allow:
new Specification([
    (new Join('x','y'))->setType(Join::INNER_JOIN)
]);

Coverage remained the same at 99.636% when pulling fd1182633a091ba54d08e7807c8c1572b43283f6 on holtkamp:patch-1 into 4a53c7ac1c6c332a0eabf61376281ee968691cbb on rikbruil:master.


[move][vm] Test bounds checker error codes

Motivation
Test that the bound checker's error codes are the ones we expect to find. This is important because the error codes are part of our interface and are supposed to be stable.
Have you read the Contributing Guidelines on pull requests?
Yes.
Test Plan
cargo xtest -p bytecode-verifier-tests
Related PRs
This is an improvement suggested in the discussion on #8536.

/land

:broken_heart: Test Failed - ci-test

@sblackshear, is there anything I can do to merge this at this point? Do the tests need to be re-run?

/land


Simple CLI to run developer tools. #446

Terms

THIS SOFTWARE IS CONTRIBUTED SUBJECT TO THE TERMS OF THE TERMS OF THE CCLA DATED 2017-11-07 WITH FINOS/LINUX FOUNDATION (FORMERLY THE SYMPHONY SOFTWARE FOUNDATION CCLA).
  THIS SOFTWARE MAY BE REDISTRIBUTED TO OTHERS ONLY BY EFFECTIVELY USING THIS OR ANOTHER EQUIVALENT DISCLAIMER IN ADDITION TO ANY OTHER REQUIRED LICENSE TERMS.

This is just a simple wrapper that doesn't do anything useful yet but it has the JavaScript - Elm interop.


Fixup invalid configuration error message

Fix invalid parameter used in error message
Re-organize test code

As part of verifying this, I tried out https://github.com/aspnet/AspNetCore/issues/8722. With the more recent changes to how we infer the configuration, with a 2.1 Razor Design package in a 3.0 project, you get, RazorLangVersion=2.1, RazorConfiguration=<Empty>. The RazorTagHelper  task gracefully fails validation saying it requires a valid value for configuration. I did not see a crash with a recent build of tooling. If there was a specific build where the problem was reproduced, I'd be happy to try it out.
Note; The plan is to not test unsupported configurations (i.e. netcoreapp3.0 + 2.x Razor.Design), so a manual test here would have to suffice.


feat: add colours to ModFill

By submitting this PR, I am indicating to the Numberscope maintainers that I have read and understood the contributing guidelines and that this PR follows those guidelines to the best of my knowledge. I have also read the pull request checklist and followed the instructions therein.

This is still marked draft but feedback is welcome. It adds several colouring abilities to ModFill:

options to choose colour and alpha (transparency) for drawing, transparency possibly as function of modulus
option to highlight certain terms by using a second colour; a formula box allows you to pick which terms to highlight by a formula on the index, e.g. isPrime(n), and relevant controls
removes boring ModFill gallery items and adds nice ones (in flux again now)
updates documentation (still needs images)
adds background colour option as well as aspect ratio option

Things to do:

[ ] update snapshots
[ ] update images in docs
[ ] there's a background colour option that should work once the sequence cache bug is fixed
[ ] update gallery
[ ] consider other colour options
[ ] consider making some parameters appear when highlighting formula is not default

Ok sorry for the rebase mess, this one should be clean but I see now something is wrong -- presumably something to do with my new formula parameter and your formula changes.  I'll take a look at that when I get a chance.

OK, just let me know when you're ready for me to look.

Ok, the merge issue is fixed, it should run and be ready except for the snapshots.

First some general high-level feedback:

Given that you are diving into color schemes, have you reviewed #143? This PR more or less implements scheme 3 there, and then it has the highlight color not mentioned there. Are any of the other color schemes worth implementing now? This scheme allows one to use a saturation gradient for the number of times that a residue has occurred; would you want to enable the visualizer to use a hue gradient instead?
I'm thinking you are trying to keep this focused, and not considering it the complete overhaul, so you would want to leave consideration of possibly doing #309 and/or #386 to another PR, correct?
In a similar vein, you want to leave the question of whether to always have ModFill be square, or to have a toggle that lets you flip between "square" and "fill the rectangle", to another PR? (I definitely think that square should at least be an option.)
I've never loved the description "A triangular grid". To me that calls to mind the tessellation of equilateral triangles. Can you think of better/clearer wording? Possibly just remove the word "triangular"?
Should the default for "Highlight Formula" be false, corresponding to the good ol' monochrome behavior? If we changed it to default to 0, the description could suggest isPrime(n) as an example.
When "Highlight Formula" is false or 0, should the Highlight color be hidden, since it won't be used?
On Featured specimens, does ModFill warrant three? Is there any total number we're more or less going for, or average per visualizer? If you wanted to prune one, the 'Prime Residues' one seems easiest to discover on one's own, so maybe has the least need to be in featured specimens.  (And I know I am undermining my own point here but I sort of miss Residue Rise -- it made a really interesting 3D-looking texture after a while, which i am not sure the reason for. So maybe I am actually barking up the wrong tree, and we should be tending toward a whole lot of featured specimens, and I should just be campaigning for Residue Rise to be left in... What's your reaction on this point?)
Not sure why transparency is an integer from 1 to 255; wouldn't it be more typical to make it a decimal between 0 and 1?  In particular, in the Chaos visualizer, we call this same feature "Alpha" and have it be between 0 and 1. I think the "Transparency" label is clearer, and the 0 - 1 dynamic range is clearer, but in any case, I think most strongly of all that the two should be completely consistent with each other.

One more general philosophical question here: When the transparency level is low, the bottom-left corner is always darker than the right-hand side, simply because there are fewer residues so each on average occursmore times. In many cases, this is visual noise, there's not really "more hits" in the smaller residues than the larger residues, in that each term does in fact have one residue per modulus; they're just spread out over more different residues in the higher moduli. Should there be an option, perhaps even an  option turned on by default, to allow the transparency to depend on n so that you can adjust things so that "all else being equal", the diagram would be uniformly saturated left to right?

More small-bore comments (as with most of my feedback, more questions than directives):

Would 'Highest modulus to display' be clearer as the label instead of just 'Highest modulus'?
I think the term "hit" is unclear in "Transparency of each hit". Is there better wording? Is "Transparency of each residue plotted" any better? "Transparency of each occurrence of a residue"?
The capitalization in "Highlight Formula" is inconsistent with other fields; "Highlight formula" would be more consistent. But would a label like "Indices to highlight" be clearer/more informative? You can explain it is a formula in the description (which you basically do already).
There's a space missing after 'of' in 'residue ofa(n)' in the description for this parameter.
Logically, the highlight transparency could be different from the usual one. Do you want to add a parameter for that? If there were an RGBA color picker, it would be nice to just use that for both...

I searched around. There is no browser-native rgba color picker, but it appears that it would be pretty easy to create a RGBA param type and roll our own input setup  with a combination of a color picker and 0-1 slider. If you think that would be useful, I am happy to help. We could use the rgba color in Turtle, too, I suppose -- Wait For It would definitely look different with some transparency for the turtle path, for example.

Code is all nice and straightforward. Once the design/wording stuff above is decided/resolved, we should be good to go.

I searched around. There is no browser-native rgba color picker, but it appears that it would be pretty easy to create a RGBA param type and roll our own input setup with a combination of a color picker and 0-1 slider. If you think that would be useful, I am happy to help. We could use the rgba color in Turtle, too, I suppose -- Wait For It would definitely look different with some transparency for the turtle path, for example.

I think this would be lovely!  Yes, Turtle would benefit too, and it would simplify parameter panels (although it hides powerful functionality in some cases, so we might want to add a hint or something).  Would the roll our own basically use the browser RGB plus a slider?  Do you imagine doing that as part of this PR or another one?

I need help with a weird (race condition?) bug.  Try this URL:
http://localhost:5173/?name=draw+problems&viz=ModFill&modDimension=100&alpha=20&fillColor=a51d2d&highlightFormula=0&highColor=ff7800&seq=Formula&formula=floor(n%2F1)
You'll see (pic attached from firefox), that the bottom row(s) isn't/aren't always drawn at first.  What's happening, as far as I can tell, is that code is running and thinks it is running (console logs confirm this), but drawing is not happening on canvas, until some sort of delay time has passed.  For example, if you put a command to change background colour, it won't happen unless you program it to happen after some number of terms.  It seems (??) worse with floor(n/1) than with n (which should be equivalent) and worse (??) on firefox than chrome, but it is intermittent how many rectangles are missed.  I'm stumped.

I need help with a weird (race condition?) bug.

For me it is only happening on page load. If I click your URL and then enter a "2" in the number of terms to use, I get both horizontal stripes. Similarly if I change any other parameter of the the visualizer i seem to be getting all of the horizontal stripes. Does that mesh with what is happening for you?

Wow, and I agree, I can't get it to happen with formula n but it reliably does on page load with formula n/1. And it only seems to be happening on ModFill, in that with formula n/1 for two terms I get two strokes in Turtle, two dots in Chaos, etc. Does that also match with your experience? So weird...

OK, it's an async initialization mess with sequences. Roughly the problem is that Specimen.makeSequence returns right away, but it has initiated an asynchronous validate, which may eventually conclude that the parameters have changed, and that it needs to initialize the sequence, but that might end up happening after the sequence has filled its cache, and then the cache gets destroyed... Will try to untangle, but the sequence of events is really muddled. This is not a proud part of Numberscope's design :-(

Not sure why it isn't happening to other visualizers but I think it is because of a quasi-bug in modfill that we should fix: it increments its index before draw has succeeded. Since eventually there will be a cache miss, that's not actually kosher. But it has been a useful quasibug, in that there shouldn't be a cache miss on the first call to compute

1. Given that you are diving into color schemes, have you reviewed [Add color schemes to Mod Fill visualizer #143](https://github.com/numberscope/frontscope/issues/143)? This PR more or less implements scheme 3 there, and then it has the highlight color not mentioned there. Are any of the other color schemes worth implementing now? This scheme allows one to use a saturation gradient for the number of times that a residue has occurred; would you want to enable the visualizer to optionally use a hue gradient instead?

So far haven't tackled more of this.

2. I'm thinking you are trying to keep this focused, and not considering it the complete overhaul, so you would want to leave consideration of possibly doing [Mod Fill should have legend #309](https://github.com/numberscope/frontscope/issues/309) and/or [ModFill should have mouseover #386](https://github.com/numberscope/frontscope/issues/386) to another PR, correct?

Correct.

3. In a similar vein, you want to leave the question of whether to always have ModFill be square, or to have a toggle that lets you flip between "square" and "fill the rectangle", to another PR? (I definitely think that square should at least be an option.)

Done.

4. I've never loved the description "A triangular grid". To me that calls to mind the tessellation of equilateral triangles. Can you think of better/clearer wording? Possibly just remove the word "triangular"?

Tried to improve.

5. Should the default for "Highlight Formula" be `false`, corresponding to the good ol' monochrome behavior? If we changed it to default to 0, the description could suggest `isPrime(n)` as an example.

Done.

6. When "Highlight Formula" is `false` or `0`, should the Highlight color be hidden, since it won't be used?

Not sure how to do this -- currently the params system doesn't have something like that.  Should I consider adding it?  Seems useful.

7. On Featured specimens, does ModFill warrant three? Is there any total number we're more or less going for, or average per visualizer? If you wanted to prune one, the 'Prime Residues' one seems easiest to discover on one's own, so maybe has the least need to be in featured specimens.  (And I know I am undermining my own point here but I sort of miss Residue Rise -- it made a really interesting 3D-looking texture after a while, which i am not sure the reason for. So maybe I am actually barking up the wrong tree, and we should be tending toward a whole lot of featured specimens, and I should just be campaigning for Residue Rise to be left in... What's your reaction on this point?)

Not addressed right now (and this most recent commit doesn't change the gallery which is a bit broken by this commit.

8. Not sure why transparency is an integer from 1 to 255; wouldn't it be more typical to make it a decimal between 0 and 1?  In particular, in the Chaos visualizer, we call this same feature "Alpha" and have it be between 0 and 1. I think the "Transparency" label is clearer, and the 0 - 1 dynamic range is clearer, but in any case, I think most strongly of all that the two should be completely consistent with each other.

Done.

One more general philosophical question here: When the transparency level is low, the bottom-left corner is always darker than the right-hand side, simply because there are fewer residues so each on average occursmore times. In many cases, this is visual noise, there's not really "more hits" in the smaller residues than the larger residues, in that each term does in fact have one residue per modulus; they're just spread out over more different residues in the higher moduli. Should there be an option, perhaps even an option turned on by default, to allow the transparency to depend on n so that you can adjust things so that "all else being equal", the diagram would be uniformly saturated left to right?

I made transparency a value that could also be a function of m.  That way, someone can play with this.  But in my experiments, the way it is set by default is the most visually pleasing.  You can try a few combos, and if there are good ones we can add them to the docs.

Not sure why it isn't happening to other visualizers but I think it is because of a quasi-bug in modfill that we should fix: it increments its index before draw has succeeded. Since eventually there will be a cache miss, that's not actually kosher. But it has been a useful quasibug, in that there shouldn't be a cache miss on the first call to compute

I believe I fixed this quasibug, but the underlying cache bug still remains.

Here's an example where a formula is still popping up some errors while trying to type:  backspacing the variable inside "isPrime(a)" produces a pop-up, but only for the formula field in ModFill, not for the formula field in Sequence.  Do you know how to easily fix this (seeing as you were just fixing this in another PR)?
http://localhost:5173/?name=Formula%3A+n&viz=ModFill&modDimension=13&backgroundColor=000000&fillColor=1a5fb4&alpha=0.01&aspectRatio=1&highlightFormula=isPrime(a)&highColor=f66151&alphaHigh=0.4&seq=Formula

My newest commit allows for variables n (index) and a (value) in the highlight formula.  I also added checking whether they were actually in the parsetree and avoiding even trying math.safeNumber() on things that aren't in the parsetree, so as to avoid pointless failures.  This is necessary, for example, if you want to use highlight formula involving n but not a on VF numbers, where a is not a safe number after just 79 terms, but n is fine.

Question:  I just realized I did the aspect ratio bare hands, but we have a capability for that, right?  I should have requested a canvas of the correct aspect ratio?  Don't know why I forgot that...

OK, I have licked the async initialization bug, and am getting a PR ready but it takes a lot of updating tests to get a commit. In the meantime, I have some questions/comments on your latest commit:
A) On aspect ratio, I certainly didn't mean that you should write code to implement different aspect ratios within the ModFill visualizer! I was just thinking you would implement requestedAspectRatio() and then you would get a canvas of the appropriate aspect ratio. Then exactly the old computation would work. I was thinking you would either always request 1 if you think square is best, or have a checkbox that determines whether 1 is requested or the "full" aspect ratio is used. And sadly, I think the code should be reverted to something like that -- I don't think we want to be redoing aspect ratio work in each visualizer. Do you want to do that reversion, or would you like me to?
B) On the description of the visualizer, "array" is fine with me.
C) On hiding the highlight color and alpha when the highlight formula is false or 0, there is already a mechanism: visiblePredicate. Do you want to use it to implement this hiding, or shall I?
D) On m-dependency in the transparency: that's nice =) 0.07*log(m) makes "Dance no. 163" (btw, I love your titles) look more balanced to me -- see what you think.
E) I like all your wording changes! I just have one additional suggestion: I think that "alpha" should be renamed "Opacity" both here and in Chaos, because the larger the value, the more opaque, not the more transparent. Then the range phrase should be "Between 0 (transparent) and 1 (completely opaque)." What do you think?
F) If no formula at all is specified for Highlight opacity, should it default to be the same thing as Opacity?
G) Some minor questions/nits on the gallery specimens, disregarding the fact that they need some updating since the parameter changes:
(i) In Dance no. 163, should we use formula 163n rather than 163*n to be more math-comfortable?
(ii) In same specimen, similarly the highlight indices formula n%163 > 81 seems easier to read/comprehend and produces essentially the same picture. Should we switch? Note you can also write this n mod 163 > 81 if you prefer.
(iii) On Baffling Beatty Bars, should we similarly remove the unneeded * in the formula and in the Highlight indices formula? And since floor() is implicit in the Formula sequence, should we remove the floor() from the floor(sqrt(2)n)? (The floor() is needed in the highlight indices because that's not a sequence, it's just a direct use of MathFormula.)
H) Just to mention -- I don't think this necessarily illuminates anything for the typical user, but maybe should be available as an option for the power user -- you can do most everything that you can with the existing parameters, and much more besides, with MathFormulas that let you compute color-space coordinates (rgba or maybe more usefully hsva) from the index, modulus, and residue. In fact, I think those things cover most of the options in the issue proposing the various color schemes, with the exception of the fact that overlaying transparent colors gives you a weighted average of the input colors to a cell, with recent additions upweighted. If one also added straight-up averaging of color coordinates of all of the "hits" on a cell as well as transparent overlaying, then I think that would cover all the cases listed in that issue. But it would also make using the visualizer much more complicated and hard to get into for the casual user. So we can revisit these ideas in the future, perhaps -- maybe have a "power user mode" that gives you direct access to such formulas.

OK, finally got the fix to the cache filling async messup pushed to your branch. Don't forget to pull before you do anything else.

Here's an example where a formula is still popping up some errors while trying to type: backspacing the variable inside "isPrime(a)" produces a pop-up, but only for the formula field in ModFill, not for the formula field in Sequence. Do you know how to easily fix this (seeing as you were just fixing this in another PR)?

I somehow seem to have killed the popups in my latest commit, even though I don't understand why. I will have to look into it tomorrow. But indeed, this code is throwing errors when you delete the variable a in isPrime(a) -- just now they are only showing up in the console. To avoid this, you have to do the computation in a try-catch block (see Formula.ts). Maybe the try-catch block should be moved into the MathFormula code in math.ts -- but the error handling still has to be able to happen, that has to be different in Formula.ts and in your visualizer.

OK, I don't actually understand why the error popups stopped (i.e., why errors were only going to the console, where a visitor won't see anything, rather than to an alert message on screen). It seems to have something to do with my restructuring the async calls to get rid of the "filling the cache before the parameter changes were finished" bug. But I am not really sure why that rearranging of the asyncs had any effect on this, so it took me a long time to manage to restore them, and in the end I only managed to do it by replicating the error-handling code from main.ts also in Specimen.ts, which is annoying.
But the latest commit (be sure to pull!) should get the popups back.
Then what you want to do about the "throw-happiness" of MathFormulas in ModFill is up to you: you can wrap your calls to .compute in your own try-catch blocks, or you can put a try-catch block in MathFormula.compute() with some mechanism that lets the caller tailor what happens when a computation goes awry (I think that could maybe be as simple as passing in a status object where messages should go when there's a problem), or something else that seems helpful to you. If you want any help with this, let me know. I was tempted to just say that we should defer until we have multiple Sequences for a single Visualizer, but (a) the opacity as a function of the modulus isn't an integer sequence, it's a real-number sequence, and (b) the "whether-to-highlight" parameter is a function of (at least as of now) two quantities, not a sequence. So it looks like they are going to stay just MathFormula parameters, and so there is a need for some more robust error handling around such parameters.

OK, sorry to keep pushing to your PR. I was able to understand a little bit more about the error handling -- basically a throw inside of an async function results in some Promise somewhere entering the 'rejected' state rather than the 'resolved' state, rather than that throw propagating farther up the call chain. That understanding allowed me to move the replicated error handling a bit farther up the call chain, which is good because presumably now it can catch errors from a bit wider scope. But I still wasn't able to avoid replicating the error handling altogether, and I don't see any way to move it any further up the call chain. I'm not going to stress about this any further unless it's troubling you.

At today's meeting, we resolved that when Kate asks Glen to, he will move as much of the error-handling code from the Formula Sequence into MathFormula (basically everything except the part that assumes the result is going to be converted to a bigint, since in general the results of MathFormula are not). The communication to the visitor of any resulting errors will be via an (optional) ValidationStatus object that can be passed into .compute() -- if it's there, messages will be put on that status rather than thrown as errors. That way, a MathFormula client can arrange for the messages to appear on screen by passing a ValidationStatus that's tied to something already displayed on screen, like the parameter in which the formula is specified.

The most recent commit deals with some of this

A) On aspect ratio, I certainly didn't mean that you should write code to implement different aspect ratios within the ModFill visualizer! I was just thinking you would implement requestedAspectRatio() and then you would get a canvas of the appropriate aspect ratio. Then exactly the old computation would work. I was thinking you would either always request 1 if you think square is best, or have a checkbox that determines whether 1 is requested or the "full" aspect ratio is used. And sadly, I think the code should be reverted to something like that -- I don't think we want to be redoing aspect ratio work in each visualizer. Do you want to do that reversion, or would you like me to?

Fixed.

B) On the description of the visualizer, "array" is fine with me.

Thumbs up.

C) On hiding the highlight color and alpha when the highlight formula is false or 0, there is already a mechanism: visiblePredicate. Do you want to use it to implement this hiding, or shall I?

Done.

D) On m-dependency in the transparency: that's nice =) 0.07*log(m) makes "Dance no. 163" (btw, I love your titles) look more balanced to me -- see what you think.

Will return to this on next commit.

E) I like all your wording changes! I just have one additional suggestion: I think that "alpha" should be renamed "Opacity" both here and in Chaos, because the larger the value, the more opaque, not the more transparent. Then the range phrase should be "Between 0 (transparent) and 1 (completely opaque)." What do you think?

Done.

F) If no formula at all is specified for Highlight opacity, should it default to be the same thing as Opacity?

I don't know how to do this?

G) Some minor questions/nits on the gallery specimens, disregarding the fact that they need some updating since the parameter changes: (i) In Dance no. 163, should we use formula 163n rather than 163*n to be more math-comfortable? (ii) In same specimen, similarly the highlight indices formula n%163 > 81 seems easier to read/comprehend and produces essentially the same picture. Should we switch? Note you can also write this n mod 163 > 81 if you prefer. (iii) On Baffling Beatty Bars, should we similarly remove the unneeded * in the formula and in the Highlight indices formula? And since floor() is implicit in the Formula sequence, should we remove the floor() from the floor(sqrt(2)n)? (The floor() is needed in the highlight indices because that's not a sequence, it's just a direct use of MathFormula.)

Will return to these.

H) Just to mention -- I don't think this necessarily illuminates anything for the typical user, but maybe should be available as an option for the power user -- you can do most everything that you can with the existing parameters, and much more besides, with MathFormulas that let you compute color-space coordinates (rgba or maybe more usefully hsva) from the index, modulus, and residue. In fact, I think those things cover most of the options in the issue proposing the various color schemes, with the exception of the fact that overlaying transparent colors gives you a weighted average of the input colors to a cell, with recent additions upweighted. If one also added straight-up averaging of color coordinates of all of the "hits" on a cell as well as transparent overlaying, then I think that would cover all the cases listed in that issue. But it would also make using the visualizer much more complicated and hard to get into for the casual user. So we can revisit these ideas in the future, perhaps -- maybe have a "power user mode" that gives you direct access to such formulas.

Yes, that's interesting -- controlling the colours directly.  In this commit I added a pile of variables to all the available formulas, because -- why not?  I can imagine using all of them in some circumstance or other.
Other things I did in this commit:

made background colour work but it's a kludge until your other PR about the cache issue
added "Sunzi mode" which blanks the canvas between terms -- I put this down at the end, and I'm on the fence about it's existence, it's kind of interesting but not visually pleasing, what do you think?  If it's worth it, I could add "fade trails" so it isn't quite so stroboscopic... that might be more interesting and pleasing.  This would let you see if the residue distribution changes over time

Finally, about the aspect ratio, I'm not really a fan of defaulting to square.  It's kind of ok with a white background, but with any other background colour it just looks awkward on the white (this will be an issue with numberglyph at some point too).  I think it looks much nicer to use the full available space by default.  This raises the issue about the whole request aspect ratio thing in general, that there's leftover space and it's always white no matter what.  Thoughts?

The most recent commit improves/makes some nice featured items.  I figure we can cull later (and will have to), so I'm just including the ones people seemed to like, possibly too many.  And since I can't get most OEIS sequences right now, I'm pretty limited in making nice examples.  The only advice of yours I didn't take was to remove "floor" from the beatty main sequence, because I think displaying the floor bars in the name is more understandable to the naive user.

Ok, @gwhitney I'm passing this over to you to do the error handling stuff.  Plus, I'm hoping you might be able to do the following item I wasn't sure how to do:

F) If no formula at all is specified for Highlight opacity, should it default to be the same thing as Opacity?

I don't know how to do this?

To be more specific, I interpreted this as that when you turn on highlighting, it will read the parameter for alpha for the main colour, and auto-fill that for the highlighting alpha.  But maybe that isn't what you meant.  Maybe you meant that if you leave the highlighting alpha blank, it should behave as the other one... but then what does it show in grey?  It would have to auto-fill to avoid being confusing... anyway, I wasn't sure what to do there.
And finally, I'm curious on your feedback on the new changes.

Just fyi you mentioned above that I needed to get the async stuff in to make background work. The funny thing is that I did get that in and when I put it in, the first value of the sequence was working and displaying fine. Now, the first value of the sequence is computing properly, and it is drawing, but it's somehow getting blanked by the background, so it looks as though it wasn't drawn. You can prove this by using a sequence with number of terms set to 1 -- it looks like it draws nothing, but if you resize quickly you see as you do that it constantly draws that one term and then blanks it and after you finish, it ends up blanked. This is totally mysterious to me because the only place the background color is drawn is in setup(), and naive console.logs are showing setup is indeed called before draw. So there is some other weird timing bug going on that I will have to track down as the next order of business. Then I can look at all the other stuff. Not sure when this will happen.

OK so I eventually realized there was drawing code that was doing more background calls, and since it was happening before the stopping check it was blanking the prior draw. So I took all of the workaround stuff for the former async bug out and now it seems to run fine to me. But I am going to hold off on checking in any further changes until you have a chance to pull this and check whether the not drawing things at the beginning problem still seems to be happening for you, or if all seems to be well now. Let me know when you have a chance.
Glad the aspect ratio code in the infrastructure worked well. I would still personally  just have a checkbox to toggle between "1" and "fill page" myself, since those are the only settings I can imagine using, but it's up to you of course.
The sunzi mode doesn't do much for me (and I don't get the Sunzi reference?) but I do see that optionally supplying an rgba color to paint all the non-hit cells each frame could be worthwhile, in that it could let you fade out the history, and at the extreme of alpha=1 that recovers sunzi mode. So feel free to take out sunzi mode, leave it in, or replace it with the non-hit paint (better phrased) as you see fit.
On the leftover screen space when aspect ratio differs from natural: I agree that perhaps it should one of our greys, rather than white. I don't quite see how to let the visualizer control the color of that space, though -- it's precisely the space outside the visualizer's canvas. What should we go with on this?
I can take care of doing (F) defaulting highlight opacity to opacity when you give the all-clear on the background/async bug and I work on mathformula error handling.
Finally on the featured specimens, I see Residue Rise is back as Woven Residues. What do you think about making the minimum of the random sequence be equal to the max modulus to get rid of the horizontal lines?
On Picasso's Periods, I was a little surprised you didn't use the classic $n^2+n+41$. If you do that and increase the opacity of the blue a bit, you of course start with a nice rose period that turns blue with occasional pink revivals... But there may be solid number-theoretic motivations for $n^3+2n+1$ that I am unaware of.

Sorry for the workaround confusing you!  Is the background colour working for you without it?  It isn't for me, at least in Firefox.  I thought the async/cache bug was getting fixed in a separate PR, so I put the workaround code there so the background colour would work.  For me, nothing is getting drawn (including background) until the second or third draw().  I see now that it is working in Chromium.  Strange.

The Sunzi reference is Sunzi's Theorem (Chinese Remainder Theorem) that allows you to recover a number from enough of its residues modulo different moduli.  The idea is that we are seeing one number per frame, but in the form of a collection of residues.  I like your idea about how to incorporate it as a spectrum from strobe to gradual fade -- this will let you see changing characteristics on any time scale.

For me, nothing is getting drawn (including background) until the second or third draw(). I see now that it is working in Chromium. Strange.

Indeed, that is very strange. ModFill works fine for me in, and identically at least to first approximation, in Firefox, Edge, and Chromium. I take it that consistently there's no plotting going on for you until the 2nd or 3rd call to draw() in Firefox. Is it only ModFill that seems to have a problem? Run Prime Residues on Firefox but with the number of sequence entries set to 1 then 2 (and then 3 if it's qualitatively different) and post the screenshots. Thanks!

P.S. For the screenshots, run Prime Residues with like highest modulus 25 and a background color, too, to make it clear what has or hasn't been drawn. Thanks.

Will post screenshots per request momentarily.  For this commit, just added a more streamlined sunzi effect and framerate, and adjusted featured Picasso again.

Requested Screenshots from firefox (setting should be visible; in particular, background is set to black)

OK, I'm going to take a quick look at this bug insofar as I can given that it's not happening on my machine. When you get a chance, let me know what exact version of Firefox you are running (and/or try updating to as recent a version as you can, but check the version number before you update). Also please check: when you have the specimen as the screenshots above, with the number of terms set to 2 (i.e., highest number where you see nothing), if you quickly resize the browser, do you see any flashes of black, or of blue stripes near the bottom of the canvas, i.e. glimpses that it is drawing only to get wiped out by new white. In the meantime, I will try to follow up on the one weirdness I can observe here, which is that it seems to be initializing twice on page reload, when it seems like once would suffice. I speculate that maybe if I could get rid of the double initializing here, then it might start displaying properly on your end.

Oh wait, I take it back. With the latest code, I only seem to be initializing once. So please do post that further information when you get a chance, and then if that doesn't ring any bells, I don't see any option but a joint debugging session when we can find the time, since nothing tangible awry is happening here :-/

The bug has apparently disappeared (?!??!!?) so we forge onwards!

OK, passing the baton back. Let me know how that works for you, in terms of error checking in all formula entry boxes and using the Opacity formula if there is no Highlight Opacity formula.

Incidentally, min(0.4, 0.01*m) might be an even better saturation equalizer than k*log(m), see what you think...

@gwhitney I don't know why, but the "changing a sequence" e2e test is timing out.  Are you seeing this?

Can't run tests right now since internet on plane is too slow. But there is one test -- I can't remember which -- that erratically times out for me (roughly one time in 3 or 4). It always passes on a re-run, in my experience. If you are getting one consistently timing out, try running just that one and then looking at the web report to see if you can see what's going on. If you're still stuck next time I have some time to look at this (likely Friday), I will poke around.

Interestingly your bug fix resulted in a 2 pixel difference in the Chaos snapshots.  So there was something (undetectable) wrong happening from it. :)

Ok, I think this is ready for review.  I think it's a big enough PR, that I've not implemented any new colour schemes or features in this latest round.  If you'd like to keep something for future, let me know and we can file an issue or you could feel free to add something or request something.  But nothing seems like a burning need for me right now, so I'm marking it ready.

Also, I must add, it never ceases to amaze me how a PR I think will be small -- some colour changes in ModFill -- will end up touching 60 files!  I guess I see why you try not to overlap PRs and rebase too much.

Also, I must add, it never ceases to amaze me how a PR I think will be small -- some colour changes in ModFill -- will end up touching 60 files! I guess I see why you try not to overlap PRs and rebase too much.

Well, "only" a dozen source files, the rest are all tests. And it's happening because we are still in process of flushing out fundamental bugs, and not being very disciplined about pausing the PR, doing a separate bug fix PR, and then rebasing the feature PR, since we are a small pre-alpha project.
I take it the test timeout stopped bothering you?

Interestingly your bug fix resulted in a 2 pixel difference in the Chaos snapshots. So there was something (undetectable) wrong happening from it. :)

Just in the CI snapshots, right?

Just in the CI snapshots, right?

Correct!

Ok, I think this is ready for review. I think it's a big enough PR, that I've not implemented any new colour schemes or features in this latest round. If you'd like to keep something for future, let me know and we can file an issue or you could feel free to add something or request something. But nothing seems like a burning need for me right now, so I'm marking it ready.

Right, that seems like a perfectly fine decision. Do any of the other colour's scheme suggestions seem like they are worth leaving as issues (meaning we intend to do them at some point)? Or should one of us move them to Discussions (meaning we will think about them someday but have not made any specific decision to necessarily ever implement them)? I am fine either way, just let me know your inclination.
I will review what's here so far when I have the chance, my guess is Fri or Sat.

Suggestion: I find the current incarnation of "Picasso's Periods" very strobe-y, to the point of being a bit unpleasant, and the blue/rose "periods" to go by  bit too quick. I'd suggest dialing the frame rate down to 30? What do you think? I understand you may not be able to respond for a while; I'll just hold on the review until you do have a chance to get back on this. If you decide you like the decision, I can push the change to defineFeatured if you want (super tiny change); if you decide you'd like to leave it as it is, I will just go ahead with the rest of the review (I already fixed one little bug, where a parameter was not disappearing if the default value of the parameter its visibility depended on was a value on which it should not appear).

Suggestion: I find the current incarnation of "Picasso's Periods" very strobe-y, to the point of being a bit unpleasant, and the blue/rose "periods" to go by bit too quick. I'd suggest dialing the frame rate down to 30? What do you think? I understand you may not be able to respond for a while; I'll just hold on the review until you do have a chance to get back on this. If you decide you like the decision, I can push the change to defineFeatured if you want (super tiny change); if you decide you'd like to leave it as it is, I will just go ahead with the rest of the review (I already fixed one little bug, where a parameter was not disappearing if the default value of the parameter its visibility depended on was a value on which it should not appear).

I think that's a good call.  Could even go to 20 if you prefer.  Also, you might decrease the opacity on the highlight from 0.4 to 0.3 -- if you think that looks good, you could fiddle with that too.  I'd be happy with any of these variations.  If you don't mind pushing your favourite variation in this general vicinity, that's great!

Wow, I wasn't expecting a response any time soon. I ended up at 24fps, a common speed between 20 and 30; and I didn't mind the "prime bursts" being so bright, but I did ramp up the saturation of the blue periods slightly. Proceeding with review.

I have just gone through the PR checklist and all seems good; merging.


DMChannel does not have "recipient" in v3.5.11

DMChannel of 4.0.0-dev has "recipient" but DMChannel of 3.5.11 does not have "recipient".

how did you fetch/create the DMchannel? if has recipient when you use client.channels.fetch() and user.createDM()

I just the send message in DMChannel.
However, I fetched only my account user(caching true) and send DMNotice when bot start. Then, discord.js v13 cached that DMChannel (discord.js v12 does not). I think it make difference of 4.0.0-dev and 3.5.11.
Thank you for your reply.

ah ok, caching behavior in v13/v4 is still not complete so there can be some differences.


Update redirect_uri

The redirect_uri listed in the README was not working correctly.  The proper URI is not well documented in python-social-auth, but the endpoint is here

Changes Unknown when pulling a5d4cbd83b4139ca322de4ec6999dc7fef0bbc1d on m3brown:callback into ** on excellalabs:master**.


Invalidate Cache on Project Update

When updating the status of a Project the engagements on that same page do not currently refresh automatically with their updated status.  The cache needs to be invalidated so that the client will re-pull this data.

So there's a few ways to solve this:

Update the mutation to include the properties that are changing.
Update the properties in local cache ourselves assuming the new values.
Delete or invalidate the properties from the local cache that are changing.

The first is better if the field is accessible from the response schema. It doesn't require an extra http request, and doesn't assume what the new value will be. It's also easy to do since it's just adding fields to the mutation document. Example 1. Example 2.
The second is useful if it's trivial to assume the new value, we can do that without having to ask the API for it, which could speed up the mutation response. Example 1. Example 2.
The third is useful if we don't know the new value and we can't get the value from the response schema. Invalidating the cached field allows the gql client to know to re-run the query when it is needed in the UI. This can also be useful when we aren't sure if the new value will be needed and don't want to slow down the mutation request every time.
Example


Uses sscanf for parsing files

sscanf is used for parsing files, for example
https://github.com/WolfireGames/overgrowth/blob/08da859107194d3d283c6b54565bffb656478a26/Source/Graphics/model.cpp#L422
This is 1. locale-dependent and 2. can be extremely slow, as seen recently with GTA5. Replace all of that with something better.

I agree that we should try to change this. However to avoid any regression issues, i'd like to introduce unit tests for the file loading first. Afterwards i can work on changing the file loaders and keeping compability to previous behavior

@feliwir @autious do we have a unit testing system in tree yet? if not, any suggestions?
I have been exploring and documenting the file loader stuff enough that I'd be happy to write some unit tests, if we have a way to run them.


Update FCL Dev Wallet to v0.8.0

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 29.54%. Comparing base (2ca6aae) to head (3a5b87a).

Additional details and impacted files
@@           Coverage Diff           @@
##           master    #1752   +/-   ##
=======================================
  Coverage   29.54%   29.54%
=======================================
  Files          88       88
  Lines        5154     5154
=======================================
  Hits         1523     1523
  Misses       3444     3444
  Partials      187      187

Flag
Coverage Δ

unittests
29.54% <ø> (ø)

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

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


Missing features not called out for Web Clients

[Enter feedback here]
There is a discrepancy in the documentation where it says that google chrome is fully supported with no call out of a missing feature. You can use the call me at function within Meeting details on Edge Chromium, but that feature is missing on Google Chrome. This is the ability to Enter phone number when you are in a meeting to call me by going through the ellipsis -> Meeting details.
Is that supposed to be called out in our documentation? I had some trouble explaining to a customer what does it mean when it says fully supported if its not feature parity.
Picture is from edge chromium where the feature is there.

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

ID: 6457d204-d229-9154-28fd-ca9bbb4bddcd
Version Independent ID: f5d82846-41cb-3548-6997-ce23bd8f89c6
Content: Get clients for Microsoft Teams - Microsoft Teams
Content Source: Teams/get-clients.md
Service: msteams
GitHub Login: @LolaJacobsen
Microsoft Alias: lolaj

@lachew Thank you for submitting feedback and contributing to the docs. We are currently investigating this.

@lachew thank you for reaching out and helping improve MS Docs. Just checking if the footnotes under the table have been taking into consideration and could be an issue with what's missing. "To give and take control of shared content during sharing, both parties must be using the Teams desktop client. Control isn't supported when either party is running Teams in a browser. This is due to a technical limitation that we're planning to fix."

Hello Lindsay,
I did read that, but the specific issue that my customer called out is not related to taking control. They were confused because Google Chrome says fully supported, but they couldn’t use call me at functionality on Google Chrome, could do it on Microsoft Edge.

Larry Chew
Technical Specialist – MW Teams
Financial Services Industry
Larry.Chew<EMAIL_ADDRESS>+1<PHONE_NUMBER>
[Microsoft]
From: Lindsay<EMAIL_ADDRESS>Sent: Thursday, July 2, 2020 6:05 AM
To: MicrosoftDocs/OfficeDocs-SkypeForBusiness<EMAIL_ADDRESS>Cc: Larry Chew<EMAIL_ADDRESS>Mention<EMAIL_ADDRESS>Subject: Re: [MicrosoftDocs/OfficeDocs-SkypeForBusiness] Missing features not called out for Web Clients (#5104)
@lachewhttps://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Flachew&data=02|01|Larry.Chew%40microsoft.com|66649a76cc444ed16c7308d81e88882b|72f988bf86f141af91ab2d7cd011db47|1|0|637292919035732890&sdata=1YfE07Gjyqk3ClUC9KJY2seqppwiQ5aDfYynFuGax4Q%3D&reserved=0 thank you for reaching out and helping improve MS Docs. Just checking if the footnotes under the table have been taking into consideration and could be an issue with what's missing. "To give and take control of shared content during sharing, both parties must be using the Teams desktop client. Control isn't supported when either party is running Teams in a browser. This is due to a technical limitation that we're planning to fix."
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHubhttps://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FMicrosoftDocs%2FOfficeDocs-SkypeForBusiness%2Fissues%2F5104%23issuecomment-652993393&data=02|01|Larry.Chew%40microsoft.com|66649a76cc444ed16c7308d81e88882b|72f988bf86f141af91ab2d7cd011db47|1|0|637292919035742885&sdata=QIDpDenLMuObOZj%2B8oP5DwBcIodp22ga4LI%2FSe6Fxm0%3D&reserved=0, or unsubscribehttps://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fnotifications%2Funsubscribe-auth%2FAP45SWNR7HG2DUAUIFPRX3LRZSAX3ANCNFSM4NZ4PRXA&data=02|01|Larry.Chew%40microsoft.com|66649a76cc444ed16c7308d81e88882b|72f988bf86f141af91ab2d7cd011db47|1|0|637292919035742885&sdata=DNFD%2B0KeiV3B32CHaiX8p3D22l5Tw5Mt2K4xT1Fg8WI%3D&reserved=0.

@lachew thank you, the team is working on a fix.

@scanum this can be closed thanks.

Thank you for submitting feedback. We understand that this issue has been resolved.
Please feel free to re-open this issue if there is a specific area of the docs that we can improve or make better. Thank you.


Angular POST request missing parameters

When issuing a POST request from our Angular frontend to our Laravel backend we encounter a problem when requesting the access-token. We receive a 400 error, where we can successfully request the token in Postman.
The request arrives in good order, i can see the headers with $request->header();
array:12 [
  "content-type" => array:1 [
    0 => "application/form-encoded"
  ]
  "content-length" => array:1 [
    0 => "0"
  ]
  "host" => array:1 [
    0 => "apm.dev"
  ]
  "connection" => array:1 [
    0 => "keep-alive"
  ]
  "origin" => array:1 [
    0 => "http://localhost"
  ]
  "user-agent" => array:1 [
    0 => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36"
  ]
  "accept" => array:1 [
    0 => "application/json, text/javascript, */*; q=0.01"
  ]
  "username" => array:1 [
    0 =><EMAIL_ADDRESS>  ]
  "password" => array:1 [
    0 => "secret"
  ]
  "referer" => array:1 [
    0 => "http://localhost/apm-test/test.html"
  ]
  "accept-encoding" => array:1 [
    0 => "gzip, deflate"
  ]
  "accept-language" => array:1 [
    0 => "en-US,en;q=0.8,nl;q=0.6,fr;q=0.4,de;q=0.2"

Here is my request as currently used in Angular:
 var config = {
            headers: {
                // 'Content-Type': 'application/form-encoded',
                'grant_type' : 'password',
                'client_id' : '1',
                'client_secret' : '1234',
                'username' : this.username,
                'password' : this.password
            }
        };

        $http.post('http://apm.dev/oauth/access_token', config)

But when  I call the Response::json(Authorizer::issueAccessToken()) No token is returned, but this error is:
"error":"invalid_request","error_description":"The request is missing a required parameter, includes an invalid parameter value, includes a parameter more than once, or is otherwise malformed. Check the \"grant_type\" parameter."}

I'm using Laravel 5.1 and oauth2-server-laravel": "5.0.*"
Could you give some hints how to get this to work?
Thanks!

Have you checked this? https://github.com/lucadegasperi/oauth2-server-laravel/wiki/Apache-ModRewrite

Thank you for replying!
I'm sorry, i forgot to mention i'm developing on Homestead, so this project runs on Nginx.

Try to use next header in request:
"Content-Type": "application/x-www-form-urlencoded"

Thanks for your contribution in this matter pashamesh.
Due to other work I wasn't able to respond earlier, but this morning I tried your solution, the header was allready set, so i just moved the other data like you suggested. I'm still getting 400 errors. So no luck yet.
Today i'll be focussing on resolving this issue and will keep you all posted.

Also you can use $httpParamSerializerJQLike instead of $.param to avoid jQuery dependency.
https://docs.angularjs.org/api/ng/service/$httpParamSerializerJQLike

Much easier to remember as well ;)
on a serious note, thank you for the suggestion!


"HTTP Error 404: Not Found" when collecting ICANN emails

Running this script:
python2 bin/collect_mail.py -f examples/mm.icann.org.txt
gets me this stack trace:
'retrieving http://mm.icann.org/pipermail/absdt2011-January.txt.gz'
Traceback (most recent call last):
  File "bin/collect_mail.py", line 41, in <module>
    main(sys.argv[1:])
  File "bin/collect_mail.py", line 38, in main
    mailman.collect_from_file(arg)
  File "/home/sb/projects/nllz-bigbang/bigbang/bigbang/mailman.py", line 94, in collect_from_file
    collect_from_url(url)
  File "/home/sb/projects/nllz-bigbang/bigbang/bigbang/mailman.py", line 80, in collect_from_url
    collect_archive_from_url(url)
  File "/home/sb/projects/nllz-bigbang/bigbang/bigbang/mailman.py", line 142, in collect_archive_from_url
    resp = urllib2.urlopen(gz_url)
  File "/home/sb/anaconda/envs/nllz/lib/python2.7/urllib2.py", line 154, in urlopen
    return opener.open(url, data, timeout)
  File "/home/sb/anaconda/envs/nllz/lib/python2.7/urllib2.py", line 437, in open
    response = meth(req, response)
  File "/home/sb/anaconda/envs/nllz/lib/python2.7/urllib2.py", line 550, in http_response
    'http', request, response, code, msg, hdrs)
  File "/home/sb/anaconda/envs/nllz/lib/python2.7/urllib2.py", line 475, in error
    return self._call_chain(*args)
  File "/home/sb/anaconda/envs/nllz/lib/python2.7/urllib2.py", line 409, in _call_chain
    result = func(*args)
  File "/home/sb/anaconda/envs/nllz/lib/python2.7/urllib2.py", line 558, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 404: Not Found

URL for the archive file is being constructed incorrectly. The correct URL is:
http://mm.icann.org/pipermail/absdt/2011-January.txt.gz
Note the slash, not das, between absdt and 2011.

Nice find!

https://github.com/nllz/bigbang/commit/1a628bf55034977a1fd8b63f26585488c16b2b4e


ci: fix makefile docker ownership

Fix the docker user flag to properly fetch group and user IDs.
Without this, on linux with GNU Make 4, a new registry component will end up throwing an error:
[error] Unable to write file "docs/attributes-registry/csi.md":

because it writes out as root rather than the current user.

it seems to break policy check :(

Doh. I don't think we need it here anyway, it's just a read-only mount, and unless we have world read off (not so common) this should work fine. Seems the weaver container is running under its own UID/GID.
Removed in https://github.com/open-telemetry/semantic-conventions/pull/1386/commits/33d04316ecea2833ccb44f3c4fb01aafccc33062