Umbrella app mix test migration alias error

Environment

Elixir version (elixir -v):

Erlang/OTP 18 [erts-7.3] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Elixir 1.3.1

Database and version: PostgreSQL 9.4.4
Ecto version (mix deps):

* ecto 2.0.2 (Hex package) (mix)
  locked at 2.0.2 (ecto) b02331c1

Database adapter and version (mix deps):

* postgrex 0.11.2 (Hex package) (mix)
  locked at 0.11.2 (postgrex) 139755c1

Operating system: macOS El Capitan

Current behavior
I'm having trouble using this in an umbrella app. I have app A which defines schemas and has migrations and I have app B that depends on app A (in_umbrella: true). If I add the alias to mix.exs for both of those apps and then run the tests separately, everything works. However, when I run mix test in the umbrella app, it fails.
Randomized with seed 54646
==> AppA
....................................................

Finished in 0.5 seconds
52 tests, 0 failures

Randomized with seed 188921
** (DBConnection.OwnershipError) cannot find ownership process for #PID<0.46.0>.

When using ownership, you must manage connections in one
of the three ways:

  * By explicitly checking out a connection
  * By explicitly allowing a spawned process
  * By running the pool in shared mode

The first two options require every new process to explicitly
check a connection out or be allowed by calling checkout or
allow respectively.

The third option requires a {:shared, pid} mode to be set.
If using shared mode in tests, make sure your tests are not
async.

If you are reading this error, it means you have not done one
of the steps above or that the owner process has crashed.

See Ecto.Adapters.SQL.Sandbox docs for more information.
    (db_connection) lib/db_connection.ex:722: DBConnection.checkout/2
    (db_connection) lib/db_connection.ex:623: DBConnection.run/3
    (db_connection) lib/db_connection.ex:845: DBConnection.run_meter/3
    (db_connection) lib/db_connection.ex:464: DBConnection.prepare_execute/4
    (ecto) lib/ecto/adapters/postgres/connection.ex:82: Ecto.Adapters.Postgres.Connection.execute/4
    (ecto) lib/ecto/adapters/sql.ex:228: Ecto.Adapters.SQL.sql_call/6
    (ecto) lib/ecto/adapters/sql.ex:178: Ecto.Adapters.SQL.query!/5
    (ecto) lib/ecto/adapters/postgres.ex:69: Ecto.Adapters.Postgres.execute_ddl/3
    (ecto) lib/ecto/migrator.ex:43: Ecto.Migrator.migrated_versions/2
    (ecto) lib/ecto/migrator.ex:142: Ecto.Migrator.run/4
    (ecto) lib/mix/tasks/ecto.migrate.ex:74: anonymous fn/4 in Mix.Tasks.Ecto.Migrate.run/2
    (elixir) lib/enum.ex:651: Enum."-each/2-lists^foreach/1-0-"/2
    (elixir) lib/enum.ex:651: Enum.each/2
    (mix) lib/mix/task.ex:296: Mix.Task.run_task/3
    (mix) lib/mix/task.ex:328: Mix.Task.run_alias/3
    (mix) lib/mix/task.ex:261: Mix.Task.run/2
    (mix) lib/mix/project.ex:211: Mix.Project.in_project/4
    (elixir) lib/file.ex:1145: File.cd!/2
    (mix) lib/mix/task.ex:387: anonymous fn/4 in Mix.Task.recur/1
    (elixir) lib/enum.ex:1623: Enum."-reduce/3-lists^foldl/2-0-"/3

The problem appears to be in the ecto.migrate section of app B's alias. If I remove that, it works again, however that means that app B won't automatically setup the DB. I've noticed that the pid in this line never seems to change:
cannot find ownership process for #PID<0.46.0>.

Minimal app that reproduces the error: https://github.com/hunterboerner/ecto_sandbox_bug.
Expected behavior
It should not crash.
Created new issue as per @josevalim's instructions https://github.com/elixir-ecto/ecto/issues/1288#issuecomment-230359309

Adding the test alias to the root mix.exs fixes the issue:
defmodule EctoSandboxBug.Mixfile do
  use Mix.Project

  def project do
    [apps_path: "apps",
     build_embedded: Mix.env == :prod,
     start_permanent: Mix.env == :prod,
     deps: deps(),
     aliases: aliases()]
  end

  defp deps do
    []
  end

  defp aliases do
    ["test": ["ecto.create", "ecto.migrate", "test"]]
  end
end

This is not the root cause, though.

@michalmuskala will that apply when running mix test in the sub apps?

You'd have that alias in the main, top-level mix.exs, as well as in each sub app. I'm not sure where this issue stems from, though.

The problem is that when you run tests in the first app, it puts the repository into ownership mode. Then when you try to use the second application it will try to run migrations in ownership mode and complain the process was not authorized.
Putting the aliases at the umbrella root solves it because you run migrations for all projects upfront. Because this is happening from inside the migrator, I will see if there is a best way to solve this, but using the aliases in the umbrella is a good way to go for now.

Fixed, thank you for the reproducing app @hunterboerner , really helpful!

I see that this was merged, but I'm having the same issue. My case is a little different as I am doing integration tests w/ Phoenix.
Erlang/OTP 19 [erts-8.0.2] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Elixir 1.3.2

* ecto 2.0.5 (Hex package) (mix)
  locked at 2.0.5 (ecto) 7f4c79ac
* phoenix_ecto 3.0.1 (Hex package) (mix)
  locked at 3.0.1 (phoenix_ecto) 42eb486e
  ok
* phoenix 1.2.1 (Hex package) (mix)
  locked at 1.2.1 (phoenix) 6dc59224
  ok

A side note, may be of help. If I set my tests to async: false, everything works as expected. async: true raises this error. I found that async: true DOES work though if its not an umbrella app, and is instead just a vanilla phoenix app

Here is an example of the 'acme_bank' umbrella app failing if a request going over HTTP to the test server is async:
https://github.com/coryodaniel/acme_bank/tree/sbox_bug_async_integration_test
You can flip async between false and true and see the issue.
https://github.com/coryodaniel/acme_bank/blob/sbox_bug_async_integration_test/apps/bank_web/test/controllers/account_controller_test.exs#L2-L5
Thanks for any in sight! I'm currently just running my tests as async: false to get around this!

I cannot reproduce the error. Adding :async true and running mix test works fine.

From the app or the umbrella app? Is there any other system information that may be helpful?

I tried both and nothing. :(

Is there anything else version-wise you think could cause it? Would a dump of deps.tree help?

The repository has a lock file, so we are getting the same dependencies. The only difference is that I am running on Elixir master and you are on 1.3.2. You may try 1.3.3 or master and see if the problem is solved.

I have a similar issue. Setup is the same as OP's. Umbrella project. One server app with ecto, and one client phoenix app, no ecto, calls server app from a controller.
Tests work for each app separately, but fail from umbrella project dir.
Elixir 1.4.2, Phoenix 1.2.1, Ecto 2.1.3
console output. gm is server ecto app, and web is client phoenix app.
➜  mix test

==> gm
.

Finished in 0.05 seconds
1 test, 0 failures

Randomized with seed 595317
==> web
...

  1) test GET / (Web.PageControllerTest)
     test/controllers/page_controller_test.exs:4
     ** (DBConnection.OwnershipError) cannot find ownership process for #PID<0.369.0>.

     When using ownership, you must manage connections in one
     of the three ways:

       * By explicitly checking out a connection
       * By explicitly allowing a spawned process
       * By running the pool in shared mode

     The first two options require every new process to explicitly
     check a connection out or be allowed by calling checkout or
     allow respectively.

     The third option requires a {:shared, pid} mode to be set.
     If using shared mode in tests, make sure your tests are not
     async.

     If you are reading this error, it means you have not done one
     of the steps above or that the owner process has crashed.

     See Ecto.Adapters.SQL.Sandbox docs for more information.
     stacktrace:
       (db_connection) lib/db_connection.ex:925: DBConnection.checkout/2
       (db_connection) lib/db_connection.ex:741: DBConnection.run/3
       (db_connection) lib/db_connection.ex:584: DBConnection.prepare_execute/4
       (ecto) lib/ecto/adapters/postgres/connection.ex:80: Ecto.Adapters.Postgres.Connection.prepare_execute/5
       (ecto) lib/ecto/adapters/sql.ex:243: Ecto.Adapters.SQL.sql_call/6
       (ecto) lib/ecto/adapters/sql.ex:431: Ecto.Adapters.SQL.execute_and_cache/7
       (ecto) lib/ecto/repo/queryable.ex:130: Ecto.Repo.Queryable.execute/5
       (ecto) lib/ecto/repo/queryable.ex:35: Ecto.Repo.Queryable.all/4
       (ecto) lib/ecto/repo/queryable.ex:68: Ecto.Repo.Queryable.one/4
       (gm) lib/gm/accounts/account.ex:5: GM.Account.get_message/0
       (web) web/controllers/page_controller.ex:5: Web.PageController.index/2
       (web) web/controllers/page_controller.ex:1: Web.PageController.action/2
       (web) web/controllers/page_controller.ex:1: Web.PageController.phoenix_controller_pipeline/2
       (web) lib/web/endpoint.ex:1: Web.Endpoint.instrument/4
       (web) lib/phoenix/router.ex:261: Web.Router.dispatch/2
       (web) web/router.ex:1: Web.Router.do_call/2
       (web) lib/web/endpoint.ex:1: Web.Endpoint.phoenix_pipeline/1
       (web) lib/web/endpoint.ex:1: Web.Endpoint.call/2
       (phoenix) lib/phoenix/test/conn_test.ex:224: Phoenix.ConnTest.dispatch/5
       test/controllers/page_controller_test.exs:5: (test)

Finished in 0.2 seconds
4 tests, 1 failure

only server app has Ecto.Adapters.SQL.Sandbox.mode(GM.Repo, :manual) in its test helper.

I forked @hunterboerner 's repo and updated it with codes relevant more to Ecto.
https://github.com/sntran/ecto_sandbox_bug
When I run mix test under the umbrella folder, I got the same error as his.
I am running on Elixir 1.4. The difference I had is to have app B calling a function of app A, in which it fetches the database.

Just a note to others.
If you make an umbrella app and use mix phx.new.web --no-ecto the generated test/support/conn_case.ex will be missing the :ok = Ecto.Adapters.SQL.Sandbox.checkout(AppA.Repo) under the setup block.


Log all Request Information with each entry to the logger

Continuing on the work I started in #429

[x] based on #429, so that needs to go first.

This changes up quite a bit of how the logging works throughout the request flow - the logger is now "unified" so there is no more log_type field.
There is one commit added which displays the work it'll take on the DAO side, from there it should be as easy as just making sure the RequestParamsFromContext function just alway populated ctx field if it is non-nil.
A few notable changes:

There is now a "custom" context we're using instead of just the plain echo.Context, this allows us to override any methods we want. Currently just overriding Logger() since we just want to return our own logger with the fields for the current request set on it.
As long as DB.WithContext(dao.ctx) is called -> the labels will be picked up on the DB
Similarly, in the handlers we should always be using c.Logger().<Level>(...) since that will pull the logger event with the fields set
No more echo middleware logger necessary - it is handled in the timing middleware now.

# TODO:

[x] Return request_id on 5xx errors so we can trace it easier, maybe 400s too?

Examples:
SQL Log on Update, with request information inline:
{"@timestamp":"2022-07-26T10:12:22.47Z","@version":1,"account_number":"1234","app":"source-api-go","caller":"github.com/RedHatInsights/sources-api-go/logger.(*GormLogger).Trace","duration":10.725929,"filename":"/home/jlindgren/cloud/git/crc/sources/go-rewrite/dao/source_dao.go:162","hostname":"mewtwo","labels":{"app":"source-api-go"},"level":"debug","message":"UPDATE \"sources\" SET \"availability_status\"='unavailable',\"created_at\"='2022-07-21 12:05:11.495',\"updated_at\"='2022-07-26 10:12:22.46',\"name\"='yeet',\"uid\"='eb79e9c8-f485-44ee-bf73-6aa984b3e205',\"app_creation_workflow\"='account_authorization',\"source_type_id\"=4,\"tenant_id\"=1 WHERE \"id\" = 9","method":"PATCH","org_id":"1234","request_id":"ef42dafa-c11a-426f-a4b3-c3ebf0b85c32","rows":1,"tags":["source-api-go"],"uri":"/api/sources/v3.1/sources/9","user_agent":"insomnia/2022.3.0"}

Event Raising with Request Info:
{"@timestamp":"2022-07-26T10:12:22.47Z","@version":1,"account_number":"1234","app":"source-api-go","caller":"github.com/RedHatInsights/sources-api-go/middleware.RaiseEvent.func1","filename":"/home/jlindgren/cloud/git/crc/sources/go-rewrite/middleware/event_stream.go:52","hostname":"mewtwo","labels":{"app":"source-api-go"},"level":"info","message":"Raising Event Source.update","method":"PATCH","org_id":"1234","request_id":"ef42dafa-c11a-426f-a4b3-c3ebf0b85c32","tags":["source-api-go"],"uri":"/api/sources/v3.1/sources/9","user_agent":"insomnia/2022.3.0"}

Timing call (after request is done):
{"@timestamp":"2022-07-26T10:16:36.126Z","@version":1,"account_number":"1234","app":"source-api-go","caller":"github.com/RedHatInsights/sources-api-go/middleware.Timing.func1.1","filename":"/home/jlindgren/cloud/git/crc/sources/go-rewrite/middleware/timings.go:24","hostname":"mewtwo","labels":{"app":"source-api-go"},"latency":1766244,"latency_human":"1.766244ms","level":"info","message":"","method":"DELETE","org_id":null,"request_id":"c92cbe32-d24b-4350-b9c0-2e8d622d4034","tags":["source-api-go"],"uri":"/api/sources/v3.1/sources/9","user_agent":"insomnia/2022.3.0"}

On a 500 the request looks like this now:
{
    "errors": [
        {
            "detail": "Internal Server Error: account number or OrgId not present in x-rh-identity",
            "request_id": "d6bd5555-8834-478e-b5df-adbcf6075e8f",
            "status": "500"
        }
    ]
}

Ok this is ready to go now - I pulled out the commit that updates the sourceDAO to include a context. The helper function that creates a dao.RequestParam struct now pulls the context if it's present.

I realised this after merging - should not we add middleware.LoggerField also for internal endpoints ?

@lindgrenj6 Another thing  - we should look also for account number and org id from PARSED_IDENTITY in LoggerFields - now it looks there are not filled.


Run wechaty-getting-started failed on Ubuntu 20.04.1

When I try example (https://github.com/wechaty/getting-started.git) on Ubuntu 20(AWS), got error.

Then, I installed libraries that the browser dependency related.
sudo apt-get install -y gconf-service libasound2 libatk1.0-0 libatk-bridge2.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget
sudo apt-get install -y libgbm-dev

Last, run npm start:
git clone https://github.com/wechaty/getting-started.git
npm install
WECHATY_LOG=verbose \
WECHATY_PUPPET=wechaty-puppet-service \
WECHATY_PUPPET_SERVICE_TOKEN=insecure_ebd42481-xxxxx \
WECHATY_PUPPET_SERVICE_NO_TLS_INSECURE_CLIENT=true \
npm start

Got error:
...
03:19:05 VERB PuppetService contactRawPayload(qq62xx)
03:19:05 VERB PuppetService contactRawPayload(paryxx)
03:19:05 VERB PuppetService contactRawPayload(wxid_v3kp0xxx)
03:19:05 VERB PuppetService contactRawPayload(wxid_l0lv2xxx)
03:19:05 VERB PuppetService contactRawPayload(wxid_1rpg17xx)
03:19:05 VERB PuppetService contactRawPayload(wxid_riezvkxx)
03:19:05 VERB PuppetService contactRawPayload(wxid_y1r8yaxx)
03:19:05 VERB PuppetService contactRawPayload(wxid_15p3dqxxx)
03:19:05 VERB PuppetService contactRawPayload(wxid_snb43yxxx)
03:19:05 VERB PuppetService contactRawPayload(wxid_czr4twbxxx)
03:19:05 VERB PuppetService contactRawPayload(michael_wuxxx)
03:19:05 VERB PuppetService contactRawPayload(wxid_dcy8uxxx)
03:19:05 VERB PuppetService contactRawPayload(wxid_z20qxx)
03:19:05 WARN Room findAll() message.ready() rejection: TypeError: response.getWeixin is not a function
03:19:05 ERR Config ###########################
03:19:05 ERR Config Wechaty unhandledRejection: GError: message not found for id: 48991355xxxxx
at Function.from (file:///root/wechaty/getting-started/node_modules/gerror/src/gerror/gerror.ts:69:17)
at PuppetService.<anonymous> (file:///root/wechaty/getting-started/node_modules/wechaty/src/wechaty-mixins/puppet-mixin.ts:277:45)
    at processTicksAndRejections (node:internal/process/task_queues:96:5) [object Promise]
    03:19:05 ERR Config ###########################
    03:19:05 ERR Config process.on(unhandledRejection) promise.catch(message not found for id: 48991355xxxxx)
    Config GError: message not found for id: 48991355xxxxx
    at Function.from (file:///root/wechaty/getting-started/node_modules/gerror/src/gerror/gerror.ts:69:17)
    at PuppetService.<anonymous> (file:///root/wechaty/getting-started/node_modules/wechaty/src/wechaty-mixins/puppet-mixin.ts:277:45)
        at processTicksAndRejections (node:internal/process/task_queues:96:5) {
        code: 2,
        details: 'GError: message not found for id: 48991355xxxxx\n' +
        '    at Function.from (file:///root/wechaty/getting-started/node_modules/gerror/src/gerror/gerror.ts:69:17)\n' +
        '    at PuppetService.<anonymous> (file:///root/wechaty/getting-started/node_modules/wechaty/src/wechaty-mixins/puppet-mixin.ts:277:45)\n' +
            '    at processTicksAndRejections (node:internal/process/task_queues:96:5)'
            }
03:19:20 VERB PuppetService onGrpcStreamEvent({type:EVENT_TYPE_HEARTBEAT(1), payload(len:29)})
03:19:35 VERB PuppetService onGrpcStreamEvent({type:EVENT_TYPE_HEARTBEAT(1), payload(len:29)})

According to

03:19:05 WARN Room findAll() message.ready() rejection: TypeError: response.getWeixin is not a function

I believe this problem is related to:

https://github.com/wechaty/puppet/issues/181

Will update this issue when I found anything useful.

<EMAIL_ADDRESS>/root/wechaty/getting-started
├─┬<EMAIL_ADDRESS>│ ├─┬<EMAIL_ADDRESS>│ │ ├──<EMAIL_ADDRESS>deduped
│ │ └──<EMAIL_ADDRESS>deduped
│ └──<EMAIL_ADDRESS>deduped
├─┬<EMAIL_ADDRESS>│ └──<EMAIL_ADDRESS>├─┬<EMAIL_ADDRESS>│ └──<EMAIL_ADDRESS>deduped
├─┬<EMAIL_ADDRESS>│ └──<EMAIL_ADDRESS>deduped
├─┬<EMAIL_ADDRESS>│ └──<EMAIL_ADDRESS>deduped
├─┬<EMAIL_ADDRESS>│ └──<EMAIL_ADDRESS>deduped
├─┬<EMAIL_ADDRESS>│ └──<EMAIL_ADDRESS>├─┬<EMAIL_ADDRESS>│ └──<EMAIL_ADDRESS>deduped
└─┬<EMAIL_ADDRESS>  ├─┬<EMAIL_ADDRESS>  │ ├──<EMAIL_ADDRESS>  │ └──<EMAIL_ADDRESS>deduped
  └──<EMAIL_ADDRESS>deduped

│ ├──<EMAIL_ADDRESS>
I have no idea why your node_modules has<EMAIL_ADDRESS>which is not correct.
Could you please try to install<EMAIL_ADDRESS>and see if it can solve your problem?
npm install<EMAIL_ADDRESS>

after install<EMAIL_ADDRESS>npm ls wechaty wechaty-puppet wechaty-grpc wechaty-puppet-service
<EMAIL_ADDRESS>/root/wechaty/getting-started
├─┬<EMAIL_ADDRESS>│ ├─┬<EMAIL_ADDRESS>│ │ ├──<EMAIL_ADDRESS>deduped
│ │ └──<EMAIL_ADDRESS>deduped
│ └──<EMAIL_ADDRESS>deduped
├──<EMAIL_ADDRESS>├─┬<EMAIL_ADDRESS>│ └──<EMAIL_ADDRESS>├─┬<EMAIL_ADDRESS>│ └──<EMAIL_ADDRESS>deduped
├─┬<EMAIL_ADDRESS>│ └──<EMAIL_ADDRESS>deduped
├─┬<EMAIL_ADDRESS>│ └──<EMAIL_ADDRESS>deduped
├─┬<EMAIL_ADDRESS>│ └──<EMAIL_ADDRESS>deduped
├─┬<EMAIL_ADDRESS>│ └──<EMAIL_ADDRESS>├─┬<EMAIL_ADDRESS>│ └──<EMAIL_ADDRESS>deduped
└─┬<EMAIL_ADDRESS>  ├─┬<EMAIL_ADDRESS>  │ ├──<EMAIL_ADDRESS>deduped
  │ └──<EMAIL_ADDRESS>deduped
  └──<EMAIL_ADDRESS>deduped

npm start:
WECHATY_LOG=verbose \
WECHATY_PUPPET=wechaty-puppet-service \
WECHATY_PUPPET_SERVICE_TOKEN=insecure_ebd42481-0c59-4563-a03b-c072ab782c2d \
WECHATY_PUPPET_SERVICE_NO_TLS_INSECURE_CLIENT=false \
GRPC_VERBOSITY=DEBUG GRPC_TRACE=all \
npm start

><EMAIL_ADDRESS>start
> cross-env NODE_OPTIONS="--no-warnings --loader=ts-node/esm" node examples/ding-dong-bot.ts

06:01:50 INFO Config registering process.on("unhandledRejection") for development/debug
06:01:50 VERB Config constructor()
06:01:50 VERB PoolifyMixin poolifyMixin(EventEmitter)
06:01:50 VERB WechatifyMixin wechatifyMixin(AbstractPoolifyMixin)
06:01:50 VERB ValidationMixin validationMixin(ContactMixin)
06:01:50 VERB ValidationMixin validationMixin(ContactImplBase)
06:01:50 VERB PoolifyMixin poolifyMixin(ContactImpl)
06:01:50 VERB ValidationMixin validationMixin(ContactSelfMixin)
06:01:50 VERB WechatifyMixin wechatifyMixin(EmptyBase)
06:01:50 VERB ValidationMixin validationMixin(FavoriteMixin)
06:01:50 VERB WechatifyMixin wechatifyMixin(EventEmitter)
06:01:50 VERB ValidationMixin validationMixin(FriendshipMixin)
06:01:50 VERB WechatifyMixin wechatifyMixin(EmptyBase)
06:01:50 VERB ValidationMixin validationMixin(ImageMixin)
06:01:50 VERB WechatifyMixin wechatifyMixin(EmptyBase)
06:01:50 VERB ValidationMixin validationMixin(LocationMixin)
06:01:50 VERB WechatifyMixin wechatifyMixin(EmptyBase)
06:01:50 VERB ValidationMixin validationMixin(PostMixin)
06:01:50 VERB WechatifyMixin wechatifyMixin(EventEmitter)
06:01:50 VERB ValidationMixin validationMixin(MessageMixin)
06:01:50 VERB ValidationMixin validationMixin(MessageImplBase)
06:01:50 VERB WechatifyMixin wechatifyMixin(EmptyBase)
06:01:50 VERB ValidationMixin validationMixin(MiniProgramMixin)
06:01:50 VERB WechatifyMixin wechatifyMixin(EmptyBase)
06:01:50 VERB ValidationMixin validationMixin(MomentMixin)
06:01:50 VERB WechatifyMixin wechatifyMixin(EmptyBase)
06:01:50 VERB ValidationMixin validationMixin(MoneyMixin)
06:01:50 VERB PoolifyMixin poolifyMixin(EventEmitter)
06:01:50 VERB WechatifyMixin wechatifyMixin(AbstractPoolifyMixin)
06:01:50 VERB ValidationMixin validationMixin(RoomMixin)
06:01:50 VERB WechatifyMixin wechatifyMixin(EmptyBase)
06:01:50 VERB ValidationMixin validationMixin(RoomInvitationMixin)
06:01:50 VERB WechatifyMixin wechatifyMixin(EmptyBase)
06:01:50 VERB PoolifyMixin poolifyMixin(AbstractWechatifyMixin)
06:01:50 VERB ValidationMixin validationMixin(TagMixin)
06:01:51 VERB WechatifyMixin wechatifyMixin(EmptyBase)
06:01:51 VERB ValidationMixin validationMixin(UrlLinkMixin)
06:01:51 VERB WechatifyMixin wechatifyMixin(EmptyBase)
06:01:51 VERB ValidationMixin validationMixin(DelayMixin)
06:01:51 VERB WechatyGErrorMixin gErrorMixin(WechatySkeleton)
06:01:51 VERB WechatifyUserModuleMixin wechatifyUserModuleMixin(GErrorMixin)
06:01:51 VERB WechatyIoMixin ioMixin(WechatifyUserModuleMixin)
06:01:51 VERB WechatyPuppetMixin puppetMixin(IoMixin)
06:01:51 VERB WechatyLoginMixin loginMixin(PuppetMixin)
06:01:51 VERB WechatyMiscMixin miscMixin(LoginMixin)
06:01:51 VERB WechatyPluginMixin pluginMixin(MiscMixin)
06:01:51 VERB ValidationMixin validationMixin(WechatyBase)
06:01:51 VERB ValidationMixin validationMixin(WechatyImplBase)
2022-03-29T06:01:51.772Z | index | Loading @grpc/grpc-js version 1.5.10
06:01:52 VERB wechaty-puppet-service monkeyPatchMetadataFromHttp2Headers()
06:01:52 VERB WechatyBuilder singleton()
06:01:52 VERB WechatyBuilder newInstance()
06:01:52 VERB WechatyLoginMixin constructor()
06:01:52 VERB WechatyPuppetMixin construct()
06:01:52 VERB WechatyIoMixin constructor()
06:01:52 VERB WechatifyUserModuleMixin constructor()
06:01:52 VERB WechatySkeleton constructor()
06:01:52 VERB StateSwitch constructor(WechatyReady, "{"log":{"enableTimestamp":true,"logLevel":4,"prefixFilter":{}}}")
06:01:52 VERB ServiceCtl<Wechaty> constructor()
06:01:52 VERB StateSwitch constructor(Wechaty, "{"log":{"enableTimestamp":true,"logLevel":4,"prefixFilter":{}}}")
06:01:52 VERB StateSwitch constructor(WechatyReset, "{"log":{"enableTimestamp":true,"logLevel":4,"prefixFilter":{}}}")
06:01:52 VERB Wechaty constructor()
06:01:52 VERB WechatySkeleton on(scan, listener) registering... listenerCount: 0
06:01:52 VERB WechatySkeleton on(login, listener) registering... listenerCount: 0
06:01:52 VERB WechatySkeleton on(logout, listener) registering... listenerCount: 0
06:01:52 VERB WechatySkeleton on(message, listener) registering... listenerCount: 0
06:01:52 VERB Wechaty start()
06:01:52 VERB WechatyLoginMixin init()
06:01:52 VERB WechatyPuppetMixin init()
06:01:52 VERB WechatifyUserModuleMixin init()
06:01:52 VERB WechatySkeleton init()
06:01:52 VERB Wechaty init() Raven disabled (import("raven") failed)
06:01:52 VERB WechatifyUserModuleMixin init() initializing Wechaty User Module (WUM) ...
06:01:52 VERB WechatifyMixin wechatifyUserModule(ContactImpl)
06:01:52 VERB WechatifyMixin wechatifyUserModule(ContactImpl)(Wechaty#xxxx-xxxx-xxxx-xxxx-xxxxxxxx<>(ding-dong-bot))
06:01:52 VERB WechatifyMixin wechatifyUserModule(ContactSelfImpl)
06:01:52 VERB WechatifyMixin wechatifyUserModule(ContactSelfImpl)(Wechaty#xxxx-xxxx-xxxx-xxxx-xxxxxxxx<>(ding-dong-bot))
06:01:52 VERB WechatifyMixin wechatifyUserModule(DelayImpl)
06:01:52 VERB WechatifyMixin wechatifyUserModule(DelayImpl)(Wechaty#xxxx-xxxx-xxxx-xxxx-xxxxxxxx<>(ding-dong-bot))
06:01:52 VERB WechatifyMixin wechatifyUserModule(FriendshipImpl)
06:01:52 VERB WechatifyMixin wechatifyUserModule(FriendshipImpl)(Wechaty#xxxx-xxxx-xxxx-xxxx-xxxxxxxx<>(ding-dong-bot))
06:01:52 VERB WechatifyMixin wechatifyUserModule(ImageImpl)
06:01:52 VERB WechatifyMixin wechatifyUserModule(ImageImpl)(Wechaty#xxxx-xxxx-xxxx-xxxx-xxxxxxxx<>(ding-dong-bot))
06:01:52 VERB WechatifyMixin wechatifyUserModule(LocationImpl)
06:01:52 VERB WechatifyMixin wechatifyUserModule(LocationImpl)(Wechaty#xxxx-xxxx-xxxx-xxxx-xxxxxxxx<>(ding-dong-bot))
06:01:52 VERB WechatifyMixin wechatifyUserModule(MessageImpl)
06:01:52 VERB WechatifyMixin wechatifyUserModule(MessageImpl)(Wechaty#xxxx-xxxx-xxxx-xxxx-xxxxxxxx<>(ding-dong-bot))
06:01:52 VERB WechatifyMixin wechatifyUserModule(MiniProgramImpl)
06:01:52 VERB WechatifyMixin wechatifyUserModule(MiniProgramImpl)(Wechaty#xxxx-xxxx-xxxx-xxxx-xxxxxxxx<>(ding-dong-bot))
06:01:52 VERB WechatifyMixin wechatifyUserModule(PostImpl)
06:01:52 VERB WechatifyMixin wechatifyUserModule(PostImpl)(Wechaty#xxxx-xxxx-xxxx-xxxx-xxxxxxxx<>(ding-dong-bot))
06:01:52 VERB WechatifyMixin wechatifyUserModule(RoomImpl)
06:01:52 VERB WechatifyMixin wechatifyUserModule(RoomImpl)(Wechaty#xxxx-xxxx-xxxx-xxxx-xxxxxxxx<>(ding-dong-bot))
06:01:52 VERB WechatifyMixin wechatifyUserModule(RoomInvitationImpl)
06:01:52 VERB WechatifyMixin wechatifyUserModule(RoomInvitationImpl)(Wechaty#xxxx-xxxx-xxxx-xxxx-xxxxxxxx<>(ding-dong-bot))
06:01:52 VERB WechatifyMixin wechatifyUserModule(TagImpl)
06:01:52 VERB WechatifyMixin wechatifyUserModule(TagImpl)(Wechaty#xxxx-xxxx-xxxx-xxxx-xxxxxxxx<>(ding-dong-bot))
06:01:52 VERB WechatifyMixin wechatifyUserModule(UrlLinkImpl)
06:01:52 VERB WechatifyMixin wechatifyUserModule(UrlLinkImpl)(Wechaty#xxxx-xxxx-xxxx-xxxx-xxxxxxxx<>(ding-dong-bot))
06:01:52 VERB WechatifyUserModuleMixin init() initializing Wechaty User Module (WUM) ... done
06:01:52 VERB WechatyPuppetMixin init() instanciating puppet instance ...
06:01:52 VERB Puppet resolvePuppet({puppet: wechaty-puppet-service, puppetOptions: {}})
06:01:52 VERB Puppet resolvePuppet() resolving name "wechaty-puppet-service" ...
06:01:52 VERB Puppet resolvePuppetName(wechaty-puppet-service)
06:01:52 VERB Puppet resolvePuppetName(wechaty-puppet-service): ESM resolved
06:01:52 VERB Puppet resolvePuppet() resolving name "wechaty-puppet-service" ... done
06:01:52 VERB Puppet resolvePuppet() instanciating puppet ...
06:01:52 VERB PuppetSkeleton constructor({})
06:01:52 VERB PuppetMemoryMixin constructor()
06:01:52 VERB PuppetLoginMixin constructor()
06:01:52 VERB PuppetCacheMixin constructor()
06:01:52 VERB PuppetCacheAgent constructor()
06:01:52 VERB PuppetContactMixin constructor()
06:01:52 VERB PuppetRoomMemberMixin constructor()
06:01:52 VERB PuppetRoomMixin constructor()
06:01:52 VERB PuppetFriendshipMixin constructor()
06:01:52 VERB PuppetTagMixin constructor()
06:01:52 VERB PuppetRoomInvitationMixin constructor()
06:01:52 VERB PuppetMessageMixin constructor()
06:01:52 VERB PuppetMiscMixin constructor()
06:01:52 VERB ServiceCtl<PuppetServiceMixin> constructor()
06:01:52 VERB StateSwitch constructor(PuppetServiceMixin, "{"log":{"enableTimestamp":true,"logLevel":4,"prefixFilter":{}}}")
06:01:52 VERB StateSwitch constructor(PuppetServiceMixinReset, "{"log":{"enableTimestamp":true,"logLevel":4,"prefixFilter":{}}}")
06:01:52 VERB PuppetServiceMixin constructor() #0
06:01:52 VERB PuppetWatchdogAgent constructor(xxxx-xxxx-xxxx-xxxx-xxxxxxxx)
06:01:52 VERB PuppetWatchdogAgent constructor() timeout 60 seconds
06:01:52 VERB ReadyMixin constructor()
06:01:52 VERB PuppetPostMixin constructor()
06:01:52 VERB PuppetSayableMixin constructor()
06:01:52 VERB TapMixin constructor()
06:01:52 VERB Puppet constructor({})
06:01:52 VERB PayloadStore constructor({"token":"insecure_xxxxx_xxxx"})
06:01:52 VERB PuppetService hookPayloadStore()
06:01:52 VERB Puppet resolvePuppet() instanciating puppet ... done
06:01:52 VERB WechatyPuppetMixin init() instanciating puppet instance ... done
06:01:52 VERB WechatyPuppetMixin init() setting memory ...
06:01:52 VERB PuppetMemoryMixin setMemory(ding-dong-bot)
06:01:52 VERB WechatyPuppetMixin init() setting memory ... done
06:01:52 VERB WechatyPuppetMixin init() setting up events ...
06:01:52 VERB WechatyPuppetMixin __setupPuppetEvents(Puppet<PuppetService>(ding-dong-bot))
06:01:52 VERB PuppetMixin __setupPuppetEvents() puppet.on(friendship) (listenerCount:0) registering...
06:01:52 VERB PuppetMixin __setupPuppetEvents() puppet.on(login) (listenerCount:1) registering...
06:01:52 VERB PuppetMixin __setupPuppetEvents() puppet.on(logout) (listenerCount:1) registering...
06:01:52 VERB PuppetMixin __setupPuppetEvents() puppet.on(message) (listenerCount:0) registering...
06:01:52 VERB PuppetMixin __setupPuppetEvents() puppet.on(post) (listenerCount:0) registering...
06:01:52 VERB PuppetMixin __setupPuppetEvents() puppet.on(room-invite) (listenerCount:0) registering...
06:01:52 VERB PuppetMixin __setupPuppetEvents() puppet.on(room-join) (listenerCount:0) registering...
06:01:52 VERB PuppetMixin __setupPuppetEvents() puppet.on(room-leave) (listenerCount:0) registering...
06:01:52 VERB PuppetMixin __setupPuppetEvents() puppet.on(room-topic) (listenerCount:0) registering...
06:01:52 VERB PuppetMixin __setupPuppetEvents() puppet.on(scan) (listenerCount:0) registering...
06:01:52 VERB PuppetMixin __setupPuppetEvents() puppet.on(dirty) (listenerCount:0) registering...
06:01:52 VERB PuppetMixin __setupPuppetEvents() puppet.on(dong) (listenerCount:0) registering...
06:01:52 VERB PuppetMixin __setupPuppetEvents() puppet.on(error) (listenerCount:0) registering...
06:01:52 VERB PuppetMixin __setupPuppetEvents() puppet.on(heartbeat) (listenerCount:0) registering...
06:01:52 VERB PuppetMixin __setupPuppetEvents() puppet.on(ready) (listenerCount:0) registering...
06:01:52 VERB PuppetMixin __setupPuppetEvents() puppet.on(reset) (listenerCount:0) registering...
06:01:52 VERB WechatyPuppetMixin __setupPuppetEvents() ... done
06:01:52 VERB WechatyPuppetMixin init() setting up events ... done
06:01:52 VERB WechatyPuppetMixin init() emitting "puppet" event ...
06:01:52 VERB WechatyPuppetMixin init() emitting "puppet" event ... done
06:01:52 VERB ServiceCtl<Wechaty> start()
06:01:52 VERB StateSwitch <Wechaty> active(pending) <- (false)
06:01:52 VERB ServiceCtl<Wechaty> start() super.start() ...
06:01:52 VERB WechatyPuppetMixin start()
06:01:52 VERB WechatyPuppetMixin start() super.start() ...
06:01:52 VERB WechatyIoMixin start()
06:01:52 VERB WechatySkeleton start()
06:01:52 VERB WechatyLoginMixin init()
06:01:52 VERB WechatyPuppetMixin init()
06:01:52 VERB WechatifyUserModuleMixin init()
06:01:52 VERB WechatySkeleton init()
06:01:52 VERB WechatifyUserModuleMixin init() Wechaty User Module (WUM)s have already wechatified: skip
06:01:52 VERB WechatyPuppetMixin init() skipped because this puppet has already been inited before.
06:01:52 VERB WechatyPuppetMixin start() super.start() ... done
06:01:52 VERB WechatyPuppetMixin start() starting puppet ...
06:01:52 VERB ReadyMixin start()
06:01:52 VERB PuppetServiceMixin start()
06:01:52 VERB ServiceCtl<PuppetServiceMixin> start()
06:01:52 VERB StateSwitch <PuppetServiceMixin> active(pending) <- (false)
06:01:52 VERB ServiceCtl<PuppetServiceMixin> start() super.start() ...
06:01:52 VERB PuppetCacheMixin start()
06:01:52 VERB PuppetLoginMixin start()
06:01:52 VERB PuppetMemoryMixin start()
06:01:52 VERB PuppetSkeleton start()
06:01:52 VERB PuppetCacheAgent start()
06:01:52 VERB PuppetCacheMixin start() "dirty" event listener added
06:01:52 VERB ServiceCtl<PuppetServiceMixin> start() super.start() ... done
06:01:52 VERB ServiceCtl<PuppetServiceMixin> start() this.onStart() ...
06:01:52 VERB PuppetService onStart()
06:01:52 VERB PuppetService start() instanciating GrpcManager ...
06:01:52 VERB GrpcManager constructor({})
06:01:52 VERB GrpcManager constructor() tlsRootCert(hash): "xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
06:01:52 VERB GrpcManager constructor() token: "insecure_xxxxx_xxxx"
06:01:52 VERB GrpcManager constructor() endpoint: "wechaty://api.chatie.io/insecure_xxxxx_xxxx"
06:01:52 VERB GrpcManager constructor() disableTls: "false"
06:01:52 VERB GrpcManager constructor() serverName(SNI): "insecure"
06:01:52 VERB PuppetService start() instanciating GrpcManager ... done
06:01:52 VERB PuppetService start() setting up bridge grpc event stream ...
06:01:52 VERB PuppetService bridgeGrpcEventStream(client)
06:01:52 VERB PuppetService start() setting up bridge grpc event stream ... done
06:01:52 VERB PuppetService start() starting grpc manager...
06:01:52 VERB GrpcManager start()
06:01:52 VERB GrpcManager start() initializing client ...
06:01:52 VERB GrpcManager initClient()
06:01:52 VERB GrpcManager initClient() TLS: enabled
2022-03-29T06:01:52.434Z | resolving_load_balancer | wechaty://api.chatie.io/insecure_xxxxx_xxxx IDLE -> IDLE
2022-03-29T06:01:52.434Z | connectivity_state | (1) wechaty://api.chatie.io/insecure_xxxxx_xxxx IDLE -> IDLE
2022-03-29T06:01:52.436Z | channel | (1) wechaty://api.chatie.io/insecure_xxxxx_xxxx Channel constructed with options {
  "grpc.ssl_target_name_override": "insecure",
  "grpc.default_authority": "insecure_xxxxx_xxxx"
}
2022-03-29T06:01:52.533Z | channel_stacktrace | (1) Channel constructed
    at new ChannelImplementation (/root/wechaty/getting-started/node_modules/@grpc/grpc-js/src/channel.ts:338:19)
    at new Client (/root/wechaty/getting-started/node_modules/@grpc/grpc-js/src/client.ts:153:30)
    at new ServiceClientImpl (/root/wechaty/getting-started/node_modules/@grpc/grpc-js/src/make-client.ts:128:3)
    at GrpcManager.initClient (file:///root/wechaty/getting-started/node_modules/wechaty-puppet-service/src/client/grpc-manager.ts:258:20)
    at GrpcManager.start (file:///root/wechaty/getting-started/node_modules/wechaty-puppet-service/src/client/grpc-manager.ts:153:16)
    at PuppetService.onStart (file:///root/wechaty/getting-started/node_modules/wechaty-puppet-service/src/client/puppet-service.ts:173:23)
    at PuppetService.start (file:///root/wechaty/getting-started/node_modules/state-switch/src/service-ctl/service-ctl.ts:89:20)
    at async PuppetService.start (file:///root/wechaty/getting-started/node_modules/wechaty-puppet/src/mixins/service-mixin.ts:34:7)
    at async PuppetService.start (file:///root/wechaty/getting-started/node_modules/wechaty-puppet/src/mixins/ready-mixin.ts:24:7)
    at async WechatyImpl.start (file:///root/wechaty/getting-started/node_modules/wechaty/src/wechaty-mixins/puppet-mixin.ts:83:11)
06:01:52 VERB GrpcManager initClient() ... done
06:01:52 VERB GrpcManager start() initializing client ... done
06:01:52 VERB GrpcManager start() starting stream ...
06:01:52 VERB GrpcManager startStream()
06:01:52 VERB GrpcManager startStream() grpc -> event() ...
2022-03-29T06:01:52.536Z | channel | (1) wechaty://api.chatie.io/insecure_xxxxx_xxxx createCall [0] method="/wechaty.Puppet/Event", deadline=Infinity
2022-03-29T06:01:52.538Z | call_stream | [0] Sending metadata
2022-03-29T06:01:52.559Z | resolving_load_balancer | wechaty://api.chatie.io/insecure_xxxxx_xxxx IDLE -> CONNECTING
2022-03-29T06:01:52.559Z | connectivity_state | (1) wechaty://api.chatie.io/insecure_xxxxx_xxxx IDLE -> CONNECTING
2022-03-29T06:01:52.560Z | resolving_load_balancer | wechaty://api.chatie.io/insecure_xxxxx_xxxx CONNECTING -> CONNECTING
2022-03-29T06:01:52.560Z | connectivity_state | (1) wechaty://api.chatie.io/insecure_xxxxx_xxxx CONNECTING -> CONNECTING
2022-03-29T06:01:52.560Z | channel | (1) wechaty://api.chatie.io/insecure_xxxxx_xxxx callRefTimer.ref | configSelectionQueue.length=1 pickQueue.length=0
2022-03-29T06:01:52.561Z | call_stream | [0] write() called with message of length 0
2022-03-29T06:01:52.562Z | call_stream | [0] end() called
06:01:52 VERB GrpcManager startStream() grpc -> event() ... done
06:01:52 VERB GrpcManager startStream() grpc -> event peeking data or timeout ...
2022-03-29T06:01:52.563Z | call_stream | [0] deferring writing data chunk of length 5
2022-03-29T06:01:53.588Z | pick_first | Connect to address list IP.IP.IP.IP:8788
2022-03-29T06:01:53.590Z | subchannel | (2) IP.IP.IP.IP:8788 Subchannel constructed with options {
  "grpc.ssl_target_name_override": "insecure",
  "grpc.default_authority": "insecure_xxxxx_xxxx"
}
2022-03-29T06:01:53.590Z | subchannel_refcount | (2) IP.IP.IP.IP:8788 refcount 0 -> 1
2022-03-29T06:01:53.590Z | subchannel_refcount | (2) IP.IP.IP.IP:8788 refcount 1 -> 2
2022-03-29T06:01:53.591Z | pick_first | Start connecting to subchannel with address IP.IP.IP.IP:8788
2022-03-29T06:01:53.591Z | pick_first | IDLE -> CONNECTING
2022-03-29T06:01:53.592Z | resolving_load_balancer | wechaty://api.chatie.io/insecure_xxxxx_xxxx CONNECTING -> CONNECTING
2022-03-29T06:01:53.592Z | channel | (1) wechaty://api.chatie.io/insecure_xxxxx_xxxx callRefTimer.unref | configSelectionQueue.length=1 pickQueue.length=0
2022-03-29T06:01:53.592Z | connectivity_state | (1) wechaty://api.chatie.io/insecure_xxxxx_xxxx CONNECTING -> CONNECTING
2022-03-29T06:01:53.592Z | subchannel | (2) IP.IP.IP.IP:8788 IDLE -> CONNECTING
2022-03-29T06:01:53.593Z | pick_first | CONNECTING -> CONNECTING
2022-03-29T06:01:53.593Z | resolving_load_balancer | wechaty://api.chatie.io/insecure_xxxxx_xxxx CONNECTING -> CONNECTING
2022-03-29T06:01:53.593Z | connectivity_state | (1) wechaty://api.chatie.io/insecure_xxxxx_xxxx CONNECTING -> CONNECTING
2022-03-29T06:01:53.594Z | channel | (1) wechaty://api.chatie.io/insecure_xxxxx_xxxx Pick result for call [0]: QUEUE subchannel: null status: undefined undefined
2022-03-29T06:01:53.594Z | channel | (1) wechaty://api.chatie.io/insecure_xxxxx_xxxx callRefTimer.ref | configSelectionQueue.length=0 pickQueue.length=1
2022-03-29T06:01:53.595Z | subchannel | (2) IP.IP.IP.IP:8788 creating HTTP/2 session
2022-03-29T06:01:53.605Z | subchannel | (2) IP.IP.IP.IP:8788 connection closed with error<PHONE_NUMBER>82176:error:1408F10B:SSL routines:ssl3_get_record:wrong version number:../deps/openssl/openssl/ssl/record/ssl3_record.c:332:

2022-03-29T06:01:53.605Z | subchannel | (2) IP.IP.IP.IP:8788 connection closed
2022-03-29T06:01:53.606Z | subchannel | (2) IP.IP.IP.IP:8788 CONNECTING -> TRANSIENT_FAILURE
2022-03-29T06:01:53.607Z | pick_first | CONNECTING -> TRANSIENT_FAILURE
2022-03-29T06:01:53.607Z | resolving_load_balancer | wechaty://api.chatie.io/insecure_xxxxx_xxxx CONNECTING -> TRANSIENT_FAILURE
2022-03-29T06:01:53.607Z | channel | (1) wechaty://api.chatie.io/insecure_xxxxx_xxxx callRefTimer.unref | configSelectionQueue.length=0 pickQueue.length=0
2022-03-29T06:01:53.608Z | channel | (1) wechaty://api.chatie.io/insecure_xxxxx_xxxx Pick result for call [0]: TRANSIENT_FAILURE subchannel: null status: 14 No connection established
2022-03-29T06:01:53.609Z | call_stream | [0] cancelWithStatus code: 14 details: "No connection established"
2022-03-29T06:01:53.609Z | call_stream | [0] ended with status: code=14 details="No connection established"
2022-03-29T06:01:53.609Z | connectivity_state | (1) wechaty://api.chatie.io/insecure_xxxxx_xxxx CONNECTING -> TRANSIENT_FAILURE
06:01:53 VERB GrpcManager startStream() grpc -> event peeking data or timeout ... timeout
06:01:53 VERB GrpcManager startStream() grpc -> event peeking data or timeout ... data peeked
06:01:53 VERB GrpcManager startStream() initializing event stream ...
06:01:53 VERB GrpcManager startStream() initializing event stream ... done
06:01:53 VERB GrpcManager startStream() ... done
06:01:53 VERB GrpcManager start() starting stream ... done
06:01:53 VERB GrpcManager start() calling grpc server: start() ...
2022-03-29T06:01:53.612Z | channel | (1) wechaty://api.chatie.io/insecure_xxxxx_xxxx createCall [1] method="/wechaty.Puppet/Start", deadline=Infinity
2022-03-29T06:01:53.613Z | call_stream | [1] Sending metadata
2022-03-29T06:01:53.613Z | channel | (1) wechaty://api.chatie.io/insecure_xxxxx_xxxx Pick result for call [1]: TRANSIENT_FAILURE subchannel: null status: 14 No connection established
2022-03-29T06:01:53.613Z | call_stream | [1] cancelWithStatus code: 14 details: "No connection established"
2022-03-29T06:01:53.614Z | call_stream | [1] ended with status: code=14 details="No connection established"
2022-03-29T06:01:53.614Z | call_stream | [1] write() called with message of length 0
2022-03-29T06:01:53.615Z | call_stream | [1] end() called
2022-03-29T06:01:53.615Z | call_stream | [1] deferring writing data chunk of length 5
06:01:53 ERR StarterBot Error: 14 UNAVAILABLE: No connection established
2022-03-29T06:01:54.593Z | subchannel | (2) IP.IP.IP.IP:8788 TRANSIENT_FAILURE -> IDLE
2022-03-29T06:01:54.594Z | subchannel_refcount | (2) IP.IP.IP.IP:8788 refcount 2 -> 1
2022-03-29T06:01:54.594Z | pick_first | TRANSIENT_FAILURE -> IDLE
2022-03-29T06:01:54.594Z | resolving_load_balancer | wechaty://api.chatie.io/insecure_xxxxx_xxxx TRANSIENT_FAILURE -> IDLE
2022-03-29T06:01:54.594Z | connectivity_state | (1) wechaty://api.chatie.io/insecure_xxxxx_xxxx TRANSIENT_FAILURE -> IDLE

after install<EMAIL_ADDRESS><EMAIL_ADDRESS>/root/wechaty/getting-started
├─┬<EMAIL_ADDRESS>│ ├─┬<EMAIL_ADDRESS>│ │ ├──<EMAIL_ADDRESS>deduped
│ │ └──<EMAIL_ADDRESS>deduped
│ └──<EMAIL_ADDRESS>deduped
├──<EMAIL_ADDRESS>├─┬<EMAIL_ADDRESS>│ └──<EMAIL_ADDRESS>├─┬<EMAIL_ADDRESS>│ └──<EMAIL_ADDRESS>deduped
├─┬<EMAIL_ADDRESS>│ └──<EMAIL_ADDRESS>deduped
├─┬<EMAIL_ADDRESS>│ └──<EMAIL_ADDRESS>deduped
├─┬<EMAIL_ADDRESS>│ └──<EMAIL_ADDRESS>deduped
├─┬<EMAIL_ADDRESS>│ └──<EMAIL_ADDRESS>├─┬<EMAIL_ADDRESS>│ └──<EMAIL_ADDRESS>deduped
└─┬<EMAIL_ADDRESS>  ├─┬<EMAIL_ADDRESS>  │ ├──<EMAIL_ADDRESS>deduped
  │ └──<EMAIL_ADDRESS>deduped
  └──<EMAIL_ADDRESS>deduped

npm start
WECHATY_LOG=verbose \
WECHATY_PUPPET=wechaty-puppet-service \
WECHATY_PUPPET_SERVICE_TOKEN=insecure_xxxxxxxxx \
WECHATY_PUPPET_SERVICE_NO_TLS_INSECURE_CLIENT=false \
GRPC_VERBOSITY=DEBUG GRPC_TRACE=all \
npm start

><EMAIL_ADDRESS>start
> cross-env NODE_OPTIONS="--no-warnings --loader=ts-node/esm" node examples/ding-dong-bot.ts

06:01:50 INFO Config registering process.on("unhandledRejection") for development/debug
06:01:50 VERB Config constructor()
06:01:50 VERB PoolifyMixin poolifyMixin(EventEmitter)
06:01:50 VERB WechatifyMixin wechatifyMixin(AbstractPoolifyMixin)
06:01:50 VERB ValidationMixin validationMixin(ContactMixin)
06:01:50 VERB ValidationMixin validationMixin(ContactImplBase)
06:01:50 VERB PoolifyMixin poolifyMixin(ContactImpl)
06:01:50 VERB ValidationMixin validationMixin(ContactSelfMixin)
06:01:50 VERB WechatifyMixin wechatifyMixin(EmptyBase)
06:01:50 VERB ValidationMixin validationMixin(FavoriteMixin)
06:01:50 VERB WechatifyMixin wechatifyMixin(EventEmitter)
06:01:50 VERB ValidationMixin validationMixin(FriendshipMixin)
06:01:50 VERB WechatifyMixin wechatifyMixin(EmptyBase)
06:01:50 VERB ValidationMixin validationMixin(ImageMixin)
06:01:50 VERB WechatifyMixin wechatifyMixin(EmptyBase)
06:01:50 VERB ValidationMixin validationMixin(LocationMixin)
06:01:50 VERB WechatifyMixin wechatifyMixin(EmptyBase)
06:01:50 VERB ValidationMixin validationMixin(PostMixin)
06:01:50 VERB WechatifyMixin wechatifyMixin(EventEmitter)
06:01:50 VERB ValidationMixin validationMixin(MessageMixin)
06:01:50 VERB ValidationMixin validationMixin(MessageImplBase)
06:01:50 VERB WechatifyMixin wechatifyMixin(EmptyBase)
06:01:50 VERB ValidationMixin validationMixin(MiniProgramMixin)
06:01:50 VERB WechatifyMixin wechatifyMixin(EmptyBase)
06:01:50 VERB ValidationMixin validationMixin(MomentMixin)
06:01:50 VERB WechatifyMixin wechatifyMixin(EmptyBase)
06:01:50 VERB ValidationMixin validationMixin(MoneyMixin)
06:01:50 VERB PoolifyMixin poolifyMixin(EventEmitter)
06:01:50 VERB WechatifyMixin wechatifyMixin(AbstractPoolifyMixin)
06:01:50 VERB ValidationMixin validationMixin(RoomMixin)
06:01:50 VERB WechatifyMixin wechatifyMixin(EmptyBase)
06:01:50 VERB ValidationMixin validationMixin(RoomInvitationMixin)
06:01:50 VERB WechatifyMixin wechatifyMixin(EmptyBase)
06:01:50 VERB PoolifyMixin poolifyMixin(AbstractWechatifyMixin)
06:01:50 VERB ValidationMixin validationMixin(TagMixin)
06:01:51 VERB WechatifyMixin wechatifyMixin(EmptyBase)
06:01:51 VERB ValidationMixin validationMixin(UrlLinkMixin)
06:01:51 VERB WechatifyMixin wechatifyMixin(EmptyBase)
06:01:51 VERB ValidationMixin validationMixin(DelayMixin)
06:01:51 VERB WechatyGErrorMixin gErrorMixin(WechatySkeleton)
06:01:51 VERB WechatifyUserModuleMixin wechatifyUserModuleMixin(GErrorMixin)
06:01:51 VERB WechatyIoMixin ioMixin(WechatifyUserModuleMixin)
06:01:51 VERB WechatyPuppetMixin puppetMixin(IoMixin)
06:01:51 VERB WechatyLoginMixin loginMixin(PuppetMixin)
06:01:51 VERB WechatyMiscMixin miscMixin(LoginMixin)
06:01:51 VERB WechatyPluginMixin pluginMixin(MiscMixin)
06:01:51 VERB ValidationMixin validationMixin(WechatyBase)
06:01:51 VERB ValidationMixin validationMixin(WechatyImplBase)
2022-03-29T06:01:51.772Z | index | Loading @grpc/grpc-js version 1.5.10
06:01:52 VERB wechaty-puppet-service monkeyPatchMetadataFromHttp2Headers()
06:01:52 VERB WechatyBuilder singleton()
06:01:52 VERB WechatyBuilder newInstance()
06:01:52 VERB WechatyLoginMixin constructor()
06:01:52 VERB WechatyPuppetMixin construct()
06:01:52 VERB WechatyIoMixin constructor()
06:01:52 VERB WechatifyUserModuleMixin constructor()
06:01:52 VERB WechatySkeleton constructor()
06:01:52 VERB StateSwitch constructor(WechatyReady, "{"log":{"enableTimestamp":true,"logLevel":4,"prefixFilter":{}}}")
06:01:52 VERB ServiceCtl<Wechaty> constructor()
06:01:52 VERB StateSwitch constructor(Wechaty, "{"log":{"enableTimestamp":true,"logLevel":4,"prefixFilter":{}}}")
06:01:52 VERB StateSwitch constructor(WechatyReset, "{"log":{"enableTimestamp":true,"logLevel":4,"prefixFilter":{}}}")
06:01:52 VERB Wechaty constructor()
06:01:52 VERB WechatySkeleton on(scan, listener) registering... listenerCount: 0
06:01:52 VERB WechatySkeleton on(login, listener) registering... listenerCount: 0
06:01:52 VERB WechatySkeleton on(logout, listener) registering... listenerCount: 0
06:01:52 VERB WechatySkeleton on(message, listener) registering... listenerCount: 0
06:01:52 VERB Wechaty start()
06:01:52 VERB WechatyLoginMixin init()
06:01:52 VERB WechatyPuppetMixin init()
06:01:52 VERB WechatifyUserModuleMixin init()
06:01:52 VERB WechatySkeleton init()
06:01:52 VERB Wechaty init() Raven disabled (import("raven") failed)
06:01:52 VERB WechatifyUserModuleMixin init() initializing Wechaty User Module (WUM) ...
06:01:52 VERB WechatifyMixin wechatifyUserModule(ContactImpl)
06:01:52 VERB WechatifyMixin wechatifyUserModule(ContactImpl)(Wechaty#xxxx-xxxx-xxxx-xxxx-xxxxxxxx<>(ding-dong-bot))
06:01:52 VERB WechatifyMixin wechatifyUserModule(ContactSelfImpl)
06:01:52 VERB WechatifyMixin wechatifyUserModule(ContactSelfImpl)(Wechaty#xxxx-xxxx-xxxx-xxxx-xxxxxxxx<>(ding-dong-bot))
06:01:52 VERB WechatifyMixin wechatifyUserModule(DelayImpl)
06:01:52 VERB WechatifyMixin wechatifyUserModule(DelayImpl)(Wechaty#xxxx-xxxx-xxxx-xxxx-xxxxxxxx<>(ding-dong-bot))
06:01:52 VERB WechatifyMixin wechatifyUserModule(FriendshipImpl)
06:01:52 VERB WechatifyMixin wechatifyUserModule(FriendshipImpl)(Wechaty#xxxx-xxxx-xxxx-xxxx-xxxxxxxx<>(ding-dong-bot))
06:01:52 VERB WechatifyMixin wechatifyUserModule(ImageImpl)
06:01:52 VERB WechatifyMixin wechatifyUserModule(ImageImpl)(Wechaty#xxxx-xxxx-xxxx-xxxx-xxxxxxxx<>(ding-dong-bot))
06:01:52 VERB WechatifyMixin wechatifyUserModule(LocationImpl)
06:01:52 VERB WechatifyMixin wechatifyUserModule(LocationImpl)(Wechaty#xxxx-xxxx-xxxx-xxxx-xxxxxxxx<>(ding-dong-bot))
06:01:52 VERB WechatifyMixin wechatifyUserModule(MessageImpl)
06:01:52 VERB WechatifyMixin wechatifyUserModule(MessageImpl)(Wechaty#xxxx-xxxx-xxxx-xxxx-xxxxxxxx<>(ding-dong-bot))
06:01:52 VERB WechatifyMixin wechatifyUserModule(MiniProgramImpl)
06:01:52 VERB WechatifyMixin wechatifyUserModule(MiniProgramImpl)(Wechaty#xxxx-xxxx-xxxx-xxxx-xxxxxxxx<>(ding-dong-bot))
06:01:52 VERB WechatifyMixin wechatifyUserModule(PostImpl)
06:01:52 VERB WechatifyMixin wechatifyUserModule(PostImpl)(Wechaty#xxxx-xxxx-xxxx-xxxx-xxxxxxxx<>(ding-dong-bot))
06:01:52 VERB WechatifyMixin wechatifyUserModule(RoomImpl)
06:01:52 VERB WechatifyMixin wechatifyUserModule(RoomImpl)(Wechaty#xxxx-xxxx-xxxx-xxxx-xxxxxxxx<>(ding-dong-bot))
06:01:52 VERB WechatifyMixin wechatifyUserModule(RoomInvitationImpl)
06:01:52 VERB WechatifyMixin wechatifyUserModule(RoomInvitationImpl)(Wechaty#xxxx-xxxx-xxxx-xxxx-xxxxxxxx<>(ding-dong-bot))
06:01:52 VERB WechatifyMixin wechatifyUserModule(TagImpl)
06:01:52 VERB WechatifyMixin wechatifyUserModule(TagImpl)(Wechaty#xxxx-xxxx-xxxx-xxxx-xxxxxxxx<>(ding-dong-bot))
06:01:52 VERB WechatifyMixin wechatifyUserModule(UrlLinkImpl)
06:01:52 VERB WechatifyMixin wechatifyUserModule(UrlLinkImpl)(Wechaty#xxxx-xxxx-xxxx-xxxx-xxxxxxxx<>(ding-dong-bot))
06:01:52 VERB WechatifyUserModuleMixin init() initializing Wechaty User Module (WUM) ... done
06:01:52 VERB WechatyPuppetMixin init() instanciating puppet instance ...
06:01:52 VERB Puppet resolvePuppet({puppet: wechaty-puppet-service, puppetOptions: {}})
06:01:52 VERB Puppet resolvePuppet() resolving name "wechaty-puppet-service" ...
06:01:52 VERB Puppet resolvePuppetName(wechaty-puppet-service)
06:01:52 VERB Puppet resolvePuppetName(wechaty-puppet-service): ESM resolved
06:01:52 VERB Puppet resolvePuppet() resolving name "wechaty-puppet-service" ... done
06:01:52 VERB Puppet resolvePuppet() instanciating puppet ...
06:01:52 VERB PuppetSkeleton constructor({})
06:01:52 VERB PuppetMemoryMixin constructor()
06:01:52 VERB PuppetLoginMixin constructor()
06:01:52 VERB PuppetCacheMixin constructor()
06:01:52 VERB PuppetCacheAgent constructor()
06:01:52 VERB PuppetContactMixin constructor()
06:01:52 VERB PuppetRoomMemberMixin constructor()
06:01:52 VERB PuppetRoomMixin constructor()
06:01:52 VERB PuppetFriendshipMixin constructor()
06:01:52 VERB PuppetTagMixin constructor()
06:01:52 VERB PuppetRoomInvitationMixin constructor()
06:01:52 VERB PuppetMessageMixin constructor()
06:01:52 VERB PuppetMiscMixin constructor()
06:01:52 VERB ServiceCtl<PuppetServiceMixin> constructor()
06:01:52 VERB StateSwitch constructor(PuppetServiceMixin, "{"log":{"enableTimestamp":true,"logLevel":4,"prefixFilter":{}}}")
06:01:52 VERB StateSwitch constructor(PuppetServiceMixinReset, "{"log":{"enableTimestamp":true,"logLevel":4,"prefixFilter":{}}}")
06:01:52 VERB PuppetServiceMixin constructor() #0
06:01:52 VERB PuppetWatchdogAgent constructor(xxxx-xxxx-xxxx-xxxx-xxxxxxxx)
06:01:52 VERB PuppetWatchdogAgent constructor() timeout 60 seconds
06:01:52 VERB ReadyMixin constructor()
06:01:52 VERB PuppetPostMixin constructor()
06:01:52 VERB PuppetSayableMixin constructor()
06:01:52 VERB TapMixin constructor()
06:01:52 VERB Puppet constructor({})
06:01:52 VERB PayloadStore constructor({"token":"insecure_xxxxx_xxxx"})
06:01:52 VERB PuppetService hookPayloadStore()
06:01:52 VERB Puppet resolvePuppet() instanciating puppet ... done
06:01:52 VERB WechatyPuppetMixin init() instanciating puppet instance ... done
06:01:52 VERB WechatyPuppetMixin init() setting memory ...
06:01:52 VERB PuppetMemoryMixin setMemory(ding-dong-bot)
06:01:52 VERB WechatyPuppetMixin init() setting memory ... done
06:01:52 VERB WechatyPuppetMixin init() setting up events ...
06:01:52 VERB WechatyPuppetMixin __setupPuppetEvents(Puppet<PuppetService>(ding-dong-bot))
06:01:52 VERB PuppetMixin __setupPuppetEvents() puppet.on(friendship) (listenerCount:0) registering...
06:01:52 VERB PuppetMixin __setupPuppetEvents() puppet.on(login) (listenerCount:1) registering...
06:01:52 VERB PuppetMixin __setupPuppetEvents() puppet.on(logout) (listenerCount:1) registering...
06:01:52 VERB PuppetMixin __setupPuppetEvents() puppet.on(message) (listenerCount:0) registering...
06:01:52 VERB PuppetMixin __setupPuppetEvents() puppet.on(post) (listenerCount:0) registering...
06:01:52 VERB PuppetMixin __setupPuppetEvents() puppet.on(room-invite) (listenerCount:0) registering...
06:01:52 VERB PuppetMixin __setupPuppetEvents() puppet.on(room-join) (listenerCount:0) registering...
06:01:52 VERB PuppetMixin __setupPuppetEvents() puppet.on(room-leave) (listenerCount:0) registering...
06:01:52 VERB PuppetMixin __setupPuppetEvents() puppet.on(room-topic) (listenerCount:0) registering...
06:01:52 VERB PuppetMixin __setupPuppetEvents() puppet.on(scan) (listenerCount:0) registering...
06:01:52 VERB PuppetMixin __setupPuppetEvents() puppet.on(dirty) (listenerCount:0) registering...
06:01:52 VERB PuppetMixin __setupPuppetEvents() puppet.on(dong) (listenerCount:0) registering...
06:01:52 VERB PuppetMixin __setupPuppetEvents() puppet.on(error) (listenerCount:0) registering...
06:01:52 VERB PuppetMixin __setupPuppetEvents() puppet.on(heartbeat) (listenerCount:0) registering...
06:01:52 VERB PuppetMixin __setupPuppetEvents() puppet.on(ready) (listenerCount:0) registering...
06:01:52 VERB PuppetMixin __setupPuppetEvents() puppet.on(reset) (listenerCount:0) registering...
06:01:52 VERB WechatyPuppetMixin __setupPuppetEvents() ... done
06:01:52 VERB WechatyPuppetMixin init() setting up events ... done
06:01:52 VERB WechatyPuppetMixin init() emitting "puppet" event ...
06:01:52 VERB WechatyPuppetMixin init() emitting "puppet" event ... done
06:01:52 VERB ServiceCtl<Wechaty> start()
06:01:52 VERB StateSwitch <Wechaty> active(pending) <- (false)
06:01:52 VERB ServiceCtl<Wechaty> start() super.start() ...
06:01:52 VERB WechatyPuppetMixin start()
06:01:52 VERB WechatyPuppetMixin start() super.start() ...
06:01:52 VERB WechatyIoMixin start()
06:01:52 VERB WechatySkeleton start()
06:01:52 VERB WechatyLoginMixin init()
06:01:52 VERB WechatyPuppetMixin init()
06:01:52 VERB WechatifyUserModuleMixin init()
06:01:52 VERB WechatySkeleton init()
06:01:52 VERB WechatifyUserModuleMixin init() Wechaty User Module (WUM)s have already wechatified: skip
06:01:52 VERB WechatyPuppetMixin init() skipped because this puppet has already been inited before.
06:01:52 VERB WechatyPuppetMixin start() super.start() ... done
06:01:52 VERB WechatyPuppetMixin start() starting puppet ...
06:01:52 VERB ReadyMixin start()
06:01:52 VERB PuppetServiceMixin start()
06:01:52 VERB ServiceCtl<PuppetServiceMixin> start()
06:01:52 VERB StateSwitch <PuppetServiceMixin> active(pending) <- (false)
06:01:52 VERB ServiceCtl<PuppetServiceMixin> start() super.start() ...
06:01:52 VERB PuppetCacheMixin start()
06:01:52 VERB PuppetLoginMixin start()
06:01:52 VERB PuppetMemoryMixin start()
06:01:52 VERB PuppetSkeleton start()
06:01:52 VERB PuppetCacheAgent start()
06:01:52 VERB PuppetCacheMixin start() "dirty" event listener added
06:01:52 VERB ServiceCtl<PuppetServiceMixin> start() super.start() ... done
06:01:52 VERB ServiceCtl<PuppetServiceMixin> start() this.onStart() ...
06:01:52 VERB PuppetService onStart()
06:01:52 VERB PuppetService start() instanciating GrpcManager ...
06:01:52 VERB GrpcManager constructor({})
06:01:52 VERB GrpcManager constructor() tlsRootCert(hash): "xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
06:01:52 VERB GrpcManager constructor() token: "insecure_xxxxx_xxxx"
06:01:52 VERB GrpcManager constructor() endpoint: "wechaty://api.chatie.io/insecure_xxxxx_xxxx"
06:01:52 VERB GrpcManager constructor() disableTls: "false"
06:01:52 VERB GrpcManager constructor() serverName(SNI): "insecure"
06:01:52 VERB PuppetService start() instanciating GrpcManager ... done
06:01:52 VERB PuppetService start() setting up bridge grpc event stream ...
06:01:52 VERB PuppetService bridgeGrpcEventStream(client)
06:01:52 VERB PuppetService start() setting up bridge grpc event stream ... done
06:01:52 VERB PuppetService start() starting grpc manager...
06:01:52 VERB GrpcManager start()
06:01:52 VERB GrpcManager start() initializing client ...
06:01:52 VERB GrpcManager initClient()
06:01:52 VERB GrpcManager initClient() TLS: enabled
2022-03-29T06:01:52.434Z | resolving_load_balancer | wechaty://api.chatie.io/insecure_xxxxx_xxxx IDLE -> IDLE
2022-03-29T06:01:52.434Z | connectivity_state | (1) wechaty://api.chatie.io/insecure_xxxxx_xxxx IDLE -> IDLE
2022-03-29T06:01:52.436Z | channel | (1) wechaty://api.chatie.io/insecure_xxxxx_xxxx Channel constructed with options {
  "grpc.ssl_target_name_override": "insecure",
  "grpc.default_authority": "insecure_xxxxx_xxxx"
}
2022-03-29T06:01:52.533Z | channel_stacktrace | (1) Channel constructed
    at new ChannelImplementation (/root/wechaty/getting-started/node_modules/@grpc/grpc-js/src/channel.ts:338:19)
    at new Client (/root/wechaty/getting-started/node_modules/@grpc/grpc-js/src/client.ts:153:30)
    at new ServiceClientImpl (/root/wechaty/getting-started/node_modules/@grpc/grpc-js/src/make-client.ts:128:3)
    at GrpcManager.initClient (file:///root/wechaty/getting-started/node_modules/wechaty-puppet-service/src/client/grpc-manager.ts:258:20)
    at GrpcManager.start (file:///root/wechaty/getting-started/node_modules/wechaty-puppet-service/src/client/grpc-manager.ts:153:16)
    at PuppetService.onStart (file:///root/wechaty/getting-started/node_modules/wechaty-puppet-service/src/client/puppet-service.ts:173:23)
    at PuppetService.start (file:///root/wechaty/getting-started/node_modules/state-switch/src/service-ctl/service-ctl.ts:89:20)
    at async PuppetService.start (file:///root/wechaty/getting-started/node_modules/wechaty-puppet/src/mixins/service-mixin.ts:34:7)
    at async PuppetService.start (file:///root/wechaty/getting-started/node_modules/wechaty-puppet/src/mixins/ready-mixin.ts:24:7)
    at async WechatyImpl.start (file:///root/wechaty/getting-started/node_modules/wechaty/src/wechaty-mixins/puppet-mixin.ts:83:11)
06:01:52 VERB GrpcManager initClient() ... done
06:01:52 VERB GrpcManager start() initializing client ... done
06:01:52 VERB GrpcManager start() starting stream ...
06:01:52 VERB GrpcManager startStream()
06:01:52 VERB GrpcManager startStream() grpc -> event() ...
2022-03-29T06:01:52.536Z | channel | (1) wechaty://api.chatie.io/insecure_xxxxx_xxxx createCall [0] method="/wechaty.Puppet/Event", deadline=Infinity
2022-03-29T06:01:52.538Z | call_stream | [0] Sending metadata
2022-03-29T06:01:52.559Z | resolving_load_balancer | wechaty://api.chatie.io/insecure_xxxxx_xxxx IDLE -> CONNECTING
2022-03-29T06:01:52.559Z | connectivity_state | (1) wechaty://api.chatie.io/insecure_xxxxx_xxxx IDLE -> CONNECTING
2022-03-29T06:01:52.560Z | resolving_load_balancer | wechaty://api.chatie.io/insecure_xxxxx_xxxx CONNECTING -> CONNECTING
2022-03-29T06:01:52.560Z | connectivity_state | (1) wechaty://api.chatie.io/insecure_xxxxx_xxxx CONNECTING -> CONNECTING
2022-03-29T06:01:52.560Z | channel | (1) wechaty://api.chatie.io/insecure_xxxxx_xxxx callRefTimer.ref | configSelectionQueue.length=1 pickQueue.length=0
2022-03-29T06:01:52.561Z | call_stream | [0] write() called with message of length 0
2022-03-29T06:01:52.562Z | call_stream | [0] end() called
06:01:52 VERB GrpcManager startStream() grpc -> event() ... done
06:01:52 VERB GrpcManager startStream() grpc -> event peeking data or timeout ...
2022-03-29T06:01:52.563Z | call_stream | [0] deferring writing data chunk of length 5
2022-03-29T06:01:53.588Z | pick_first | Connect to address list IP.IP.IP.IP:8788
2022-03-29T06:01:53.590Z | subchannel | (2) IP.IP.IP.IP:8788 Subchannel constructed with options {
  "grpc.ssl_target_name_override": "insecure",
  "grpc.default_authority": "insecure_xxxxx_xxxx"
}
2022-03-29T06:01:53.590Z | subchannel_refcount | (2) IP.IP.IP.IP:8788 refcount 0 -> 1
2022-03-29T06:01:53.590Z | subchannel_refcount | (2) IP.IP.IP.IP:8788 refcount 1 -> 2
2022-03-29T06:01:53.591Z | pick_first | Start connecting to subchannel with address IP.IP.IP.IP:8788
2022-03-29T06:01:53.591Z | pick_first | IDLE -> CONNECTING
2022-03-29T06:01:53.592Z | resolving_load_balancer | wechaty://api.chatie.io/insecure_xxxxx_xxxx CONNECTING -> CONNECTING
2022-03-29T06:01:53.592Z | channel | (1) wechaty://api.chatie.io/insecure_xxxxx_xxxx callRefTimer.unref | configSelectionQueue.length=1 pickQueue.length=0
2022-03-29T06:01:53.592Z | connectivity_state | (1) wechaty://api.chatie.io/insecure_xxxxx_xxxx CONNECTING -> CONNECTING
2022-03-29T06:01:53.592Z | subchannel | (2) IP.IP.IP.IP:8788 IDLE -> CONNECTING
2022-03-29T06:01:53.593Z | pick_first | CONNECTING -> CONNECTING
2022-03-29T06:01:53.593Z | resolving_load_balancer | wechaty://api.chatie.io/insecure_xxxxx_xxxx CONNECTING -> CONNECTING
2022-03-29T06:01:53.593Z | connectivity_state | (1) wechaty://api.chatie.io/insecure_xxxxx_xxxx CONNECTING -> CONNECTING
2022-03-29T06:01:53.594Z | channel | (1) wechaty://api.chatie.io/insecure_xxxxx_xxxx Pick result for call [0]: QUEUE subchannel: null status: undefined undefined
2022-03-29T06:01:53.594Z | channel | (1) wechaty://api.chatie.io/insecure_xxxxx_xxxx callRefTimer.ref | configSelectionQueue.length=0 pickQueue.length=1
2022-03-29T06:01:53.595Z | subchannel | (2) IP.IP.IP.IP:8788 creating HTTP/2 session
2022-03-29T06:01:53.605Z | subchannel | (2) IP.IP.IP.IP:8788 connection closed with error<PHONE_NUMBER>82176:error:1408F10B:SSL routines:ssl3_get_record:wrong version number:../deps/openssl/openssl/ssl/record/ssl3_record.c:332:

2022-03-29T06:01:53.605Z | subchannel | (2) IP.IP.IP.IP:8788 connection closed
2022-03-29T06:01:53.606Z | subchannel | (2) IP.IP.IP.IP:8788 CONNECTING -> TRANSIENT_FAILURE
2022-03-29T06:01:53.607Z | pick_first | CONNECTING -> TRANSIENT_FAILURE
2022-03-29T06:01:53.607Z | resolving_load_balancer | wechaty://api.chatie.io/insecure_xxxxx_xxxx CONNECTING -> TRANSIENT_FAILURE
2022-03-29T06:01:53.607Z | channel | (1) wechaty://api.chatie.io/insecure_xxxxx_xxxx callRefTimer.unref | configSelectionQueue.length=0 pickQueue.length=0
2022-03-29T06:01:53.608Z | channel | (1) wechaty://api.chatie.io/insecure_xxxxx_xxxx Pick result for call [0]: TRANSIENT_FAILURE subchannel: null status: 14 No connection established
2022-03-29T06:01:53.609Z | call_stream | [0] cancelWithStatus code: 14 details: "No connection established"
2022-03-29T06:01:53.609Z | call_stream | [0] ended with status: code=14 details="No connection established"
2022-03-29T06:01:53.609Z | connectivity_state | (1) wechaty://api.chatie.io/insecure_xxxxx_xxxx CONNECTING -> TRANSIENT_FAILURE
06:01:53 VERB GrpcManager startStream() grpc -> event peeking data or timeout ... timeout
06:01:53 VERB GrpcManager startStream() grpc -> event peeking data or timeout ... data peeked
06:01:53 VERB GrpcManager startStream() initializing event stream ...
06:01:53 VERB GrpcManager startStream() initializing event stream ... done
06:01:53 VERB GrpcManager startStream() ... done
06:01:53 VERB GrpcManager start() starting stream ... done
06:01:53 VERB GrpcManager start() calling grpc server: start() ...
2022-03-29T06:01:53.612Z | channel | (1) wechaty://api.chatie.io/insecure_xxxxx_xxxx createCall [1] method="/wechaty.Puppet/Start", deadline=Infinity
2022-03-29T06:01:53.613Z | call_stream | [1] Sending metadata
2022-03-29T06:01:53.613Z | channel | (1) wechaty://api.chatie.io/insecure_xxxxx_xxxx Pick result for call [1]: TRANSIENT_FAILURE subchannel: null status: 14 No connection established
2022-03-29T06:01:53.613Z | call_stream | [1] cancelWithStatus code: 14 details: "No connection established"
2022-03-29T06:01:53.614Z | call_stream | [1] ended with status: code=14 details="No connection established"
2022-03-29T06:01:53.614Z | call_stream | [1] write() called with message of length 0
2022-03-29T06:01:53.615Z | call_stream | [1] end() called
2022-03-29T06:01:53.615Z | call_stream | [1] deferring writing data chunk of length 5
06:01:53 ERR StarterBot Error: 14 UNAVAILABLE: No connection established
2022-03-29T06:01:54.593Z | subchannel | (2) IP.IP.IP.IP:8788 TRANSIENT_FAILURE -> IDLE
2022-03-29T06:01:54.594Z | subchannel_refcount | (2) IP.IP.IP.IP:8788 refcount 2 -> 1
2022-03-29T06:01:54.594Z | pick_first | TRANSIENT_FAILURE -> IDLE
2022-03-29T06:01:54.594Z | resolving_load_balancer | wechaty://api.chatie.io/insecure_xxxxx_xxxx TRANSIENT_FAILURE -> IDLE
2022-03-29T06:01:54.594Z | connectivity_state | (1) wechaty://api.chatie.io/insecure_xxxxx_xxxx TRANSIENT_FAILURE -> IDLE

With your latest debug message log it seems that the gRPC method name mismatch problem has been fixed by using an old version of wechaty-grpc.
We discover that this is a bug and should have been fixed via

https://github.com/wechaty/grpc/issues/174

With the above changes, the system should work as expected after running:
rm -fr node_modules package-lock.json
npm install

Please try to use the latest wechaty-grpc and try again to see if it solves all your problems:
npm install<EMAIL_ADDRESS>

Exciting! it works.
Follow your tips, run
rm -fr node_modules package-lock.json
npm install
npm install<EMAIL_ADDRESS>
WECHATY_LOG=verbose \
WECHATY_PUPPET=wechaty-puppet-service \
WECHATY_PUPPET_SERVICE_TOKEN=insecure_xxxxxx \
WECHATY_PUPPET_SERVICE_NO_TLS_INSECURE_CLIENT=true \
npm start
``

ding-dong is working on Wechat, thanks! :)

Great to know that, you are welcome!
And your issue is very valuable for solving this problem, appreciate it!


Why floatThead-Container overflow:hidden?

https://github.com/mkoryak/floatThead/blob/master/jquery.floatThead.js#L250
I need it to be visible for my implementation. I could use a style with !important, but that seems like a poor solution. Is it important for it to be overflow:hidden?

yes, it is important for it to have overflow hidden. it comes into play when there is horizontal scrolling. the header scrolls within that container. you can remove it only if you are sure that your tables will never have horizontal scrolling.

I'm using window scrolling. Does window scrolling support horizontal scroll?

yes, you can remove the overflow on window scrolling. the only reason it is there is because I never had any need to have it be any different :)
you can test it here:
http://mkoryak.github.io/floatThead/tests/big-table/

this change is now on master


Logout link doesn't work

Logout link takes method as GET only when nested under
 tag and not the explicitly mentioned method DELETE.

   <%= link_to(session_path, method: :delete) do %>

       <%= t("sign_out") %>
   <% end %>

Note: jquery-rails gem has been included in gemfile.

@suhasg
Can you provide the following information:

Rails version
Monban version
jquery-rails version
Relevant log file output.

Thanks.

@suhasg ,
I have a feeling that this has nothing to do with Monban (since it has no control over which type of request is made). My guesses are that you have an unclosed  or <form> tag somewhere or that your JavaScript is throwing an exception and preventing the method: :delete from working correctly.

Closing this due to lack of feedback and that it probably isn't a monban issue.


SPIKE: Where to model organizations and roles?

We need to decide for the User management epic #9 where organizations and roles are modeled. Should the modeling take place in Gryphon, which is responsible to model case and data models, and then exported to Chimera?
Arguments for modeling in Gryphon

case models (including data models) are already modeled in Gryphon
the logic and UI for defining data models could be easily reused to model organizations and roles
it should be possible to model the role a user has to have to execute a certain activity (see bptlab/gryphon#27). Gryphon can only check whether such a role exists if it knows the organization in which the case model should be used to get the roles of that organization

Arguments for modeling in Chimera

users register and log-in to Chimera, which hence keeps user information
Chimera needs information about organizations and roles to enforce it during execution. The information would have to be duplicated.
organizations and roles are not limited to a case model, but can be referred to by several case models. Gryphon would need to offer an additional view where to model roles.
user management can be seen as a configuration task, which would make Chimera a good place, similar to configuration of email tasks
the Chimera UI is in the process of being re-implemented, hence user management can be considered from the beginning instead of extending the Gryphon UI

Alternative: merge Gryphon with Chimera
An alternative would be to end the separation between a modeling and an execution system, but rather to integrate the two. Otherwise, it would also be necessary to implement user management in both systems.

Decision
Organizations, users and roles are modeled in Chimera.
In the long run, Gryphon should be merged into the new Chimera UI.


failing transport due to protocol violation: SUBSCRIBED received for non-pending request ID

Only the angular-wamp client is having trouble with the router that I am using. The issue is only with the subscription, as it is able to publish without error. The issue seems to be with the ID that is returned by the server.
failing transport due to protocol violation: SUBSCRIBED received for non-pending request ID<PHONE_NUMBER>854775807
I have tried the fixes proposed on the thruway issues side, and none of them have been effective. The precision setting does not make any difference, and encoding large integers as strings has also failed. The server is currently running on windows 7 x64.
Here is the Autobahn error log.
AutobahnJS debug enabled
autobahn.min.js:33 trying to create WAMP transport of type: websocket
autobahn.min.js:33 using WAMP transport type: websocket
autobahn.min.js:33 WebSocket transport send [1,"realm1",{"roles":{"caller":{"features":{"caller_identification":true,"progressive_call_results":true}},"callee":{"features":{"progressive_call_results":true}},"publisher":{"features":{"subscriber_blackwhite_listing":true,"publisher_exclusion":true,"publisher_identification":true}},"subscriber":{"features":{"publisher_identification":true}}}}]
autobahn.min.js:33 WebSocket transport receive [2,1892156065,{"roles":{"broker":{"features":{"subscriber_blackwhite_listing":true,"publisher_exclusion":true,"subscriber_metaevents":true}},"dealer":{"features":{"caller_identification":true,"progressive_call_results":true}}}}]
angular.js:10264 Congrats!  You're connected to the WAMP server!
autobahn.min.js:33 WebSocket transport send [32,7047175104102400,{},"com.myapp.hello"]
autobahn.min.js:33 WebSocket transport receive [33,"9223372036854775807",3918414]
autobahn.min.js:33 failing transport due to protocol violation: SUBSCRIBED received for non-pending request ID<PHONE_NUMBER>854775807
autobahn.min.js:115 Uncaught InvalidAccessError: Failed to execute 'close' on 'WebSocket': The code must be either 1000, or between 3000 and 4999. 1002 is neither.18.a.create.window.c.close @ autobahn.min.js:11516.f._protocol_violation @ autobahn.min.js:8316.f._process_SUBSCRIBED @ autobahn.min.js:8316.f._socket.onmessage @ autobahn.min.js:9418.a.create.window.b.onmessage @ autobahn.min.js:114
angular.js:8644t @ angular.js:8440$get.f @ angular.js:8160n.promise.then.J @ angular.js:11592n.promise.then.J @ angular.js:11592(anonymous function) @ angular.js:11678$get.h.$eval @ angular.js:12769$get.h.$digest @ angular.js:12573$get.h.$apply @ angular.js:12873(anonymous function) @ angular.js:14390e @ angular.js:4498(anonymous function) @ angular.js:4799
autobahn.min.js:33 WebSocket transport send [16,3144473462702080,{},"com.myapp.hello",["Hello World"]]
autobahn.min.js:33 WebSocket transport receive [36,3918414,1216462910,{},["Hello from PHP"]]
autobahn.min.js:33 failing transport due to protocol violation: EVENT received for non-subscribed subscription ID 3918414
autobahn.min.js:115 Uncaught InvalidAccessError: Failed to execute 'close' on 'WebSocket': The code must be either 1000, or between 3000 and 4999. 1002 is neither.

What version of Thruway are you using?  Can you make sure that to turn off encoding large integers as strings?

I have tried using 0.3.* as well as the 0.4.*dev. The string encoding is disabled. I disabled it after having tried it and it did not work.. Precision is set to 16 in php.ini. serialize_precision is 17. The error persists regardless of what these settings are changed to.
WebSocket transport receive [33,9.223372036854776e+18,272637018]
autobahn.min.js:33 failing transport due to protocol violation: SUBSCRIBED received for non-pending request ID<PHONE_NUMBER>854776000
autobahn.min.js:115 Uncaught InvalidAccessError: Failed to execute 'close' on 'WebSocket': The code must be either 1000, or between 3000 and 4999. 1002 is neither.

I suppose it is a Thruway specific issue looking into it further...Autobahn.js by itself is displaying the same behavior.

Yeah, it's almost defiantly a Thruway/PHP issue.  Can you open an issue there and include your PHP version, operating system information and processor information?


_summary search

I see that HAPI automatically handles summary, but is there a way for summary to be passed onto the RESTful call as a parameter?
It would be beneficial to push the summary as far down into the predicate as possible (i.e. only retrieve and map the data requested) rather than spending the computing power to process and map the resource, only to have it thrown away at the top level.

ok, I got it... the SummaryEnum parameter seems to do the trick... that took some digging...


unnecessary horizontal scrollbar

if fullscreen prop is added to HTML tag

and content height is bigger than 100vh, horizontal scrollbar appeared (because of vertical scrollbar)
I think that horizontal scrollbal is unnecessary and not pretty because of content width is less than 100%

it should have overflow: hidden, is that correct?

no
 does not work as expected
your example at https://codesandbox.io/s/r3f-contact-shadow-jvssp (I try implement in my project)
also has horizontal scrollbar

Because overflow: hidden hide both scrollbars overflowX is necessary instead of overflow.
Also in your example is place to add overflowX not HTML tag, but scrollArea div.
Here is solution I find:

   <div style={{ height: `${state.pages * 100}vh` }}/>


Clang response files break ccache

Describe the bug
https://github.com/NixOS/nixpkgs/pull/112449 hides clang arguments in a "response file" by default if isClang is true, but ccache does not support this and responds with "no input files" instead.
Additional context
The following workaround can be used to disable response files in a ccacheWrapper result cc, fixing the issue:
  cc.overrideAttrs (old: {
    installPhase = builtins.replaceStrings ["use_response_file_by_default=1"] ["use_response_file_by_default=0"] old.installPhase;
  })

Notify maintainers
@angerman
Maintainer information:
# a list of nixpkgs attributes affected by the problem
attribute: ccacheWrapper ccacheStdenv
# a list of nixos modules affected by the problem
module: programs.ccache

I've run into this issue as well.
Can we perhaps add a export NIX_CC_USE_RESPONSE_FILE=0 to the ccache-links wrapper (gated on isClang, maybe)?
It's also not clear to me if this is a bug in ccache or intended behavior (I was not able to find an issue for it upstream) but it's definitely reproducible:
# Okay:
nix-shell -p stdenv --run 'bash -c "cc @<(echo --version)"'

# Not okay:
nix-shell -p ccache --run 'bash -c "ccache cc @<(echo --version)"'


Done button in institute search only clears the search string

When using the institute search in the iOS app, there is a "Done" button but the function of this button is not clear, because pressing the name of an institution will close the list.

This is especially confusing if the users searched for a non-existing institute.

Hi @jornane ,
I would suggest this as an enhancement because it changes the defined wireframes and all the accepted previous deliverables. How would you suggest to work that button with results/non-results? Would you remove it at all?
Thanks

The way the app works now, the user never actually has to press Done. By pressing the name of an institution, the app automatically continues. So I would either get rid of the Done button, or make it go back to the previous screen, whichever is easier to implement.


Modify MjModel values during runtime(or just before mj_step)

Hi,
I'm a student and I'm trying to use MuJoCo for simulations on robot body dynamics.
I'm looking for some help with modifying the model obj values defined when
model = mujoco.MjModel.from_xml_path(path)
data = mujoco.MjData(model)

I intend to run simulations multiple times with few modified values model obj values. Following is my XML

minimal XML
<mujoco>
  <worldbody>
  <body name="arm" pos="0 0 .01">
        <joint axis="0 0 1" limited="false" name="joint0" pos="0 0 0" type="hinge"/>
	<geom fromto="0 0 0 0.5 0 0" name="link0" rgba="0.0 0.9 0 1" size=".01" type="cylinder"/>
  </body>
  </worldbody>
</mujoco>

I am able to read the values i defined in xml by doing model.geom('link0').pos, but even though i modify this just before mujoco.mj_resetData(), it doesnt seem to update in the actual simulation or reflect in the rendering.

This is surprising, but we can't diagnose without a MWE.
I suspect that you need to turn off sameframe which is an optimisation whereby the compiler tells the kinematics that a frame transformation can be skipped.

Closing due to lack of activity.


Support RN 0.47 issue, not merged with release yet??!

react-native-audio :  2.2.0
react-native : 0.49.0
react :  16.0.0
using react-native-sound ? No
On compiling android im still getting this error:

react-native-audio/android/src/main/java/com/rnim/rn/audio/ReactNativeAudioPackage.java:36: error: method does not override or implement a method from a supertype

Steps to reproduce
react-native android
I tought that this was already fixed in pr 199, was that not merged with the latest release??!!

@robboerman2  Try this one before they merge the pr，https://github.com/UnPourTous/react-native-audio

thanks for the responds!
Sadly im still getting the same error on that git too

Hi there, not sure it's related to this issue, but I'm getting the following error message in a new development machine here:
:react-native-audio:compileReleaseJavaWithJavac - is not incremental (e.g. outputs have changed, no previous execution, etc.).
.................. /android/src/main/java/com/rnim/rn/audio/ReactNativeAudioPackage.java:13: error: ReactNativeAudioPackage is not abstract and does not override abstract method createJSModules() in ReactPackage
public class ReactNativeAudioPackage implements ReactPackage {
^
1 error
:react-native-audio:compileReleaseJavaWithJavac FAILED
This is my config:
react-native-cli: 2.0.1
react-native: 0.46.4
react: "16.0.0-alpha.12"
and I' m using react-native-sound as well:
"react-native-sound": "^0.10.4",
I tried with NPM 5+, which failed, and also with NPM 4+.
It is strange because the error does not happen with other development machines (Linux and IOS) with very similar configurations.
Any ideas?

Ah yeah, forgot to mention my version of "react-native-audio": "^3.2.2".

Apparently NPM was fetching 3.5.0 for my system. When I forced it to use 3.1.0, run-android seemed to work.

@jsierles may i ask why you close this issue?

Sorry, my mistake. Is this still not working? I'll try testing today.

OK, I've tested this and had no problems on 0.47. The issue was fixed by a removal of the offending createJSModules method.


Duper incorrectly saturating?

In this thread you mentioned:

When calling duper or duper? without setting the portfolio instance, Duper can throw a different error Duper failed to solve the goal and determined that it will be unable to do so with the current configuration of options and selection of premises. If this happens, then Duper saturated or failed on all of the option configurations in its portfolio mode. If this happens on a problem that Vampire can prove, then I would expect you probably found a bug.

Here is an example where I hit that error on something that not only Vampire reaches (actually, this example is derived directly from Vampire output), but that Duper is able to solve without one of the hypotheses included.
In the following reproducer, the have eq823 fails in the first example, but succeeds in the second without the inclusion of the eq807 hypothesis.
import Duper
import Mathlib.Tactic
import Mathlib.Data.Set.Finite

class Magma (α : Type _) where
op : α → α → α
infix:65 " ◇ " => Magma.op

abbrev Equation1701 (G: Type _) [Magma G] := ∀ x y z : G, x = (y ◇ x) ◇ ((z ◇ x) ◇ x)
abbrev Equation1035 (G: Type _) [Magma G] := ∀ x y : G, x = x ◇ ((y ◇ (x ◇ x)) ◇ x)

-- fof(eq3_surj_inj, axiom, ![X] : ?[T] : ( X = mul(T, T) ) => ![T1,T2] : ( (mul(T1, T1) = mul(T2, T2) ) => T1 = T2 ) ).
lemma Finite.eq3_surj_inj (G: Type _) [Magma G] [Finite G] : (∀ X : G, ∃ T : G, X = (T ◇ T)) -> (∀ T1 T2 : G, ((T1 ◇ T1) = (T2 ◇ T2)) -> T1 = T2) := by
  intro ha t1 t2 hb
  let f (t : G) := (t ◇ t)
  let S : Set G := Set.univ
  have m1 : S.MapsTo f S := by
    intro
    simp [S]
  have t : S.SurjOn f S := by
    intro x _
    specialize ha x
    obtain ⟨t, hc⟩ := ha
    use t
    simp [S, f]
    symm
    apply hc
  rw [Set.Finite.surjOn_iff_bijOn_of_mapsTo (Set.toFinite _) m1] at t
  apply t.injOn (by simp [S]) (by simp [S])
  simp only [f, hb]

example (G : Type _) [Magma G] [Finite G] (h : Equation1701 G) : Equation1035 G := by
  have eq807 (X0 : G) : (X0 ◇ (X0 ◇ X0)) = X0 := by duper [h, Finite.eq3_surj_inj]
  have eq823 (X1 X0 : G) : (X0 ◇ X0) = ((X1 ◇ (X0 ◇ X0)) ◇ X0) := by duper [h, eq807, Finite.eq3_surj_inj]
  sorry

example (G : Type _) [Magma G] [Finite G] (h : Equation1701 G) : Equation1035 G := by
  have eq807 (X0 : G) : (X0 ◇ (X0 ◇ X0)) = X0 := by duper [h, Finite.eq3_surj_inj]
  have eq823 (X1 X0 : G) : (X0 ◇ X0) = ((X1 ◇ (X0 ◇ X0)) ◇ X0) := by duper [h, Finite.eq3_surj_inj]
  sorry

This bug is now resolved in the most recent Duper version (v0.0.20). Surprisingly, it turned out to be caused by the same bug as #30.


Repo sync for protected CLA branch

The pull request is created from master637455548169971821 to master to fix git push error for protected CLA branch

@opbld17 : Thanks for your contribution! The author(s) have been notified to review your proposed change.

@opbld17 : Thanks for your contribution! The author(s) have been notified to review your proposed change.


please open source the code of Unified Visual Relationship Detection with Vision and Language Models

Hello, can you please open source the code of Unified Visual Relationship Detection with Vision and Language Models? I am very interested in your training method for non-relationship data.

Also interested

plz


Building in release mode is now possible

User can now build the fuzzers in release mode if wanted by using --release.
By default the minimization won't be done in release mode

@kevin-valerio please run cargo fmt and cargo clippy

Thank you both!


Implement 'missing codepoints' check

Nyshadh has written a 'missing codepoints' check that FB should implement

I contacted Nyshadh and he said he did not yet publish his script on google/fonts but that he'll let me know when he does that, so that I can port it / integrate it into fontbakery.

Thank you nyshadh!
On Mar 9, 2017 11:25 PM, "Felipe Corrêa da Silva Sanches" <
<EMAIL_ADDRESS>wrote:

I contacted Nyshadh and he said he did not yet publish his script on
google/fonts but that he'll let me know when he does that, so that I can
port it / integrate it into fontbakery.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/googlefonts/fontbakery/issues/1232#issuecomment-285574567,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAP9y4sVyqbWbbRriVpmu1mHugI2hjLOks5rkNC3gaJpZM4MYIb5
.

Sure! As soon as Nyshadh publishes his scripts, I'll port them into FB.

@davelab6 can you ask Nyshadh for this script again soon, please?

Nyshadh is out of the office for a few weeks

Nyshadh may be able to share this end of this week / early next week

Great, thanks!

@davelab6 Any further info on this?
Maybe a description of what needs to be done? Or a reference implementation. Otherwise, I'll re-categorize this a "MISC"/"maybe-someday" and revisit someday in the future.
Presumably there is an implementation by Nyshadh somewhere, so I should not spend time on this issue right now.

@felipesanches yep - I agree, I moved it to 0.5.0 :)

thanks!

I pinged Nyshadh about this again; hopefully will be possible soon :)

thanks

https://github.com/google/fonts/pull/1108

Does the OS/2 codepoint coverage part of FontVal does what you want for this? That's all in C# in https://github.com/HinTak/Font-Validator/blob/master/OTFontFileVal/val_OS2.cs line 1160 onwards or thereabouts.

Thanks! I'll take a look at that later.

No the OS/2 codepages aren't relevant, but having that set of char checks
in pyfontaine would be nice. Please don't close this until that's resolved
or there is an upstream issue for it
On Aug 31, 2017 8:37 PM, "Felipe Corrêa da Silva Sanches" <
<EMAIL_ADDRESS>wrote:

Thanks! I'll take a look at that later.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/googlefonts/fontbakery/issues/1232#issuecomment-326456222,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAP9y8U0S2oOtdpwasQ_H3rZ7i3EGQjDks5sd1HigaJpZM4MYIb5
.

we don't have pyfontaine as a dependency anymore, so I moved this issue to the pyfontaine repo and will close this one.

Thanks!


Initial package.json for npm.

We'll add commits here until it's ready. Obviously don't merge until then. We can keep it rebased on top of master.

npm init automatically made the description be the image.

In that last commit, the cesiumjs dependency is from npm, from upstream agi. Let me know if it should be changed to the klokantech one.

That's about as much as I can do right now. I don't know enough about what's happening with all the goog stuff yet. It seems possible to make the smallest amount of changes by using nclosure. The other option would be to abandon closure and convert to vanilla nodejs.

@klokan, @wajatimur might be able to give us some pointers: https://github.com/wajatimur/node-phonenumber/issues/4


Update 4-3-commerce-and-trust.md

In addition to reference editing, I could not resist the opportunity to include three lines that present the African case study of commerce and trust while adding references for further studies.

This pull request should be ignored due to a grammatical error.


feat(swift): handle generics

🧭 What and Why
🎟 JIRA Ticket: DI-1750
Changes included:

use generic types when possible

Wow, everything is green, there must be something wrong with the CI


Memory issues

Type of issue: Bug Report
Please tell us about your environment:
- version: 3.5.4
I am not sure if it is a Chisel or a chiseltest issue. I am having trouble with SyncReadMem. Maybe it is an issue in my code, but I feel totally lost. I tried to minimize the problem as far as possible. It is committed at: https://github.com/schoeberl/chisel-playground and the example can be run with sbt "testOnly issues.FifoSpec".
The code writes to a 4-entry memory several values into address 0: https://github.com/schoeberl/chisel-playground/blob/6de172cdaa708050a53c797e291737621e7574c9/src/main/scala/issues/MemFifo.scala#L71
However, when it reads out from an (unrelated) address 3 it receives some data: some
This issue is best seen in the VCD waveform, where the memory content is visible with Verilator (as mem[x][15:0]).

I found out why this write can happen on a read port and can provide a minimal example. Same repo, run with sbt "testOnly issues.MemIssueTest" and check the waveform.
The issue happens when one just gives a name to the read port of the memory:
val data = mem.read(io.rdAddr)

and later due to some logic reassigns a value:
  when(cntReg === 3.U) {
    data := 3.U
  }
  io.dout := data

That code above translates data to a write port, although it was connected via mem.read().
Defining a Wire for the read port fixes the issue.
Maybe it was wrong in the first place to not define a Wire, but I consider this still a bug when silently a second write port is introduced. If the memory had a more structural organization with Input and Output ports, this error would not happen.


Support plugins for user-added checks

Original issue created by brianfromoregon on 2013-09-17 at 05:43 PM

Eddie writes[1]:
"If you want to add it yourself, right now you'd basically have to fork the project -- we don't have support for any sort of dynamically discovered plugins."
It would be good to add custom checks without needing to fork.
[1] https://groups.google.com/forum/#!topic/error-prone-discuss/2McBrrpR7rk

This has been implemented, and is documented at errorprone.info/docs/plugins.


Sanitize the web through bundled plugins

Is your feature request related to a problem? Please describe.
I'm always frustrated when each website nags me with questions about cookies, and displays lots of ads.
Especially when you delete cookies after each session anyway, this becomes really annoying.

Describe the solution you'd like
Have a "No Nonsense Edition" of this browser that comes with

uBlock Origin
I don't care about cookies

preinstalled and preconfigured.
Describe alternatives you've considered
Manually install those plugins. But it'd be a huge plus if there was a modern browser with those pre-integrated.

@probonopd i personally use the same solution as you and probably as many users... but integrating the extension in uc is just out of the scope of the project i don't really see the benefit of bundling the whole thing...
now browser are integrating ab blocking in their main code... we will may be see this feature coming around...
Now you have to be careful for legal reasons because the cookie notification thing is there for a legal reason and disabling it with integrated component without letting the user choose it himself may put you in an illegal situation (... just to say)

About the cookie thing, the sane thing would have been to have a setting in the browser, that in turn would communicate the user's consent (or lack thereof) to cookies as part of the request header.
Plus, as long as i don't click "accpet", do websites still use cookies? Because I never click these buttons...

I also like this ideas @probonopd . As already said by others there might be some issues. ~99.5 % of the websites work with uBlock Origin, but none technical users might wonder at the 0.5 % of the sites why it doesn't work. So I still would leave it up to the user to install the extension. Maybe we can add some sort of startpage on the first launch that prposes to install those extensions and is able to insatll (and update) with one click. Maybe a related project:

If you want preinstalled protection and whatnot, you are better off using brave browser, because that's exactly what they do. This is just a patched chromium. I think it's good to keep the scope small.

Is there any way to update extensions automaticly?

Is there any way to update extensions automaticly?

may be opening classic chromium and let it updates the extensions... but it will not work in future version if @Eloston decide to change the profile location... also do a backup of your profile before proceeding... there is may be an other solution that i am not aware of.

Have a "No Nonsense Edition" of this browser that comes with
...
preinstalled and preconfigured.

The nonsense come from the web sites, not from ungoogled-chromium. 'preinstalled' implies someone choosing software and version for another and everyone conforming to that choice. (this is what Google does in Googled Chrome).

About the cookie thing, the sane thing would have been to have a setting in the browser, that in turn would communicate the user's consent (or lack thereof) to cookies as part of the request header.

As @intika explained: cookie consent has legal implications and exactly because of them you see all those annoying notifications on various sites. Site owners are required by the law to display them (GDPR etc.) So it is not sane thing to use a catch-all consent. I may trust my bank but I don't trust Zuckerberg (just an random example).

Plus, as long as i don't click "accpet", do websites still use cookies? Because I never click these buttons...

Legally the cookie consent is required only for cookies related to your 'personal data' (as defined in GDPR), e.g. tracking cookies. No consent is required for "regular" (e.g. login) cookies. That said: don't rely on sites following strictly the law or being bug free.
If you want to sanitize your web experience:

Use Internet as little as possible
Don't trust anything on the web (me included)
Use a clean browser, not something with pre-installed choices
Configure everything the way you want it to work
Be wise. Don't rely on anyone respecting your (non-)consent.

Personally I use uBO, uMatrix and HTTPS everywhere, I have all cookies disabled and enable them only on sites on which I need to login. I also have JS disabled and enable it only temporarily for a specific site, with all other tabs and apps closed as I am paranoid about the CPU vulnerabilities which will stay with us for quite a long time as it seems.

@probonopd Recall that ungoogled-chromium is Google Chromium, sans integration with Google. Thus, preloading extensions that changes the browsing experience significantly would violate this objective.
If you want integrated adblocking/privacy features by default, you may be more interested in projects like Brave Browser (as mentioned earlier). ungoogled-chromium will not take a stance on these kinds of issues for its users (except Google integration). At most, this project enables users to go beyond the vanilla Chromium experience via the addition of disabled-by-default feature flags.


chore (dashboard): update pricing information

Resolves #2822

:warning: Please install the  to ensure uploads and comments are reliably processed by Codecov.
Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 86.05%. Comparing base (f88bf2d) to head (ecfc5f6).
Report is 7 commits behind head on main.

:exclamation: Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #2827      +/-   ##
==========================================
+ Coverage   85.97%   86.05%   +0.07%
==========================================
  Files          86       86
  Lines        9621     9671      +50
  Branches      485      485
==========================================
+ Hits         8272     8322      +50
  Misses       1349     1349

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


Module 1.1 Assignment

Given what you have learned about Git, why would you want to use Git in your classroom?

So that members of a team can effectively work together.


Add raw_data proc to builtin/builtin.odin

Fixes #417
This works, but not without issues.
It does autocomplete, but it also shows completions for the private procs.

The hover info for returned value works only for a string source, every other overload just doesn't work.

I think it works in rename branch.

And do you know why the private procs are showing up? it is because builtin is being added to the „global scope” or something?

Have you tried doing private="file"?

it does indeed help with autocomplete, but for some reason it completely disables hover info

I'll have a look at that later.


Minor error in README.md

Hi,
In the README.md, Example section include "Request examples" this one give the example below :
http://localhost:8080/ - Shows usage text, as defined in libs/help.txt
Path libs/help.txt should be lib/help.txt

Thanks for spotting this. Are you interested in creating a pull request?

Thanks for the proposition, but i'm a only a occasional user of GitHub and not a good dev ;-)

I could make a pull request.


combination of font and language selection results in "Error: font not found"

If certain languages are selected by polyglossia and certain fonts are selected by fontspec, fontspec cannot find the fonts. I have only tried a couple of font/language combinations so far.
Fonts that I tried that seem unaffected: Amiri, Source Serif Pro, Adobe Garamond Pro, NeueHaasGrotesk, Frutiger Next LT W1G.
Fonts that I tried that are affected in combination with some languages: Minion Pro, Arno Pro, EBGaramond(0.016).
(I haven't done more testing because I know very little about how these things work and wouldn't know what to look for, but it did occur to me that these three fonts that fail have in common that they contain optical sizes. Could be coincidental though..?)
Example (using LuaTeX with MiKTeX, log file is below):
\documentclass{article}
\usepackage{fontspec}
\setmainfont{EB Garamond}
\usepackage{polyglossia}
\setdefaultlanguage{german}
\begin{document}
foo
\end{document}

produces:
Package fontspec Error: The font "EBGaramond" cannot be found.
Package fontspec Warning: Language 'German' not available for font 'EBGaramond'

For example EB Garamond works with: english, czech, french, finnish, spanish, vietnamese... But it cannot be loaded with catalan or german.
Log: langtest.log

This error is likely related. The following code gives ! Undefined control sequence. <recently read> \setmainlanguage when setmainlanguage is uncommented.
test3.log
\documentclass{article}
\usepackage{fontspec}
\usepackage{xeCJK}
%\setmainlanguage{english}
%\setotherlanguage{chinese}
\setCJKmainfont{SimSun}
\setCJKsansfont{SimSun}

\begin{document}

東風

test
\end{document}

I think this is a regression. The results with @Jetlagger's example are the following:

LuaLaTeX
XeLaTeX
fontspec
work?

1.10.0

2019/10/19 v2.7d
Y

1.11.2 (HB)

2019/10/19 v2.7d
Y

3.14159265-2.6-0.999991
2019/10/19 v2.7d
Y

1.10.0

2020/01/09 v2.7e
N

1.11.2 (HB)

2020/01/09 v2.7e
N

3.14159265-2.6-0.999991
2020/01/09 v2.7e
Y


[NCl-3290] Fix repour tries to max_attempts

The default maximum attempts on callback is 9, but repour tries 11
times. This commit fixes this by actually trying 9 times, not 11

To cherry-pick into 1.2.x


ASCII Codec issue

Running under Py 2.7 throws an ASCII encoding issue on the file write if it hits a character it doesn't like:
Traceback (most recent call last):
  File "Exporter.py", line 66, in <module>
    main(sys.argv[1:])
  File "Exporter.py", line 56, in main
    outputFile.write('\n%s;%s;%d;%d;"%s";%s;%s;%s;"%s";%s' % (t.username, t.date.strftime("%Y-%m-%d %H:%M"), t.retweets, t.favorites, t.text, t.geo, t.mentions, t.hashtags, t.id, t.permalink))
UnicodeEncodeError: 'ascii' codec can't encode character u'\xeb' in position ...

Hello @psychemedia, I am using Py 2.7 too, can you share which query you have used? I can update the code to remove this character, I have removed some like on this line re.sub(r"[^\x00-\x7F]", "").

I think you need to handle the UTF properly rather than fudging?

Yeah, I made some changes on this way now, take a look when you can, thanks for your feedback.