Superclass mismatch when Neo4jrb generates model migration

On a new install of Rails 5.1.1 with Neo4jrb (installed using the rails new myapp -m http://neo4jrb.io/neo4j/neo4j.rb -O option described in the setup docs), running rails g model User creates a user.rb file in the models folder containing
class User
  include Neo4j::ActiveNode
end

and a migration file containing class User < Neo4j::Migrations::Base and results in a superclass mismatch error when I try and run rake neo4j:migrate.
If I edit the migration file to update its class name to CreateUser, the superclass mismatch error is eliminated but I get a new ArgumentError: wrong number of arguments (given 2, expected 0..1).
I can't seem to find much information on migration files in the docs, so I'm not sure what the argument error is referring to.
Runtime information:
Neo4j database version: 3.1.4
neo4j gem version: 8.0.17
neo4j-core gem version: 7.1.2
neo4j-rake_tasks gem version: 0.7.12

If you change the class to CreateUser in the migration you may need to change the filename to match.  though I don't think that would be the error.  It would also be useful to have that error's backtrace if you're still having the issue.
Also, if you're still having the issue could you try Rails 5.0 or even 4.2 just in case?  I don't think that the 5.1 updates would have broken this, but this hasn't been an issue before, so you never know
Thanks

I'll try to post some results from rails 5.0. In Rails 5.1.1, having run rails g model Person, running rake neo4j:migrate produces this backtrace:
** Invoke neo4j:migrate (first_time)
** Execute neo4j:migrate
** Invoke neo4j:migrate:all (first_time)
** Invoke neo4j:allow_migrations (first_time)
** Execute neo4j:allow_migrations
** Invoke environment (first_time)
** Execute environment
** Execute neo4j:migrate:all
==<PHONE_NUMBER>0213 Person: running... ===========================================
rake aborted!
TypeError: superclass mismatch for class Person
/home/ubuntu/volunteer-center-server/db/neo4j/migrate/20170526010213_person.rb:1:in `<top (required)>'
/home/ubuntu/.rvm/gems/ruby-2.4.0/gems/activesupport-5.1.1/lib/active_support/dependencies.rb:292:in `require'
/home/ubuntu/.rvm/gems/ruby-2.4.0/gems/activesupport-5.1.1/lib/active_support/dependencies.rb:292:in `block in require'
/home/ubuntu/.rvm/gems/ruby-2.4.0/gems/activesupport-5.1.1/lib/active_support/dependencies.rb:258:in `load_dependency'
/home/ubuntu/.rvm/gems/ruby-2.4.0/gems/activesupport-5.1.1/lib/active_support/dependencies.rb:292:in `require'
/home/ubuntu/.rvm/gems/ruby-2.4.0/gems/neo4j-8.0.17/lib/neo4j/migrations/migration_file.rb:12:in `create'
/home/ubuntu/.rvm/gems/ruby-2.4.0/gems/neo4j-8.0.17/lib/neo4j/migrations/runner.rb:114:in `block in migrate'
/home/ubuntu/.rvm/gems/ruby-2.4.0/gems/neo4j-8.0.17/lib/neo4j/migrations/runner.rb:121:in `migration_message'
/home/ubuntu/.rvm/gems/ruby-2.4.0/gems/neo4j-8.0.17/lib/neo4j/migrations/runner.rb:113:in `migrate'
/home/ubuntu/.rvm/gems/ruby-2.4.0/gems/neo4j-8.0.17/lib/neo4j/migrations/runner.rb:26:in `block in all'
/home/ubuntu/.rvm/gems/ruby-2.4.0/gems/neo4j-8.0.17/lib/neo4j/migrations/runner.rb:24:in `each'
/home/ubuntu/.rvm/gems/ruby-2.4.0/gems/neo4j-8.0.17/lib/neo4j/migrations/runner.rb:24:in `all'
/home/ubuntu/.rvm/gems/ruby-2.4.0/gems/neo4j-8.0.17/lib/neo4j/tasks/migration.rake:53:in `block (3 levels) in <top (required)>'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/task.rb:250:in `block in execute'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/task.rb:250:in `each'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/task.rb:250:in `execute'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/task.rb:194:in `block in invoke_with_call_chain'
/home/ubuntu/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/monitor.rb:214:in `mon_synchronize'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/task.rb:187:in `invoke_with_call_chain'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/task.rb:180:in `invoke'
/home/ubuntu/.rvm/gems/ruby-2.4.0/gems/neo4j-8.0.17/lib/neo4j/tasks/migration.rake:46:in `block (2 levels) in <top (required)>'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/task.rb:250:in `block in execute'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/task.rb:250:in `each'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/task.rb:250:in `execute'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/task.rb:194:in `block in invoke_with_call_chain'
/home/ubuntu/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/monitor.rb:214:in `mon_synchronize'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/task.rb:187:in `invoke_with_call_chain'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/task.rb:180:in `invoke'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/application.rb:152:in `invoke_task'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/application.rb:108:in `block (2 levels) in top_level'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/application.rb:108:in `each'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/application.rb:108:in `block in top_level'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/application.rb:117:in `run_with_threads'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/application.rb:102:in `top_level'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/application.rb:80:in `block in run'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/application.rb:178:in `standard_exception_handling'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/application.rb:77:in `run'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/exe/rake:27:in `<top (required)>'
/home/ubuntu/.rvm/rubies/ruby-2.4.0/bin/rake:22:in `load'
/home/ubuntu/.rvm/rubies/ruby-2.4.0/bin/rake:22:in `<main>'
Tasks: TOP => neo4j:migrate:all

If I change class Person < Neo4j::Migrations::Base in db/neo4j/development/migrate/xxxx_person.rb to class CreatePerson < Neo4j::Migrations::Base then running rake neo4j:migrate produces this backtrace
** Invoke neo4j:migrate (first_time)
** Execute neo4j:migrate
** Invoke neo4j:migrate:all (first_time)
** Invoke neo4j:allow_migrations (first_time)
** Execute neo4j:allow_migrations
** Invoke environment (first_time)
** Execute environment
** Execute neo4j:migrate:all
==<PHONE_NUMBER>0213 Person: running... ===========================================
rake aborted!
ArgumentError: wrong number of arguments (given 2, expected 0..1)
/home/ubuntu/.rvm/gems/ruby-2.4.0/gems/neo4j-8.0.17/lib/neo4j/active_node.rb:49:in `initialize'
/home/ubuntu/.rvm/gems/ruby-2.4.0/gems/neo4j-8.0.17/lib/neo4j/migrations/migration_file.rb:13:in `new'
/home/ubuntu/.rvm/gems/ruby-2.4.0/gems/neo4j-8.0.17/lib/neo4j/migrations/migration_file.rb:13:in `create'
/home/ubuntu/.rvm/gems/ruby-2.4.0/gems/neo4j-8.0.17/lib/neo4j/migrations/runner.rb:114:in `block in migrate'
/home/ubuntu/.rvm/gems/ruby-2.4.0/gems/neo4j-8.0.17/lib/neo4j/migrations/runner.rb:121:in `migration_message'
/home/ubuntu/.rvm/gems/ruby-2.4.0/gems/neo4j-8.0.17/lib/neo4j/migrations/runner.rb:113:in `migrate'
/home/ubuntu/.rvm/gems/ruby-2.4.0/gems/neo4j-8.0.17/lib/neo4j/migrations/runner.rb:26:in `block in all'
/home/ubuntu/.rvm/gems/ruby-2.4.0/gems/neo4j-8.0.17/lib/neo4j/migrations/runner.rb:24:in `each'
/home/ubuntu/.rvm/gems/ruby-2.4.0/gems/neo4j-8.0.17/lib/neo4j/migrations/runner.rb:24:in `all'
/home/ubuntu/.rvm/gems/ruby-2.4.0/gems/neo4j-8.0.17/lib/neo4j/tasks/migration.rake:53:in `block (3 levels) in <top (required)>'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/task.rb:250:in `block in execute'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/task.rb:250:in `each'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/task.rb:250:in `execute'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/task.rb:194:in `block in invoke_with_call_chain'
/home/ubuntu/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/monitor.rb:214:in `mon_synchronize'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/task.rb:187:in `invoke_with_call_chain'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/task.rb:180:in `invoke'
/home/ubuntu/.rvm/gems/ruby-2.4.0/gems/neo4j-8.0.17/lib/neo4j/tasks/migration.rake:46:in `block (2 levels) in <top (required)>'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/task.rb:250:in `block in execute'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/task.rb:250:in `each'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/task.rb:250:in `execute'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/task.rb:194:in `block in invoke_with_call_chain'
/home/ubuntu/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/monitor.rb:214:in `mon_synchronize'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/task.rb:187:in `invoke_with_call_chain'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/task.rb:180:in `invoke'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/application.rb:152:in `invoke_task'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/application.rb:108:in `block (2 levels) in top_level'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/application.rb:108:in `each'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/application.rb:108:in `block in top_level'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/application.rb:117:in `run_with_threads'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/application.rb:102:in `top_level'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/application.rb:80:in `block in run'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/application.rb:178:in `standard_exception_handling'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/lib/rake/application.rb:77:in `run'
/home/ubuntu/.rvm/gems/ruby-2.4.0@global/gems/rake-12.0.0/exe/rake:27:in `<top (required)>'
/home/ubuntu/.rvm/rubies/ruby-2.4.0/bin/rake:22:in `load'
/home/ubuntu/.rvm/rubies/ruby-2.4.0/bin/rake:22:in `<main>'
Tasks: TOP => neo4j:migrate:all

My db/neo4j/development/migrate/xxxx_person.rb file only contains the code automatically generated from rails g model Person. Specifically:
class Person < Neo4j::Migrations::Base
  def up
    add_constraint :Person, :uuid
  end

  def down
    drop_constraint :Person, :uuid
  end
end

For the first run and:
class CreatePerson < Neo4j::Migrations::Base
  def up
    add_constraint :Person, :uuid
  end

  def down
    drop_constraint :Person, :uuid
  end
end

For the second run.

@cheerfulstoic testing in rails 5.0 worked, so I retried with a new rails 5.1.1 project and that worked. I thought I had originally tested with a clean install of 5.1.1 before creating this issue, but obviously I changed something as now everything seems to be working. I'm still not sure what caused the original issue.
Thanks for the quick response!

@cheerfulstoic This issue popped up again and I was able to figure out what is causing it (kinda). If the trailblazer-rails gem is included in the gemfile (along with neo4j), running rake neo4j:migrate raises a superclase missmatch error. Commenting out the trailblazer-rails gem makes the migration work normally again. I've gone through my app and commented out all uses of trailblazer and the error is still raised, so I think merely including the gem raises the error.
When originally posting this issue, I had immediately added trailblazer to my new project (including trailblazer-rails), encountered the error, and then forgot I had added the trailblazer-rails gem (note, the trailblazer gem itself does not seem to cause any issues).

@cheerfulstoic, you can see a discussion of this bug in an issue I made for trailblazer-rails. @apotonick, the creator of trailblazer, seems convinced the issue lies with the neo4j gem.
I must admit I don't totally follow his reasoning as I didn't think include Neo4j::ActiveNode counted as inheriting a superclass.

That is not what I said, @thefliik. The problem is that neo4j defines Product twice, once in the migration as class Product < Neo4j::Migrations::Base and once as class Product with an include. These are two entirely different things and shouldn't have the same name.
It is probably not even the neo4j gem but your naming of the migration.

@apotonick, I didn't mean to offend or misquote. As I mentioned, I'm not super experienced with ruby and a greatly appreciate your feedback thus far. I didn't realize that class A < B would conflict with class A. I thought it would only conflict with class A < B and class A < C.
neo4j automatically names the migration (I haven't modified any files except through standard rake tasks, here rails g model Person) and renaming the migration generates a different error (referenced in this issue above). It appears that neo4j expects the migration to have the same class name as the model being migrated, which seems to put these two gems at odds with one another.
As I mentioned over here, I can work around the issue by simply commenting out trailblazer-rails whenever I want to run a migration. A little annoying but not the end of the world.

I am tending to make neo4j the villain here: The migration code should be designed to work in any environment, and not just when models are not loaded.

Hmmm. I suppose I didn't think very far ahead. It'll be a larger problem during deployment...

In case anyone else runs into this issue, I created a rake task to get around it by automatically commenting-out gem "trailblazer-rails", running rake neo4j:migrate, and then un-commenting-out gem "trailblazer-rails"
desc "Migrate task to work around neo4j + trailblazer-rails bug"
task migrate: :environment do
    original = File.open('Gemfile', File::RDWR)
    original_copy = original.read
    # as file is read, ruby remembers its place in file so .read takes us to the end
    # need to move cursor back to beginning
    original.rewind
    modified = Tempfile.new('temp')
    # create modified file which is copy of original except gem "trailblazer-rails"
    # is commented out
    original.each do |line|
      if line =~ /gem \"trailblazer-rails\"/
        modified.write("##{line}")
      else
        modified.write(line)
      end
    end
    original.rewind
    modified.rewind
    # write over original file with modified temp file
    original.write(modified.read)
    modified.close
    original.close
    # Run migrations
    # Need to spawn new rake process so that environment is reloaded
    system("rake neo4j:migrate")
    # load original file
    File.open('Gemfile', 'w+').write(original_copy)
end

This should absolutely not be considered as a solution! The real problem lies within neo4j's convention of requiring the migration class name to be identical to the actual model class. THIS IS WRONG and is supposed to break in any kind of environment, not just TRB.
Please find out how those two same-named classes could be avoided, instead. The temporary fix above is scary and doesn't help the two gems to work together correctly.

For example, what if you'd namespace your migrations?
module Migration
  class Person < ...
end

So I've run into this bug again. This time with the omniauth-identity gem (which is the standard login/password strategy for the omniauth gem). If configuring omniauth-identity with a custom auth model, you must set up an initializer like so:
Rails.application.config.middleware.use OmniAuth::Builder do
  provider :identity, :fields => [:email], :model => MyCustomClass
end

WIth this initializer, running rake neo4j:migrate produces a superclass mismatch error. I assume because OmniAuth causes rails' models to load during initialization.
I'm a little surprised I've run into this issue twice in two days. Am I doing something wrong with neo4j migrations? Based on my own experience, I would think that this issue would be popping up with some regularity.
When I try to change the name of a migration, such as:
class CreatePerson < ...

or
module Migration
  class Person < ...
  end
end

I experience a ArgumentError: wrong number of arguments (given 2, expected 0..1)
I have an stripped down sample project documenting the problem which can be viewed here. It's currently set up to demonstrate the issue with omniauth-identity, with the trailblazer gems being commented out.

AH HA!!! It looks like I was doing something wrong. Adding force: true to a migration seems to fix the ArgumentError: wrong number of arguments (given 2, expected 0..1) and allow the migration to have a different name then the model. So the solution is to change this (the automatically generated migration):
class Person < Neo4j::Migrations::Base
  def up
    add_constraint :Person, :uuid
  end

  def down
    drop_constraint :Person, :uuid
  end
end

to this:
class ConstrainPerson < Neo4j::Migrations::Base
  def up
    add_constraint :Person, :uuid, force: true
  end

  def down
    drop_constraint :Person, :uuid
  end
end

It appears that the file name also needs to be updated from xxxxx_person.rb to xxxxxx_constrain_person.rb. Note I'm note yet sure what force: true is actually doing, other than fixing my problems, and I'm not sure if it needs to be added to the def down method as well.
I'll leave the issue open for now in case a future release can change the format of the automatically generated migrations (a.k.a. the migration created when rails g model Person is run). But I think this solution solves all of my issues.
Finally, despite all of these issues, thanks so much for all of the awesome work on this gem!!!!!!

Doesn't ActiveRecord require that the migration class name be the same as the migration file name?  We simply copied the behavior of the well-worn gem.  Generally this isn't a problem because migrations should be generated (I often skip using generators for lots of things, but I never do for migrations).  And you should definitely make the migration not be the same name as the model.  I always name my migrations something like "add_person" instead of just "person".
That said, I'm sure this might happen again to somebody else.  I'd want to know how ActiveRecord handles it first

It's exactly as you say @cheerfulstoic - naming the migration Person wasn't a good choice and renaming it "surprisingly" fixed it.

@cheerfulstoic, the problem is that the migration class name is the same as the model class name. active record does not do this. When you generate a model in active record, the migration created to accompany the model is prefixed with create, and the migration is made plural.
As an example, in active record  running rails g model Person creates
app/models/person.rb
db/migrate/xxxxx_create_people.rb

app/models/person.rb contains
def Person < ActiveRecord::Base

end

db/migrate/xxxxx_create_people.rb contains
def CreatePeople < ActiveRecord::Migration

end

In neo4j running rails g model Person creates
app/models/person.rb
db/migrate/xxxxx_person.rb

app/models/person.rb contains
def Person
  include Neo4j::ActiveNode

end

db/migrate/xxxxx_person.rb contains
def Person < Neo4j::Migrations::Base

end

Neo4j's template creates a superclass mismatch error. If I manually change the class name in the migration (such as to def ConstrainPerson), I need to add force: true as an argument to make it work.
A good solution in neo4j would look like this:
running rails g model Person creates
app/models/person.rb
db/migrate/xxxxx_constrain_person.rb

app/models/person.rb contains
def Person
  include Neo4j::ActiveNode

end

db/migrate/xxxxx_constrain_person.rb contains
def ConstrainPerson < Neo4j::Migrations::Base

end

without needing force: true to make it work.

@cheerfulstoic, I'll also note:
Running neo4j's generator to create a constraint migration "manually" also makes use of force: true to make it work. i.e.
Running rake neo4j:generate_schema_migration[constraint,ConstrainPerson,uuid] creates db/migrate/xxxxx_force_create_constrain_person_uuid_constraint.rb containing
class ForceCreateConstrainPersonUuidConstraint < Neo4j::Migrations::Base
  def up
    add_constraint :ConstrainPerson, :uuid, force: true
  end

  def down
    drop_constraint :ConstrainPerson, :uuid
  end
end

Oh, duh!  I missed that you were using the model generator.  Definitely that should be creating a different class name.  I think that would be easy, let me have a quick look.
The force: true is added when doing the generate_schema_migration because it's creating a special migration to create the id_property's constraint and the important thing there is that that the constraint exists (even if it was already created).  This was partially because users had to migrate from a system in which constraints and indexes were created automatically by defining them on the models (which turned out to be difficult to support.  In the normal case if you're adding a constraint for any given field, it's useful to know if the constraint is already there (though the force option is still available to you)

Just released version 8.0.18.  Give it a try!

@cheerfulstoic, WOW that was fast!!! You're awesome!! It's totally working!!!
This will definitely simplify my workflow. Thank you so much!!!!! And on a Sunday no less!!!
As more of an FYI (because it's such a small issue), while testing the patch I noticed that running rails g model Person does:
      invoke  neo4j
      create    app/models/person.rb
>      create    db/neo4j/migrate/20170605063357_create_person.rb
      invoke    test_unit
      create      test/models/person_test.rb
      create      test/fixtures/people.yml

Then running rails destroy model Person does:
      invoke  neo4j
      remove    app/models/person.rb
>      remove    db/neo4j/migrate/20170605063502_create_person.rb
      invoke    test_unit
      remove      test/models/person_test.rb
      remove      test/fixtures/people.yml

Notably, the version numbers of the migration files (a.k.a the timestamps) in the two scripts mismatch (while they should be the same). This results in the migration file not being removed by the script.

I'm going to reiterate that this gem is awesome and I SUPER APPRECIATE all the volunteer work you've put into it!!!!!

Oh, wow, I didn't even realize that there was a rails destroy model! ;)
I'll have a look in a bit at that, and glad that you're enjoying the gem! ;)

This is primarily a note to myself for when I have time to fix the handling of rails destroy model:
ActiveRecord's migration handling is defined in https://github.com/rails/rails/blob/master/railties/lib/rails/generators/migration.rb
Importantly, ActiveRecord finds an existing migration by ignoring the file's timestamp and just looking at the migration name migration_lookup_at(dirname).grep(/\d+_#{file_name}.rb$/).first


PowerRename: Possibility to choose between “Created” and “ Changed” date

Description of the new feature / enhancement
Hello!
The “Created” date is currently used for _$YYYY.$MM.$DD (see screenshot). But for us, the “Changed” date is often relevant, see screenshot.
It would be helpful to be able to switch in the PowerRename interface whether the “Created” or “Changed” date is used for the current renaming.
I would ask you to check this.
Thank you very much.
Matthias

Scenario when this would be used?
We often receive files (e.g. floor plans) without an index/date in the file name. We would like to add _$YYYY.$MM.$DD to these PDFs with PowerRename so that the “changed” date is visible in the file name.
Supporting information
v0.83.0
Windows 11, 64bit, German

This is a good suggestion but there is probably a wider range of dates that should be made available for inclusion.
For example:
Date Created
Date Modified
Date Taken
(there are others but they may be infrequently used)
The latter one, Date Taken, is very important for images and is what I find missing.
Maybe the UI needs checkboxes to allow the desired Date option to be select for use .


coredns: Fix cross-compile

Description of changes
When running go generate, an intermediate binary is built called directives_generate, which will be built with whatever is defined in GOARCH.

Things done

Built on platform(s)

[x] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[x] Tested basic functionality of all binary files (usually in ./result/bin/)
23.11 Release Notes (or backporting 23.05 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[x] Fits CONTRIBUTING.md.

@ofborg build pkgsCross.aarch64-multiplatform.coredns

https://github.com/ofborg build pkgsCross.aarch64-multiplatform.coredns


Allow per-folder settings at the code-workspace level

Related and closed: Allow to define per folder settings in .code-workspace files #81153

A workspace should be able to support multiple Java projects in a single workspace. However the limitations of the "java project" currently only allows "java.project.referencedLibraries" to be applied if directory is the root directory opened by the editor.
Example structure:

project_root

project.code-workspace

Here, we define a folder for module1 and module 2 (breaking the "java project" paradignm)

module1

.vscode

settings.json

src

module2

.vscode

settings.json

src

Because the code-workspace is the only honored "java.project.referencedLibraries", it breaks code completion. It also forces each module to then have the same dependencies and the same JVM definitions.
This is only true for non Maven project / unmanaged projects, like Bazel, or more complex project builds.
It would be great to see the 'code-workspace' support:
{
  "folders": [
   {
     "name": "Module One",
     "path": "./module1",
    "settings": {
      ...
    }
  ],
  "settings": {
    ...
  }
  ...

This could be achieved if .vscode/settings.json files were flat-mapped into their own configuration space too.

As mentioned in the related issue https://github.com/microsoft/vscode/issues/81153 we have no plans in supporting this feature. I would recommend to reach out to Java Extension and ask them to make java.project.referencedLibraries as a resource scoped setting. I think supporting this feature does not help unless this setting is made resource scoped.

What about honoring the .vscode/settings.json? I will work with the Java and Go extensions teams also. Is there a limitation in the management segmentation that makes this 'too complex'?

Scope of this setting is set to window that means it is not honoured in a multi-root workspace even if the folder has this setting in .vscode/settings.json. The owner of this setting has to change it to resource scope and adopt it accordingly. Hence asked to file an issue against the Java extension to support it.

Got it, I'll work with those teams. Love the product, just carrying a lot of assumptions from other IDEs.


Chinese Traditional translate

Thanks for your contribution, I've added these translations to the newly configured Crowdin page.
They will be merged with #72
Let me know your Crowdin username and I can add you as a translator.

Thanks for your contribution, I've added these translations to the newly configured Crowdin page.
They will be merged with #72
Let me know your Crowdin username and I can add you as a translator.
my Crowdin username is the same as my Github username


Requests getting checked every frame [NOT IMPORTANT]

In the following code in scratchattach._cloud_requests.CloudRequests._run, "data" is reversed, which also reverses self.ws_data. I think this causes the program to check all requests every frame.
 while True:

            if data_from_websocket or self.respond_in_thread:
                data = self.ws_data # Here data is set to self.ws_data
            else:
                data = _cloud.get_cloud_logs(self.project_id, limit=100, log_url=self.log_url, filter_by_var_named="TO_HOST")
                self.ws_data = data
            if self.ws_data == []:
                continue
            data.reverse() # Here data is reversed
            if self.last_data == data:
                pass
            else:
                for activity in data:

It could be fixed by changing data.reverse() to data = reversed(data) or data = data.copy(); data.reverse()

True. I’ll make this code more efficient

Will be changed to data = reversed(data) in v1.1.8


I have an exception where the file does not exist and the same file is accessed at the same time

INFO:rank:Loading checkpoint at ./checkpoints/ckpt-0
Traceback (most recent call last):
File "C:\Users\w2983\Desktop\grok-1\checkpoint.py", line 52, in copy_to_shm
shutil.copyfile(file, tmp_path)
File "C:\Users\w2983\AppData\Local\Programs\Python\Python39\lib\shutil.py", line 264, in copyfile
with open(src, 'rb') as fsrc:
FileNotFoundError: [Errno 2] No such file or directory: './checkpoints/ckpt-0\tensor00000_000'
File "C:\Users\w2983\Desktop\grok-1\checkpoint.py", line 55, in copy_to_shm
os.remove(tmp_path)
PermissionError: [WinError 32] 另一个程序正在使用此文件，进程无法访问。: '\dev\shm\tmpri0li3ul'

I have tried some methods, but still can't solve this problem, my brain is dying recently

@ibab @jaimealonso @madaan @chentingpc

@xhzwjc surround it with try except block ...
issue is where file is not closed and python code wants to delete that temp file.

@yarodevuci
I have adopted


Upgrade terraform-provider-random to v3.6.0

This PR was generated via $ upgrade-provider pulumi/pulumi-random.

Upgrading terraform-provider-random from 3.5.1  to 3.6.0.
Fixes #503

Looks like linter is a bit unhappy. Would you like us to take over and finish up?


Notes for projects.

"...Add some notes to the entire project/plate, which is a feature I would have liked to see in some other software like Trotec's JobControl. Putting notes in separate text files is annoying."
Notes on a project for a project file seems pretty easy to implement and the people who like them will certainly like to keep that stuff.

This is actually largely done in 0.6.1 tho without user interface. The notes command in console shows and saves notes, which are then saved in the file itself.

Notes for projects are properly live with their own interface in 0.6.3


Project/Editor Settings doesn't show type icons

Godot version:
cfcb6e11f25adb13177ba08777263288a5ec6f61
Issue description:
Definitely related to #19318.

Well it's the same as #19318, both use the property editor.


JBPM-5192 - After the simulation fails the server becomes unresponsiv…

…e and it does not even respond to shutdown requests

+1
Only comment I have is that we could point out the existence of the system property in the error message: Unable to calculate path elements of the process - max size (" + maxElementsSize + ") of elements exceeded. Use -Dorg.jbpm.simulation.max.elements to increase this limit. Not sure that's needed or desired though.

this property is given just in case simulation still works for big (though not complex) processes which would then exceed the default limit. In most of the cases it should not reach that in normal cases but only in those that simulation cannot handle, meaning increasing limit will not help anyway.

build failure (tests) not related to this one though they are related to JBPM-5191, will update tests accordingly and rerun the build


DatePicker slow during open

Running Win10 with latest Chrome and, whenever I open a datepicker, it is taking about 1-2 seconds for dialog to show up. When range is enabled, the dialog appears almost instantly.

When range is enabled, the dialog appears almost instantly.

It's not instantly for me still it's much better. I will try to fix this. Good catch :+1:


How can I change the refresh rate?

Is there a way to make it refresh faster (ex: 2 seconds)?
Or is there a reason that it cant go faster.

Value on line 346 controls how often the page will refresh if OUT OF STOCK button is found.  Change this to 2000.


Problem opening files from File Explorer

Bug Description:
Hello: I tried to open a php file from the file scan and opening the context menu to select with which application to open it. But selecting TheiaBluePrint only opens the editor but does not open the php file. I can only open it from the file menu of the TheiaBluePrint. I put together pictures to explain the problem.

Steps to Reproduce:

Open File Exprorer
Select a PhP file and check contextal menu to indicate "Open with"
3.Select TheiaBluePrint

Additional Information

Operating System: Windows 7 Prof
Theia Version:1.24.0

Hi, thank you for the report. I can reproduce the issue.
After a first investigation I think the issue is that Theia tries to parse the opened file as a workspace-configuration-file, which leads to a warning similar to this: root WARN Not a valid workspace file: /c:/Users/user/git/theia-blueprint/README.md
Since the file is not a valid workspace file, parsing will fail, and it will open with an empty workspace.
We'll have to check how Theia may support this


Timeline contribution point

This covers topics in #84297.
I'd like to extend the information displayed in the timeline beyond local changes and version control commits. In my case, our extension generated machine learning experiments for a project. I'd like to include a reference to each experiment that contains the active (or pinned) file. This would let the user easily compare an experiment version of a file to the current version.
The timeline for a file is already generalized to support local and version control events. IMO it ought to be opened to extensions to add value here. E.g. data versioning is now a topic, with various systems tracking changes to data set sources outside of version control (these files are often quite large and are not stored in git/etc but still need to be version controlled).

Proposed API is already available at https://github.com/microsoft/vscode/blob/main/src/vscode-dts/vscode.proposed.timeline.d.ts

\duplicate https://github.com/microsoft/vscode/issues/84297


tensorflow 2

Hi @dahliau ,
Thanks for your work. It is very interesting.
Do you plan to re-implement your code using tensorflow 2?
I found it difficult to reproduce your work. Thanks very much.

Hi @david-ngo-sixense ,
Currently there is no plan to re-implement the entire code. Is there a specific part which you found more difficult to re-implement? If so, let me know.


Scanner Not Scanning ON LG Devices - LG4 LG5 LG6

The scanner cannot seem to focus on the lg devices. Found this issue on the LG4 and just replicated the issue on the LG6. Seems the phone has 2 lenses for the back facing camera and It cannot focus to scan a barcode is there any ways I can grab just one of those lenses for these devices?.

@smithjosh5461 ever figure out anything related to this?

@ericblade Unfortunately I have not!

@smithjosh124 one of my testers pointed out to me that the G5 and G6 have multiple  rear facing cameras, and that it appears to default to using the wide angle. I haven't yet implemented a device enumeration function in my app to see if that helps, though.  G4 does not appear to share that trait, though.

@smithjosh124 Quagga.CameraAccess.enumerateVideoDevices() on a G5 returns:
camera2 2, facing back
camera2 1, facing front
camera2 0, facing back

i haven't yet got the interface to actually switch cameras, but i should have that soon, and maybe can report if that fixes it at all

@smithjosh124 "camera2 0, facing back" seems to autofocus if opened by specifying the deviceId for it.  I finally got to implementing camera selection for my app, and a G5 user has reported that it can now scan barcodes, with that camera device selected.

This 100% fixes for G5 and G6, selecting the correct camera device.  I do not have a solution for G4, although I have tried requiring auto-focus in the constraints, that didn't seem to achieve anything, as well as forcing autoFocus on in the settings.  Perhaps if there's anyone else out there with a G4, we should file a separate ticket on that, although I don't know what the solution might be.


A better way to handle .first()

Currently it looks like when .first() is used on a Knex query, the full array response is still returned to it, so you have to change your response based on whether you know .first() is being used or not.
The simplest fix for the end user here would probably be to use the first item of the passed in array for .first() (or undefined if there is none).

Can you elaborate it? Example will help 🙏🏼
You van register an handler for the specific query which .first constructs (it adds limit 1 at the end) and return the object you want to get.

Well first, thanks for this lib @felixmosh !
Having faced the same case as @icopp , I think the issue here is that knex returns a different kind of response.
Indeed knex('users').where({id : 1}).limit(1) returns an array of length = 1, whereas knex('users').where({id : 1}).first() directly returns the first row (essentially, you have to write const [ user ] = knex('users').where({id : 1}).limit(1) but can write const user = knex('users').where({id : 1}).first();`)
With the example above, I believe select * from users where ... limit 1 would match both, but break for 50% of them (breaks the first() one if your response is an array, breaks the limit(1) if the response is an object, so I'd agree it'd be great for this lib to understand that first is special. Maybe .response should always take an array?

Thank for the feedback
Why my response above not suits your need? :)

Added in v1.5.0.
Thank you for the feedback 🙏🏼


Add missing files in retro/cores

Temporary fix to https://github.com/MatPoliquin/stable-retro/issues/2
Signed-off-by: guillemdb<EMAIL_ADDRESS>

Thanks!


Missing images for Autonomous and Replic mode sections

Both the Autonomous mode and Replic mode sections refer to "the following image" but there are not images in this article. Either the images should be included or the article updated to remove those statements

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

 Unfortunately, we’ve recently fallen short of our usual standards in addressing documentation concerns in a timely manner and offer our apologies for any inconvenience we’ve caused.
The article no longer refers to any images. Because this issue is now outdated, we’re closing this request. If we've addressed the documentation issue, this thread will also be closed. However, if you believe there’s still a documentation concern, you're encouraged to open a new GitHub issue. We welcome any additional suggestions for improving our documentation to provide a more satisfactory experience in the future. Thanks for your understanding and continued support.
#please-close


Bug:failed generate png picture thumbnail but some others succeed

Description and expectations
I generate some png files' thumbnail failed, but some others succeed when I use the manager.get_jpeg_preview.
How to reproduce
from preview_generator.manager import PreviewManager

path = '/tmp/IMG20200422_094758.png'
cache_path = "/tmp/cache/"
manager = PreviewManager(cache_path, create_folder=True)
path_to_preview_image = manager.get_jpeg_preview(path, force=True)

the image as below:

but the other image is ok as below:

Version information

Version: [0.23]
Device / System: [Debian Buster]

i got the same error for PNG some get converted and some not

What happens if you run the given convert command manually? Is there a meaningful error?
convert png:/tmp/IMG20200422_094758.png -layers merge /tmp/preview-generator-y7qu4wdy.png

i did some tests, it appear that when the image have been converted to something other than it's original extension, it triggers the errors, must be something related to the mimeType check  (ex : .png , image/jpg), otherwise when the file/img extension is the same as the mimeType (ex : .png , image/png) it doesn't

So you run into errors when attempting to preview a .png file which is actually a JPEG image, is that it? Do I understand correctly?
@hatcherfang is /tmp/IMG20200422_094758.png indeed a PNG image or is it actually a JPG image?

So you run into errors when attempting to preview a .png file which is actually a JPEG image, is that it? Do I understand correctly?

yes indeed

Is it acceptable for you to use the extension that matches the right
mime type, or perhaps no extension at all if difficult? Indeed the wrong
extension will confuse the various tools we use to detect types.
@inkhey we have an error when attempting to convert a file that does not
have the correct extension.
Le 06/09/2021 à 16:20, Mad Tofu a écrit :

So you run into errors when attempting to preview a .png file
which is actually a JPEG image, is that it? Do I understand correctly?

yes indeed
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/algoo/preview-generator/issues/268#issuecomment-913686718,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AA5D7FPKQTBT2DARQLFNNSDUATE3FANCNFSM5C5AHEBA.
Triage notifications on the go with GitHub Mobile for iOS
https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675
or Android
https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.


118 create the floating give now button

This is set up with an SVG as button and a optional "DarkMode" prop that takes a boolean.
Not yet sure how to solve the state of background ("fill" ) change in cases where this component temporary is on top of an section with the same background color. And whether such cases should be solved inside the component or some sort of outer state related to Dark/light mode.

@HEYROCKME Compile fails with the following error:
32:15  Error: Unknown property 'alignment-baseline' found, use 'alignmentBaseline' instead  react/no-unknown-property 17:37:14.716

This is now set up with the "simplified" style, in other words not reacting to content.


[Storage] Optimize Memory usage on Transaction.Get

Replaces #140
When there are large database transactions (potentially with thousands of reads), we wait to reclaim memory until the transaction is over. We should instead reclaim memory as soon as the value is read so it can be reused.
Changes

[x] Do not reclaim memory on Transaction.Get
[x] Replace Scan with LimitedMemoryScan (we no longer allow scanning a large number of records into memory)
[x] Optionally reclaim memory in Decode (don't do during a Scan)

Pull Request Test Coverage Report for Build 6816

67 of 71 (94.37%)  changed or added relevant lines in 9 files are covered.
1 unchanged line in 1 file lost coverage.
Overall coverage increased (+0.02%) to 77.909%

Changes Missing Coverage
Covered Lines
Changed/Added Lines
%

storage/broadcast_storage.go
10
12
83.33%

storage/key_storage.go
15
17
88.24%

Files with Coverage Reduction
New Missed Lines
%

reconciler/reconciler.go
1
84.18%

Totals

Change from base Build 6793:
0.02%

Covered Lines:
5611

Relevant Lines:
7202

💛  - Coveralls


Recursive include of data_files

Using MANIFEST.in has the advantage of the recursive-include command. Using wildcards in data_files does not work recursively. Can we somehow fix this?

We could pass the data_files through the glob module to resolve the wildcards.

The module glob cannot really be used in this case since it does not work recursively. For instance tests/*.csv would only include tests/data.csv but not tests/special_tests/large_data.csv. For this to work we would need a combination of os.walk and fnmatch like described here.

MANIFEST.in allows recursive inclusion with:
recursive-include DIRECTORY PATTERN1 PATTERN2
Maybe we mimic this syntax like this in setup.cfg:

[data_files]
share/pyscaffold = .rst, .txt, tests:.py, tests:.csv
This would mean that all rst and txt files from the root of the project are included as well as all py and csv files in the tests folder and its subfolders.

I am not 100% sure about this syntax though since it seems a bit confusing. I don't want to use a white space to separate the directory from the pattern since the directory itself could have white spaces.

Another approach would be that we differentiate between greedy and non-greedy wildcards like * vs *?. By default we assume greedy and even match recursively since this seems to be what most users expect and want actually. For non-greedy behavior *? could be used like in the Python regular expressions.
Anyone wants to share his/her thoughts on that issue?

As an alternative, we could use the more shell-like approach (the one that also git uses) and use ** for recursive includes.

@xhochy Seems like we had about the same idea :-) Do you think recursive includes or non-recursive includes should be default?

@FlorianWilhelm for conistency, I would handle it exactly like git/bash/zsh do.

*.py: all files ending in .py in the current directory
**/*.py: all files ending in .py in all subfolders (recursively) of the current directory

@xhochy I like your suggestion. How would we do the implementation? It is somewhat similiar to regular expressions in the sense that * is *? in re and ** is * in re. Could we maybe use the functionality of the re module somehow? I'd like to avoid having even more code in setup.py.

@xhochy I'll try doing a replacement of * into *? followed by a replacement of *?*? into *. After that I should be able to just use a regular expression. os.walk can be used to get a recursive list of each file in a repository which can be then matched with the regular expressions. At that point one should be aware of links causing cycles.


Extract Api::Config

This moves the central place where we parse and store the API configuration out of the API Controller, and into a dedicated object. I can see a number of benefits from doing this:

It can be tested independently
It can be used as a collaborator of objects that live outside of the API controller
It reduces the indirection in the API controller (e.g. base_config => self.base_config => parsed yaml file)
We can dry up the API specs by not parsing the api.yml file over again
I am noticing a ~20 second improvement on running the API specs. This is because even though the parsed api.yml file is memoized in the spec helper, that value is only stored for the running of one spec, so we are currently reading from disk and parsing that configuration on the running of every spec.

@miq-bot add-label api, refactoring
@miq-bot assign @abellotti

/cc @jrafanie

It looks like this also accidentally fixes an issue that @jrafanie found where we are in fact reading/parsing the api.yml file on every request in production. This is because the api_controller/initializer code is not a true initializer - the included block gets executed every time you instantiate a new ApiController (presumably because that module gets included in the instance's singleton class).
Here's some numbers showing the difference in response time in ms for 10 requests each in master vs this branch:

master
this branch

94
37

83
35

82
40

88
37

88
256

95
25

265
27

80
29

70
22

69
33

Giving an average:

master
this branch

with outliers
101.4
54.1

without outliers
74.9
28.5

cc @dmetzger57 ^

@Fryguy renamed to Settings, but could this be a possible area for confusion? https://github.com/ManageIQ/manageiq/blob/master/app/controllers/api_controller/settings.rb#L20

@imtayadeway Do you still see the 20s improvement with this?  The .to_hash bits may have killed that unfortunately.

could this be a possible area for confusion?https://github.com/ManageIQ/manageiq/blob/master/app/controllers/api_controller/settings.rb#L20

Wait, there's config/api.yml and also config/api_settings.yml ?  That's very confusing then if we call the main one Api::Settings.  Seems strange to have 2 config files in the first place.

I feel like the contents of api_settings.yml should live inside the api.yml directly, or if it's use modifyable, it should live in the general settings.yml.

I feel like the contents of api_settings.yml should live inside the api.yml directly, or if it's use modifyable, it should live in the general settings.yml.

@abellotti any opinions?

@Fryguy getting response times around 40ms, which is still an improvement, but it looks like it took a hit. I will try removing them but may bail if it gets too big :wink:

Love the Api::Settings approach, Thanks @Fryguy
@imtayadeway yes, move the api_settings.yml content directly in api.yml so it is accessible via Api::Settings, you can move it directly under the :settings: collection as it controls what that collection exposes, kind'a like declaring subcollections for others, here we're declaring which ::Settings to expose, maybe something like categories (naming is hard)
  :settings:
    :description: Settings
    :identifier: ops_settings
    :options:
    - :collection
    :methods: *70174834086080
    :categories:
      - product
    :collection_actions:
      :get:
      - :name: read
        :identifier: ops_settings
    :resource_actions:
      :get:
      - :name: read
        :identifier: ops_settings

So we'd access via Api::Settings.collections.settings.categories
Thanks!!

I feel like the contents of api_settings.yml should live inside the api.yml directly, or if it's use modifyable, it should live in the general settings.yml.

@imtayadeway yes, move the api_settings.yml content directly in api.yml so it is accessible via Api::Settings, you can move it directly under the :settings: collection as it controls what that collection exposes, kind'a like declaring subcollections for others, here we're declaring which ::Settings to expose, maybe something like categories (naming is hard)

Does this require migrating the existing settings?  Unless this is easy to do, I'd think that's something we should do in a followup PR.  This PR already does much awesomeness.  If this PR gets backported to darga, I'm not sure all of the followup PRs would also be worthy of backporting.

@jrafanie @Fryguy I've decided to eschew delegating to Config::Options as part of this PR, as it's problematic without taking the performance hit of to_hash. I'll follow this up in a future PR.
I did rename to Api::Settings however, and found another place where we could be reparsing the yml file. I also rebased to tidy things up a bit. I'm happy with this now as a fairly small refactor/performance PR. Can you re-review? Thanks!

LGTM, let's get this in and consolidate yml files and re-organize in followup PRs.

Just need to decide on darga/yes or no.. I think yes.

:heart: :heart: :heart:

I feel like we will build on top of this and backports will be really hard without this change.  Plus, every API rest call doing a YAML load is a waste we should probably fix via this refactoring.

Ok, so this is a refactoring so, will do darga/no for now... if we need to backport this for other future backports, we'll do it then.


Feature request

Deleted request until I have a POC which actually works.

Okay. (Per your email, one issue with rollup at higher levels of the hierarchy is that we don’t materialize arrays of elements for higher levels; there’s only arrays of leaf elements.) Feel free to reopen or open a new request…


Init in a folder name containing hyphens causes quirky naming

Hyphens should be removed. In general we should make sure the naming of modules behaves nicely.
Example using Testing-Elmish-Land leads to this:

How do you propose this should work? I feel it's confusing to rename the folder.


CI: Extend GH Actions to also build for ARM

These changes are aimed to bringing ARM support and updating the Makefiles/CI to look similar to what we do for https://github.com/kubeflow/kubeflow/

Hi team, will kindly request to review and approve this as without it its impossible to run a local setup of models-web-app on Apple silicon Macs.

CICD is happy so
/lgtm
/approve


Documentation for configuration options

for example the ViewOpions or ViewListOptions.

Thanks @esfand - right now you can find them from JSDoc documentation:
http://frzr.js.org/doc/typedef/index.html
But I will make better docs soon..

Thanks.


My scratch game keeps crashing

http://scratch.mit.edu/projects/223272043
http://phosphorus.github.io/#223272043
Error: Failed to execute 'getImageData' on 'CanvasRenderingContext2D': The source width is 0.
    at Sprite.touching (https://phosphorus.github.io/phosphorus.js:1643:37)
    at eval (eval at scopedEval (https://phosphorus.github.io/phosphorus.js:4014:14), <anonymous>:2:7)
    at Stage.P.runtime.P.Stage.step (https://phosphorus.github.io/phosphorus.js:3938:15)

@nathan