run Gratipay 154

153 was the Gratipocalypse. See #3399 for our efforts to get back on track for 154.

---
Want to back this issue? **[Post a bounty on it!](https://www.bountysource.com/issues/14662500-run-gratipay-154?utm_campaign=plugin&utm_content=tracker%2F85909&utm_medium=issues&utm_source=github)** We accept bounties via [Bountysource](https://www.bountysource.com/?utm_campaign=plugin&utm_content=tracker%2F85909&utm_medium=issues&utm_source=github).

I believe the payday rewrite is far enough along for this week (#3414).

I'm going to migrate tips to subscriptions on #3399, and then switch over to here.

=> select count(*) from subscriptions;
┌───────┐
│ count │
├───────┤
│   984 │
└───────┘
(1 row)

Who's ready?

Account review performed manually for beta users of the new system (see #3399).

Droplet spun up, backup started ...

:clap: :clap:

Droplet updated.

Backup finished and (manually) verified.

Script started.

Seems to be working. :four_leaf_clover:

yeah, just got notification sms

Captured 110 card holds.

@tshepang Nice!
The script seems to have paused ...

Could be because we're canceling so many old card holds?

I still see the process:
$ ps auxww|grep python
whit537   1504  0.0  2.1  45592 10928 ?        S    21:34   0:00 /home/whit537/gratipay.com/env/bin/python2.7 ./env/bin/honcho run -e /dev/stdin ./env/bin/payday
whit537   1524  1.1  7.5<PHONE_NUMBER>8 ?        Sl   21:34   0:09 /home/whit537/gratipay.com/env/bin/python2.7 ./env/bin/payday

Must be stuck in card holds, because the next log line is Canceled %i card holds., and I haven't seen that yet.

I guess I'll give it a couple more minutes? What's our option, comment that out and rerun the script?

There's a step at the beginning of payday that takes quite a bit of time, iirc it's when we fetch card holds to begin with (it comes after the db is prepared but before we start placing new holds).

What's our option, comment that out and rerun the script?

We could add a log message to cancel_card_hold just like create_card_hold so that we're sure that's where it's stuck.

Killed it.

Put an early return in settle_card_holds and restarted ...

Okay, commented out the parts we already ran and re-ran. We are making many more payouts than I intended. Oh well.

Did payout for 354 participants.
Script ran for 35 seconds (0:00:35.063665).

Okay!

Could be because we're canceling so many old card holds?

Canceling old card holds would happen early on in fetch_card_holds, so can't be that...

Log downloaded and droplet destroyed. I will pick up with this again later, I have to go for now ...
 :-)

The payments table is empty, reticketing...

This doesn't look good.
I only see 8 exchanges (amount < 0), and none of those are owners of the teams that were supposed to take part in payday today.

Put an early return in settle_card_holds and restarted

@whit537 - I know this is highly unlikely, but did you happen to put the early return in between self.settle_card_holds(cursor, holds) and self.update_balances(cursor) and not within settle_card_holds?
From a quick look, that's the only possibility I see.

It's 4 AM here, I'm off to sleep. Will dig further as soon as I can.

A note for anyone looking at this ticket and concerned :
We've pulled in money from CCs and stored it as balance in user's accounts. From the looks of it, all that we missed is the the internal shuffling of balances(from participant to teams).

@whit537 - Here's what I'm thinking. We edit payday 154 manually, mark it as not completed by modifying ts_end. And then, we make the following changes to payday.py and run it -

run

payin

prepare
create_card_holds (Short circuit this, return an empty list)
process_subscriptions
transfer_takes
process_draws
settle_card_holds (Since holds is empty, this won't do anything.)
update_balances
take_over_balances

payout (Constrain this to the new teams only)
update_stats
update_cached_amounts
end

And once we're done with that, or even before - we cancel all the pending holds we've created.

/me catching up ...

Blocked on #3430. It'd be good to merge #3431 too before rerunning this, but it's not necessary.

Okay, I've made it through my GitHub notifications and I'm topping up support. I'll be back here in a few minutes ...

I know this is highly unlikely, but did you happen to put the early return in between self.settle_card_holds(cursor, holds) and self.update_balances(cursor) and not within settle_card_holds?

I had a look at the logs, and it's definitely not that.
@whit537 - What do you think happened in https://github.com/gratipay/logs/blob/master/payday/gratipay-154.log#L354-L393?

What do you think happened in https://github.com/gratipay/logs/blob/master/payday/gratipay-154.log#L354-L393?

I almost saved a diff of my hotfix to payday, but I didn't. Sorry. :-(
In fact, I ran it with several hotfixes. Here's what I ended up doing, as best I remember:

I added a return just before canceling card holds.
I reran payday. It was spinning again. As I recall, I had the impression that it was spinning in fetch_card_holds, which is normal behavior as mentioned above at https://github.com/gratipay/gratipay.com/issues/3415#issuecomment-102180134.
I killed it.
In payin, I commented out lines 161-165 as well as line 170. I really don't think I commented out line 171, the called to update_balances, but without the diff I suppose that's a mistake I may have made.
I reran payday. It failed because I had commented out prepare.
I uncommented out prepare and reran. It completed.

I see 8 payouts and 110 charges in the Balanced dashboard, which lines up with exchanges. The log reported 110 card captures, so that's fine. Why does the log say "Did payout for 354 participants." when we only did 8?

Because only 8 had balances more than 10, is what I think.

Yeah, we tighten up that log line.

Minimum payout is $10.00. XXX is only due $6.00.

Yeah, we should tighten up that log line.

Reticketed as #3435.

In payin, I commented out lines 161-165 as well as line 170

Looks like that's where the mistake is. :)

I really don't think I commented out line 171, the called to update_balances

The call to update_balances worked, just that we didn't update any balances, coz payday_participants was empty.

https://github.com/gratipay/logs/blob/master/payday/gratipay-154.log#L392
Updated the balances of 0 participants.

Hmm, starting to make sense now...

I think that https://github.com/gratipay/gratipay.com/issues/3415#issuecomment-102216057 should work...
What say, @whit537?
It's basically doing an internal shuffle, without touching CCs. And we should comment out notify_participants too, we don't want to send duplicate emails (again :P).

... coz payday_participants was empty.

And payday_participants was empty, because ... I had commented out prepare? But I uncommented prepare in step (6).

Sorry, my mistake.
payday_participants was populated but it wasn't modified (in process_draws and transfer_takes). (new_balance and old_balance were the same).

Gotcha. transfer_takes is a noop this week (ref), but we needed to run process_draws, yes. We would've needed to run process_subscriptions, too, for that matter, because that's where we populate the team balances that we than redistribute back to participants in _draws.

So the reason there are no payments is because there were no payments. :-)

I'm sorry for the rough explanation, I was on the phone :)

So the reason there are no payments is because there were no payments. :-)

Yep.

What say, @whit537?

Yeah, something like https://github.com/gratipay/gratipay.com/issues/3415#issuecomment-102216057 sounds about right. I'm spinning up another droplet, I'll paste a diff here before running. We should probably handle the payout constraint with a PR prior to rerunning, since that's a permanent change we want to make.

handle the payout constraint

How about we constrain to participants that are in teams.owner or payroll.member?

How about we constrain to participants that are in teams.owner or payroll.member?

Yep, sounds right.

I'll handle the constraint, you can go ahead with the patching.

k

Droplet spun up logfile put back in place.

Droplet updated and built.

Why did we payout the 8 people we did payout to?

Because they had balances greater than the minimum credit amount and they had a working payout route.

We edit payday 154 manually, mark it as not completed by modifying ts_end.

Done:

=> update paydays set ts_end='1970-01-01T00:00:00+00'::timestamptz where id=199;

I'm working on #3438, almost done.

@whit537 - Need your help finishing up #3438, look at https://github.com/gratipay/gratipay.com/commit/1e069e88def0a38dc0d2322bff05a9a9bf2e4ad0

k

How's this look, @rohitpaulk?
diff --git a/gratipay/billing/payday.py b/gratipay/billing/payday.py
index c8513fc..ac9b75b 100644
--- a/gratipay/billing/payday.py
+++ b/gratipay/billing/payday.py
@@ -145,7 +145,7 @@ class Payday(object):
             self.mark_stage_done()

         self.end()
-        self.notify_participants()
+        #self.notify_participants()

         _end = aspen.utils.utcnow()
         _delta = _end - _start
@@ -159,7 +159,7 @@ class Payday(object):
         """
         with self.db.get_cursor() as cursor:
             self.prepare(cursor, self.ts_start)
-            holds = self.create_card_holds(cursor)
+            #holds = self.create_card_holds(cursor)
             self.process_subscriptions(cursor)
             self.transfer_takes(cursor, self.ts_start)
             self.process_draws(cursor)
@@ -167,7 +167,7 @@ class Payday(object):
                 SELECT * FROM payments WHERE "timestamp" > %s
             """, (self.ts_start,))
             try:
-                self.settle_card_holds(cursor, holds)
+                self.settle_card_holds(cursor, {})
                 self.update_balances(cursor)
                 check_db(cursor)
             except:

Looks good.

Updated the droplet with the latest changes?

Yup, getting ready ...

Um ...
Fri May 15 18:39:07 UTC 2015
pid-2918 thread-140194056021760 (MainThread) Picking up with an existing payday.
pid-2918 thread-140194056021760 (MainThread) Payday started at 2015-05-14 21:34:37.995735+00:00.
pid-2918 thread-140194056021760 (MainThread) Greetings, program! It's PAYDAY!!!!
pid-2918 thread-140194056021760 (MainThread) Script ran for just a moment (0:00:00.029568).

ah, we didn't modify the stage

Good call.

Change it to.... 0, i guess? Yh, 0.

=> update paydays set stage=0 where id=199;

Erm, we also needed to reset ts_end again. I think I caught it in time:
Fri May 15 18:41:48 UTC 2015
pid-3033 thread-139956672141056 (MainThread) Starting a new payday.
pid-3033 thread-139956672141056 (MainThread) Payday started at 2015-05-15 18:42:11.415296+00:00.
pid-3033 thread-139956672141056 (MainThread) Greetings, program! It's PAYDAY!!!!
pid-3033 thread-139956672141056 (MainThread) Prepared the DB.
Terminated

payments is still empty, and exchanges doesn't have any new records.

I think I caught it in time

:relieved:

I think we're good. So:

[ ] delete the new payday I accidentally started
[ ] reset ts_end of payday 199
[ ] stage is already at 0

Right?

Yep...

Fri May 15 18:49:04 UTC 2015
pid-3176 thread-139946617497344 (MainThread) Picking up with an existing payday.
pid-3176 thread-139946617497344 (MainThread) Payday started at 2015-05-14 21:34:37.995735+00:00.
pid-3176 thread-139946617497344 (MainThread) Greetings, program! It's PAYDAY!!!!
pid-3176 thread-139946617497344 (MainThread) Prepared the DB.

We haven't updated update_stats, guess that can wait...

Nah, don't think so. It's independent of payday, and we haven't made any changes to it.

Yeah, I expect the stats will be off. I figured that was lower priority.

True.

Process is still blocking ...

What's the last log line?

Don't terminate it just yet... Let's see if we can figure out what's causing the block this time.

What's the last log line?

Prepared the DB.

Don't terminate it just yet... Let's see if we can figure out what's causing the block this time.

It's not pegging CPU/RAM, which indicates against an infinite loop.

Does Balanced give us an API call log? That could give us some useful info ...

We aren't making any API calls in this one..

Well, not until payouts. Balanced does have a log, btw, but yeah there's relevant there.

@whit537 - Looks like we haven't done any damage (yet). Let's add a few more log statements? To process_subscriptions, process_draws etc.

Hmm, we should be able to inspect the tables too.

Or not?

Only visible within the transaction. :(

Right. We could take out "ON COMMIT DELETE" and maybe they'd stick around? We could delete them explicitly after payday is done.

A temporary table is only available and accessible by the client who creates the table.

We'll have to take out the TEMPORARY TABLE too.

Let's do that, and add simple log statements to process_subscriptions and process_draws. Good enough for a next try?

We should do this on a backup :/

Once we're sure that we're reaching the payout stage, we could run on production.

Alright, we've got #3440 and #3441 on master. Stage is still 0 and ts_end is still 1970 for 199. Time to update the droplet and rerun ...

To be clear, we're expecting it to block again, but this time we'll have more info for debugging.

I did reapply the diff: https://github.com/gratipay/gratipay.com/issues/3415#issuecomment-102486250.

Interesting:
Fri May 15 19:33:16 UTC 2015
pid-3572 thread-140704402380544 (MainThread) Picking up with an existing payday.
pid-3572 thread-140704402380544 (MainThread) Payday started at 2015-05-14 21:34:37.995735+00:00.
pid-3572 thread-140704402380544 (MainThread) Greetings, program! It's PAYDAY!!!!
pid-3572 thread-140704402380544 (MainThread) Prepared the DB.
pid-3572 thread-140704402380544 (MainThread) Processing subscriptions.
pid-3572 thread-140704402380544 (MainThread) Processing draws.
pid-3572 thread-140704402380544 (MainThread) Settling card holds.

Hmm.... :question:

!m you two!

@ehmatthes - :)

Something to do with threaded_map, @whit537 ?

Fri May 15 19:50:26 UTC 2015
pid-3964 thread-140369408612096 (MainThread) Picking up with an existing payday.
pid-3964 thread-140369408612096 (MainThread) Payday started at 2015-05-14 21:34:37.995735+00:00.
pid-3964 thread-140369408612096 (MainThread) Greetings, program! It's PAYDAY!!!!
pid-3964 thread-140369408612096 (MainThread) Prepared the DB.
pid-3964 thread-140369408612096 (MainThread) Processing subscriptions.
pid-3964 thread-140369408612096 (MainThread) Processing draws.
pid-3964 thread-140369408612096 (MainThread) Settling card holds.
pid-3964 thread-140369408612096 (MainThread) Settling card holds for 0 participants.
pid-3964 thread-140369408612096 (MainThread) Capturing card holds.

@rohitpaulk Could be ...

I can't access the tables via psql. Are we running this on a backup?

No, not running on a backup. I'm rerunning with threads=1 in the threaded_map signature. That's helped us in the past.

Still blocking at Capturing card holds..

pid-21713 thread-140077650589440 (MainThread) Picking up with an existing payday.
pid-21713 thread-140077650589440 (MainThread) Payday started at 2015-05-14 21:34:37.995735+00:00.
pid-21713 thread-140077650589440 (MainThread) Greetings, program! It's PAYDAY!!!!
pid-21713 thread-140077650589440 (MainThread) Prepared the DB.
pid-21713 thread-140077650589440 (MainThread) Processing subscriptions.
pid-21713 thread-140077650589440 (MainThread) Processing draws.
pid-21713 thread-140077650589440 (MainThread) Settling card holds.
pid-21713 thread-140077650589440 (MainThread) Capturing card holds.
pid-21713 thread-140077650589440 (MainThread) Captured 0 card holds.
pid-21713 thread-140077650589440 (MainThread) Canceling card holds.
pid-21713 thread-140077650589440 (MainThread) Canceled 0 card holds.
pid-21713 thread-140077650589440 (MainThread) Updating balances.
pid-21713 thread-140077650589440 (MainThread) Updated the balances of 639 participants.
pid-21713 thread-140077650589440 (MainThread) Taking over balances.

Seems to work for me on a backup... Haven't done anything different, as far as I can tell.

@rohitpaulk That's using master with https://github.com/gratipay/gratipay.com/issues/3415#issuecomment-102486250?

Yep, master, and the difff is pretty much the same thing.
diff --git a/gratipay/billing/payday.py b/gratipay/billing/payday.py
index 672a92f..3fbf807 100644
--- a/gratipay/billing/payday.py
+++ b/gratipay/billing/payday.py
@@ -137,7 +137,8 @@ class Payday(object):
             self.payin()
             self.mark_stage_done()
         if self.stage < 2:
-            self.payout()
+            raise ValueError
+            #self.payout()
             self.mark_stage_done()
         if self.stage < 3:
             self.update_stats()
@@ -145,7 +146,7 @@ class Payday(object):
             self.mark_stage_done()

         self.end()
-        self.notify_participants()
+        #self.notify_participants()

         _end = aspen.utils.utcnow()
         _delta = _end - _start
@@ -159,7 +160,7 @@ class Payday(object):
         """
         with self.db.get_cursor() as cursor:
             self.prepare(cursor, self.ts_start)
-            holds = self.create_card_holds(cursor)
+            #holds = self.create_card_holds(cursor)
             self.process_subscriptions(cursor)
             self.transfer_takes(cursor, self.ts_start)
             self.process_draws(cursor)
@@ -167,7 +168,7 @@ class Payday(object):
                 SELECT * FROM payments WHERE "timestamp" > %s
             """, (self.ts_start,))
             try:
-                self.settle_card_holds(cursor, holds)
+                self.settle_card_holds(cursor, {})
                 self.update_balances(cursor)
                 check_db(cursor)
             except:

Fri May 15 20:12:35 UTC 2015
pid-2887 thread-140735252603648 (MainThread) Picking up with an existing payday.
pid-2887 thread-140735252603648 (MainThread) Payday started at 2015-05-14 21:34:37.995735+00:00.
pid-2887 thread-140735252603648 (MainThread) Greetings, program! It's PAYDAY!!!!
pid-2887 thread-140735252603648 (MainThread) Prepared the DB.
pid-2887 thread-140735252603648 (MainThread) Processing subscriptions.
pid-2887 thread-140735252603648 (MainThread) Processing draws.
pid-2887 thread-140735252603648 (MainThread) Settling card holds.
pid-2887 thread-140735252603648 (MainThread) Capturing card holds.
pid-2887 thread-140735252603648 (MainThread) Captured 0 card holds.
pid-2887 thread-140735252603648 (MainThread) Canceling card holds.
pid-2887 thread-140735252603648 (MainThread) Canceled 0 card holds.
pid-2887 thread-140735252603648 (MainThread) Updating balances.
pid-2887 thread-140735252603648 (MainThread) Updated the balances of 639 participants.
pid-2887 thread-140735252603648 (MainThread) Taking over balances.
pid-2887 thread-140735252603648 (MainThread) Starting payout loop.
[...]
pid-2887 thread-140735252603648 (MainThread) Did payout for 4 participants.
pid-2887 thread-140735252603648 (MainThread) Checked the DB.
pid-2887 thread-140735252603648 (MainThread) Updating stats.
pid-2887 thread-140735252603648 (MainThread) Updated payday stats.
pid-2887 thread-140735252603648 (MainThread) Updated receiving amounts.
pid-2887 thread-140735252603648 (MainThread) Script ran for 18 seconds (0:00:18.109225).

Phew! O.o
You gave me the idea of running it on my laptop instead of on a droplet. That worked. :)

Okay! Where are we?

Ha! :dancer: :dancer:

What did we break? :) :hammer:

=> select count(*) from payments;
┌───────┐
│ count │
├───────┤
│   661 │
└───────┘
(1 row)

Yesssssssss.

Is this one of those python version mismatch bugs like last time? Just to make sure, my ./env/bin/python is 2.7.8.

We made three new exchanges. We have six teams, two of which are on PayPal. The sixth had a balance less than $10. I've mentioned the payout threshold at https://github.com/gratipay/gratipay.com/issues/1383#issuecomment-102516158.

Gosh, maybe? Do you have the ticket handy for "last time"? I'm on 2.7.9 and the droplet is on 2.7.3.

Last time was Honcho...
https://github.com/gratipay/gratipay.com/issues/3025
https://github.com/gratipay/gratipay.com/pull/3028

Finally.....

Not so fast. We still need to do MassPay and shuffle escrow. :package:

(I was delayed by a phone call re: #3366, sorry.)

Reticketed upgrading the payday snapshot as #3444.

MassPay done and posted back for two users.

Not gonna worry about shuffling this week, since amounts were so small.

Logs uploaded in https://github.com/gratipay/logs/commit/5330cb28bf936446c144174b534214a382519016 and https://github.com/gratipay/logs/commit/ae4188f357cf664653d5ca04e177073c81045629.

Okay! Now we're done. :-)
:birthday:

:sigh:
Not seeing MassPay in exchanges ...

Fixed in https://github.com/gratipay/gratipay.com/commit/b48db583db87bee852e56122b9ee9611ed0e9a87 and postback completed and confirmed. Okay!
!m @rohitpaulk
!m *

Noticed this when working on https://github.com/gratipay/gratipay.com/issues/3705
Comparing https://github.com/gratipay/gratipay.com/issues/3415#issuecomment-102488894 and https://github.com/gratipay/gratipay.com/issues/3415#issuecomment-102508212...
Payday started at 2015-05-15 18:42:11.415296+00:00.
and
Payday started at 2015-05-14 21:34:37.995735+00:00
We somehow messed up the year here (2015 changed to 2014)... I'm going to manually correct this in the DB.

=> SELECT ts_start, ts_end FROM paydays WHERE id=199;
           ts_start            |            ts_end
-------------------------------+-------------------------------
 2015-05-14 21:34:37.995735+00 | 2015-05-15 20:13:08.453174+00

=> UPDATE paydays SET ts_start='2015-05-15 18:42:11.415296+00:00' WHERE id=199;
UPDATE 1

=> SELECT ts_start, ts_end FROM paydays WHERE id=199;
           ts_start            |            ts_end
-------------------------------+-------------------------------
 2015-05-15 18:42:11.415296+00 | 2015-05-15 20:13:08.453174+00
(1 row)

We somehow messed up the year here (2015 changed to 2014)... I'm going to manually correct this in the DB.

@rohitpaulk I'm seeing this in email notification but not here. What's the story?

I'm seeing this in email notification but not here. What's the story?

Ah that was me misreading data - I tried it out on a backup and then realized the mistake. Apparently, my attempts to cover the history didn't work as planned :stuck_out_tongue:

:-)

We seem to be making progress on https://github.com/gratipay/gratipay.com/issues/3415#issuecomment-102178928 over in https://github.com/gratipay/inside.gratipay.com/issues/477.


Nice to have function async-each

async-each = (func, arr) -->
      items = arr.slice!
      go = ->
          item = items.splice(0, 1).0
          if item?
             func item, go
      go!

example

[1,2,3] |> async-each (number,done)->
    find-user id: number, (err, user)->
        if user? and confirm 'Are you sure?'
            delete-user number, ->
                done!

Sounds approximately like async.js::each |> flip |> curry.
I think async functions are out of scope. Maybe it's time for a prelude-ls-async library?


Demo bot(ding-dong-bot) error: 503, init() without a ready angular env

Versions
"dependencies": {
  "qrcode-terminal": "^0.12.0",
  "wechaty": "^1.20.2",
  "wechaty-puppet-wechat": "^1.18.4"
}

// WECHATY_PUPPET=wechaty-puppet-wechat
// node version: v19.9.0
// os: macOS Version 11.7.8

Error Description
I'm trying out the demo ding-dong-bot.  ;-D)
21:35:24 SILL PuppetWeChatBridge inject() Wechaty.init() return code[200] message[WechatyBro Init Succ]
21:35:24 VERB PuppetWeChatBridge ding(ding() OK!)
21:35:24 SILL PuppetWeChatBridge proxyWechaty(ding, ding() OK!)
21:35:24 SILL PuppetWeChatEvent onLog(recv ding)
21:35:24 SILL PuppetWeChatBridge inject() ding success
21:35:24 VERB PuppetWeChatBridge clickSwitchAccount()
21:35:24 SILL PuppetWeChatBridge clickSwitchAccount() button not found
21:35:24 SILL StateSwitch <PuppetWeChatBridge> active() is pending
21:35:24 VERB StateSwitch <PuppetWeChatBridge> active(true) <- (pending)
21:35:24 VERB PuppetWeChatBridge start() initPage() done
21:35:24 VERB PuppetWeChat onStart() initBridge() done
21:35:24 VERB ServiceCtl<PuppetServiceMixin> start() this.onStart() ... done
21:35:24 SILL StateSwitch <PuppetServiceMixin> active() is pending
21:35:24 VERB StateSwitch <PuppetServiceMixin> active(true) <- (pending)
21:35:24 VERB ServiceCtl<PuppetServiceMixin> start() ... done
21:35:24 VERB PuppetWatchdogAgent start() "heartbeat" event listener added
21:35:24 VERB PuppetWatchdogAgent start() "reset" event listener added
21:35:25 SILL PuppetWeChatEvent onLog(checkScan() code:408 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:null)
21:35:25 SILL PuppetWeChatEvent onLog(checkScan() - code change detected: from null to 408)
21:35:25 VERB PuppetWeChatEvent onScan({code: 408, url: https://login.weixin.qq.com/qrcode/gd4OX8tmtQ==})
21:35:25 SILL StateSwitch <PuppetServiceMixin> inactive() is false
21:35:25 VERB PuppetWeChat onStart() throttleQueue.subscribe() new item: [object Object]
21:35:25 SILL StateSwitch <PuppetServiceMixin> inactive() is false
21:35:25 SILL StateSwitch <WechatyReady> inactive() is true
21:35:25 VERB StateSwitch <WechatyReady> inactive(true) <- (true)
21:35:25 INFO StarterBot onScan: Timeout(5) - https://wechaty.js.org/qrcode/https%3A%2F%2Flogin.weixin.qq.com%2Fl%2Fgd4OX8tmtQ%3D%3D
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
█ ▄▄▄▄▄ █▀▄█▀ █▀ ▀▀█▄▀█ ▄▄▄▄▄ █
█ █   █ █▄   ▄█▀█ ▄█▀▀█ █   █ █
█ █▄▄▄█ █ ▀█▀█▀▄ █  ▀▀█ █▄▄▄█ █
█▄▄▄▄▄▄▄█ ▀▄█ █ ▀ ▀▄▀ █▄▄▄▄▄▄▄█
█ ▄▀▄▀▀▄ ██ ▀█   ▀▀█▄█▀ ▄▄▀▄▄▀█
█▀▄ █ ▀▄ ▄▄▄██ ▀█ ▄ ▄▄  ▄ ▄  ██
█▀▀▄ ▀▀▄██▀▀▀ █▀ ▄▄█  ▀▄██▄█▄▄█
█ ▄ █▀ ▄▄▄▄██ ▀▀▀ ▀▀▀▄ ▀██ ▄ ▄█
██ ▄ ▄▀▄ ███▄██▄█▄ ██▄▄▀▀█▀█▄▀█
█▄█▀ ▀▀▄ █▄█▀██▀▀▄▀▀█▄▄▄▄▀██  █
█▄█▄██▄▄█ ▀▄  ▄▀█ █▄▄ ▄▄▄ █ ▀▀█
█ ▄▄▄▄▄ █▄██   ██ ▄▀█ █▄█ ▀▀ ▀█
█ █   █ █▀   █▀▄█▄▄█▀▄▄   ▀▀▀██
█ █▄▄▄█ █▀▄▀ █▄▄█▀ █▀ ██▀▄▄▄▀▄█
█▄▄▄▄▄▄▄█▄███▄▄█▄█▄▄█▄▄█▄█▄█▄██

21:35:26 SILL PuppetWeChatEvent onLog(checkScan() code:408 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:408)
21:35:27 SILL PuppetWeChatEvent onLog(checkScan() code:408 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:408)
21:35:28 SILL PuppetWeChatEvent onLog(checkScan() code:408 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:408)
21:35:29 SILL PuppetWeChatEvent onLog(checkScan() code:408 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:408)
21:35:30 SILL PuppetWeChatEvent onLog(checkScan() code:408 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:408)
21:35:32 SILL PuppetWeChatEvent onLog(checkScan() code:408 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:408)
21:35:33 SILL PuppetWeChatEvent onLog(checkScan() code:408 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:408)
21:35:34 SILL PuppetWeChatEvent onLog(checkScan() code:408 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:408)
21:35:35 SILL PuppetWeChatEvent onLog(checkScan() code:408 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:408)
21:35:36 SILL PuppetWeChatEvent onLog(checkScan() code:408 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:408)
21:35:37 SILL PuppetWeChatEvent onLog(checkScan() code:201 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:408)
21:35:37 SILL PuppetWeChatEvent onLog(checkScan() - code change detected: from 408 to 201)
21:35:37 VERB PuppetWeChatEvent onScan({code: 201, url: https://login.weixin.qq.com/qrcode/gd4OX8tmtQ==})
21:35:37 SILL StateSwitch <PuppetServiceMixin> inactive() is false
21:35:37 SILL StateSwitch <WechatyReady> inactive() is true
21:35:37 VERB StateSwitch <WechatyReady> inactive(true) <- (true)
21:35:37 INFO StarterBot onScan: Scanned(3)
21:35:38 SILL PuppetWeChatEvent onLog(checkScan() code:201 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:201)
21:35:39 SILL PuppetWeChatEvent onLog(checkScan() code:201 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:201)
21:35:40 SILL PuppetWeChatEvent onLog(checkScan() code:201 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:201)
21:35:41 SILL PuppetWeChatEvent onLog(checkScan() code:201 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:201)
21:35:42 SILL PuppetWeChatEvent onLog(checkScan() code:201 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:201)
21:35:43 SILL PuppetWeChatEvent onLog(checkScan() code:201 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:201)
21:35:44 SILL PuppetWeChatEvent onLog(checkScan() code:201 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:201)
21:35:45 SILL PuppetWeChatEvent onLog(checkScan() code:201 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:201)
21:35:46 SILL PuppetWeChatEvent onLog(checkScan() code:201 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:201)
21:35:47 SILL PuppetWeChatEvent onLog(checkScan() code:201 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:201)
21:35:48 SILL PuppetWeChatEvent onLog(checkScan() code:201 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:201)
21:35:49 SILL PuppetWeChatEvent onLog(checkScan() code:201 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:201)
21:35:50 SILL PuppetWeChatEvent onLog(checkScan() code:201 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:201)
21:35:51 SILL PuppetWeChatEvent onLog(checkScan() code:201 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:201)
21:35:52 SILL PuppetWeChatEvent onLog(checkScan() code:200 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:201)
21:35:52 SILL PuppetWeChatEvent onLog(checkScan() - code change detected: from 201 to 200)
21:35:52 VERB PuppetWeChatEvent onScan({code: 200, url: https://login.weixin.qq.com/qrcode/gd4OX8tmtQ==})
21:35:52 SILL StateSwitch <PuppetServiceMixin> inactive() is false
21:35:52 SILL StateSwitch <WechatyReady> inactive() is true
21:35:52 VERB StateSwitch <WechatyReady> inactive(true) <- (true)
21:35:52 INFO StarterBot onScan: Confirmed(4)
21:35:53 SILL PuppetWeChatEvent onLog(login(scan code 200))
21:35:53 VERB PuppetWeChatEvent onLogin(scan code 200, 30)
21:35:53 VERB PuppetWeChatBridge getUserName()
21:35:53 SILL PuppetWeChatBridge proxyWechaty(getUserName)
21:35:53 VERB PuppetWeChatEvent onLogin() browser not fully loaded(ttl=30), retry later
21:35:53 SILL PuppetWeChatBridge evaluate()
21:35:53 SILL PuppetWeChatEvent onLogin() innerHTML:
    <canvas style="position:absolute;top:0;left:0;bottom:0;right:0;z-index:-1;width:100%;height:100%;" id="heroCanvas"></canvas>

        <div class="logo
21:35:53 SILL PuppetWeChatEvent onUnload()
21:35:53 SILL PuppetWeChatEvent onLog(event unload)
21:35:53 VERB PuppetWeChatBridge onLoad() page.url=https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=AY3sN3eaC_qrElJKQZmb2_GS@qrticket_0&uuid=gd4OX8tmtQ==&lang=en_US&scan=1690767338
21:35:53 SILL StateSwitch <PuppetWeChatBridge> inactive() is false
21:35:53 VERB PuppetWeChatBridge readyAngular()
21:35:53 VERB PuppetWeChatBridge inject()
21:35:53 SILL PuppetWeChatBridge inject() eval(Wechaty) return code[200] message[WechatyBro Inject Done]
21:35:53 SILL PuppetWeChatBridge proxyWechaty(init)
21:35:53 VERB PuppetWeChatBridge inject() exception: execute proxyWechaty(init) error: 503, init() without a ready angular env. stack: Error: execute proxyWechaty(init) error: 503, init() without a ready angular env
    at Bridge.inject (file:///Users/terry/Desktop/bot4/node_modules/wechaty-puppet-wechat/dist/esm/src/bridge.js:266:23)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async Bridge.onLoad (file:///Users/terry/Desktop/bot4/node_modules/wechaty-puppet-wechat/dist/esm/src/bridge.js:148:13)
21:35:53 ERR PuppetWeChatBridge onLoad() exception: Error: execute proxyWechaty(init) error: 503, init() without a ready angular env
21:35:53 ERR Config ###########################
21:35:53 ERR Config Wechaty unhandledRejection: Error: execute proxyWechaty(init) error: 503, init() without a ready angular env
    at Bridge.inject (file:///Users/terry/Desktop/bot4/node_modules/wechaty-puppet-wechat/dist/esm/src/bridge.js:266:23)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async Bridge.onLoad (file:///Users/terry/Desktop/bot4/node_modules/wechaty-puppet-wechat/dist/esm/src/bridge.js:148:13) [object Promise]
21:35:53 ERR Config ###########################
21:35:53 ERR Config process.on(unhandledRejection) promise.catch(execute proxyWechaty(init) error: 503, init() without a ready angular env)
Config GError: execute proxyWechaty(init) error: 503, init() without a ready angular env
    at Bridge.inject (file:///Users/terry/Desktop/bot4/node_modules/wechaty-puppet-wechat/dist/esm/src/bridge.js:266:23)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async Bridge.onLoad (file:///Users/terry/Desktop/bot4/node_modules/wechaty-puppet-wechat/dist/esm/src/bridge.js:148:13) {
  code: 2,
  details: 'Error: execute proxyWechaty(init) error: 503, init() without a ready angular env\n' +
    '    at Bridge.inject (file:///Users/terry/Desktop/bot4/node_modules/wechaty-puppet-wechat/dist/esm/src/bridge.js:266:23)\n' +
    '    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n' +
    '    at async Bridge.onLoad (file:///Users/terry/Desktop/bot4/node_modules/wechaty-puppet-wechat/dist/esm/src/bridge.js:148:13)'
}
(node:66197) PromiseRejectionHandledWarning: Promise rejection was handled asynchronously (rejection id: 3)
(Use `node --trace-warnings ...` to show where the warning was created)
21:35:54 VERB PuppetWeChatEvent onLogin(scan code 200, 29)
21:35:54 VERB PuppetWeChatBridge getUserName()
21:35:54 SILL PuppetWeChatBridge proxyWechaty(getUserName)
21:35:54 WARN PuppetWeChatBridge proxyWechaty() noWechaty exception: Error: Protocol error (Runtime.callFunctionOn): Session closed. Most likely the page has been closed.
21:35:54 ERR PuppetWeChatBridge getUserName() exception: Protocol error (Runtime.callFunctionOn): Session closed. Most likely the page has been closed.
21:35:54 ERR PuppetWeChatEvent onLogin() exception: Error: Protocol error (Runtime.callFunctionOn): Session closed. Most likely the page has been closed.
21:35:54 ERR Config ###########################
21:35:54 ERR Config Wechaty unhandledRejection: Error: Protocol error (Runtime.callFunctionOn): Session closed. Most likely the page has been closed.
    at CDPSession.send (/Users/terry/Desktop/bot4/node_modules/puppeteer/lib/cjs/puppeteer/common/Connection.js:218:35)
    at next (/Users/terry/Desktop/bot4/node_modules/puppeteer-extra-plugin-stealth/evasions/sourceurl/index.js:34:41)
    at CDPSession.send (/Users/terry/Desktop/bot4/node_modules/puppeteer-extra-plugin-stealth/evasions/sourceurl/index.js:75:16)
    at ExecutionContext._evaluateInternal (/Users/terry/Desktop/bot4/node_modules/puppeteer/lib/cjs/puppeteer/common/ExecutionContext.js:204:50)
    at ExecutionContext.evaluate (/Users/terry/Desktop/bot4/node_modules/puppeteer/lib/cjs/puppeteer/common/ExecutionContext.js:110:27)
    at DOMWorld.evaluate (/Users/terry/Desktop/bot4/node_modules/puppeteer/lib/cjs/puppeteer/common/DOMWorld.js:97:24)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5) [object Promise]
21:35:54 ERR Config ###########################
21:35:54 ERR Config process.on(unhandledRejection) promise.catch(Protocol error (Runtime.callFunctionOn): Session closed. Most likely the page has been closed.)
Config GError: Protocol error (Runtime.callFunctionOn): Session closed. Most likely the page has been closed.
    at CDPSession.send (/Users/terry/Desktop/bot4/node_modules/puppeteer/lib/cjs/puppeteer/common/Connection.js:218:35)
    at next (/Users/terry/Desktop/bot4/node_modules/puppeteer-extra-plugin-stealth/evasions/sourceurl/index.js:34:41)
    at CDPSession.send (/Users/terry/Desktop/bot4/node_modules/puppeteer-extra-plugin-stealth/evasions/sourceurl/index.js:75:16)
    at ExecutionContext._evaluateInternal (/Users/terry/Desktop/bot4/node_modules/puppeteer/lib/cjs/puppeteer/common/ExecutionContext.js:204:50)
    at ExecutionContext.evaluate (/Users/terry/Desktop/bot4/node_modules/puppeteer/lib/cjs/puppeteer/common/ExecutionContext.js:110:27)
    at DOMWorld.evaluate (/Users/terry/Desktop/bot4/node_modules/puppeteer/lib/cjs/puppeteer/common/DOMWorld.js:97:24)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5) {
  code: 2,
  details: 'Error: Protocol error (Runtime.callFunctionOn): Session closed. Most likely the page has been closed.\n' +
    '    at CDPSession.send (/Users/terry/Desktop/bot4/node_modules/puppeteer/lib/cjs/puppeteer/common/Connection.js:218:35)\n' +
    '    at next (/Users/terry/Desktop/bot4/node_modules/puppeteer-extra-plugin-stealth/evasions/sourceurl/index.js:34:41)\n' +
    '    at CDPSession.send (/Users/terry/Desktop/bot4/node_modules/puppeteer-extra-plugin-stealth/evasions/sourceurl/index.js:75:16)\n' +
    '    at ExecutionContext._evaluateInternal (/Users/terry/Desktop/bot4/node_modules/puppeteer/lib/cjs/puppeteer/common/ExecutionContext.js:204:50)\n' +
    '    at ExecutionContext.evaluate (/Users/terry/Desktop/bot4/node_modules/puppeteer/lib/cjs/puppeteer/common/ExecutionContext.js:110:27)\n' +
    '    at DOMWorld.evaluate (/Users/terry/Desktop/bot4/node_modules/puppeteer/lib/cjs/puppeteer/common/DOMWorld.js:97:24)\n' +
    '    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)'
}
(node:66197) PromiseRejectionHandledWarning: Promise rejection was handled asynchronously (rejection id: 6)
^C%

same

same

+1

版本
"dependencies": {
  "qrcode-terminal": "^0.12.0",
  "wechaty": "^1.20.2",
  "wechaty-puppet-wechat": "^1.18.4"
}

// WECHATY_PUPPET=wechaty-puppet-wechat
// node version: v19.9.0
// os: macOS Version 11.7.8

错误说明
I'm trying out the demo ding-dong-bot.  ;-D)
21:35:24 SILL PuppetWeChatBridge inject() Wechaty.init() return code[200] message[WechatyBro Init Succ]
21:35:24 VERB PuppetWeChatBridge ding(ding() OK!)
21:35:24 SILL PuppetWeChatBridge proxyWechaty(ding, ding() OK!)
21:35:24 SILL PuppetWeChatEvent onLog(recv ding)
21:35:24 SILL PuppetWeChatBridge inject() ding success
21:35:24 VERB PuppetWeChatBridge clickSwitchAccount()
21:35:24 SILL PuppetWeChatBridge clickSwitchAccount() button not found
21:35:24 SILL StateSwitch <PuppetWeChatBridge> active() is pending
21:35:24 VERB StateSwitch <PuppetWeChatBridge> active(true) <- (pending)
21:35:24 VERB PuppetWeChatBridge start() initPage() done
21:35:24 VERB PuppetWeChat onStart() initBridge() done
21:35:24 VERB ServiceCtl<PuppetServiceMixin> start() this.onStart() ... done
21:35:24 SILL StateSwitch <PuppetServiceMixin> active() is pending
21:35:24 VERB StateSwitch <PuppetServiceMixin> active(true) <- (pending)
21:35:24 VERB ServiceCtl<PuppetServiceMixin> start() ... done
21:35:24 VERB PuppetWatchdogAgent start() "heartbeat" event listener added
21:35:24 VERB PuppetWatchdogAgent start() "reset" event listener added
21:35:25 SILL PuppetWeChatEvent onLog(checkScan() code:408 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:null)
21:35:25 SILL PuppetWeChatEvent onLog(checkScan() - code change detected: from null to 408)
21:35:25 VERB PuppetWeChatEvent onScan({code: 408, url: https://login.weixin.qq.com/qrcode/gd4OX8tmtQ==})
21:35:25 SILL StateSwitch <PuppetServiceMixin> inactive() is false
21:35:25 VERB PuppetWeChat onStart() throttleQueue.subscribe() new item: [object Object]
21:35:25 SILL StateSwitch <PuppetServiceMixin> inactive() is false
21:35:25 SILL StateSwitch <WechatyReady> inactive() is true
21:35:25 VERB StateSwitch <WechatyReady> inactive(true) <- (true)
21:35:25 INFO StarterBot onScan: Timeout(5) - https://wechaty.js.org/qrcode/https%3A%2F%2Flogin.weixin.qq.com%2Fl%2Fgd4OX8tmtQ%3D%3D
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
█ ▄▄▄▄▄ █▀▄█▀ █▀ ▀▀█▄▀█ ▄▄▄▄▄ █
█ █   █ █▄   ▄█▀█ ▄█▀▀█ █   █ █
█ █▄▄▄█ █ ▀█▀█▀▄ █  ▀▀█ █▄▄▄█ █
█▄▄▄▄▄▄▄█ ▀▄█ █ ▀ ▀▄▀ █▄▄▄▄▄▄▄█
█ ▄▀▄▀▀▄ ██ ▀█   ▀▀█▄█▀ ▄▄▀▄▄▀█
█▀▄ █ ▀▄ ▄▄▄██ ▀█ ▄ ▄▄  ▄ ▄  ██
█▀▀▄ ▀▀▄██▀▀▀ █▀ ▄▄█  ▀▄██▄█▄▄█
█ ▄ █▀ ▄▄▄▄██ ▀▀▀ ▀▀▀▄ ▀██ ▄ ▄█
██ ▄ ▄▀▄ ███▄██▄█▄ ██▄▄▀▀█▀█▄▀█
█▄█▀ ▀▀▄ █▄█▀██▀▀▄▀▀█▄▄▄▄▀██  █
█▄█▄██▄▄█ ▀▄  ▄▀█ █▄▄ ▄▄▄ █ ▀▀█
█ ▄▄▄▄▄ █▄██   ██ ▄▀█ █▄█ ▀▀ ▀█
█ █   █ █▀   █▀▄█▄▄█▀▄▄   ▀▀▀██
█ █▄▄▄█ █▀▄▀ █▄▄█▀ █▀ ██▀▄▄▄▀▄█
█▄▄▄▄▄▄▄█▄███▄▄█▄█▄▄█▄▄█▄█▄█▄██

21:35:26 SILL PuppetWeChatEvent onLog(checkScan() code:408 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:408)
21:35:27 SILL PuppetWeChatEvent onLog(checkScan() code:408 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:408)
21:35:28 SILL PuppetWeChatEvent onLog(checkScan() code:408 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:408)
21:35:29 SILL PuppetWeChatEvent onLog(checkScan() code:408 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:408)
21:35:30 SILL PuppetWeChatEvent onLog(checkScan() code:408 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:408)
21:35:32 SILL PuppetWeChatEvent onLog(checkScan() code:408 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:408)
21:35:33 SILL PuppetWeChatEvent onLog(checkScan() code:408 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:408)
21:35:34 SILL PuppetWeChatEvent onLog(checkScan() code:408 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:408)
21:35:35 SILL PuppetWeChatEvent onLog(checkScan() code:408 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:408)
21:35:36 SILL PuppetWeChatEvent onLog(checkScan() code:408 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:408)
21:35:37 SILL PuppetWeChatEvent onLog(checkScan() code:201 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:408)
21:35:37 SILL PuppetWeChatEvent onLog(checkScan() - code change detected: from 408 to 201)
21:35:37 VERB PuppetWeChatEvent onScan({code: 201, url: https://login.weixin.qq.com/qrcode/gd4OX8tmtQ==})
21:35:37 SILL StateSwitch <PuppetServiceMixin> inactive() is false
21:35:37 SILL StateSwitch <WechatyReady> inactive() is true
21:35:37 VERB StateSwitch <WechatyReady> inactive(true) <- (true)
21:35:37 INFO StarterBot onScan: Scanned(3)
21:35:38 SILL PuppetWeChatEvent onLog(checkScan() code:201 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:201)
21:35:39 SILL PuppetWeChatEvent onLog(checkScan() code:201 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:201)
21:35:40 SILL PuppetWeChatEvent onLog(checkScan() code:201 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:201)
21:35:41 SILL PuppetWeChatEvent onLog(checkScan() code:201 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:201)
21:35:42 SILL PuppetWeChatEvent onLog(checkScan() code:201 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:201)
21:35:43 SILL PuppetWeChatEvent onLog(checkScan() code:201 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:201)
21:35:44 SILL PuppetWeChatEvent onLog(checkScan() code:201 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:201)
21:35:45 SILL PuppetWeChatEvent onLog(checkScan() code:201 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:201)
21:35:46 SILL PuppetWeChatEvent onLog(checkScan() code:201 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:201)
21:35:47 SILL PuppetWeChatEvent onLog(checkScan() code:201 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:201)
21:35:48 SILL PuppetWeChatEvent onLog(checkScan() code:201 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:201)
21:35:49 SILL PuppetWeChatEvent onLog(checkScan() code:201 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:201)
21:35:50 SILL PuppetWeChatEvent onLog(checkScan() code:201 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:201)
21:35:51 SILL PuppetWeChatEvent onLog(checkScan() code:201 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:201)
21:35:52 SILL PuppetWeChatEvent onLog(checkScan() code:200 url:https://login.weixin.qq.com/qrcode/gd4OX8tmtQ== scanCode:201)
21:35:52 SILL PuppetWeChatEvent onLog(checkScan() - code change detected: from 201 to 200)
21:35:52 VERB PuppetWeChatEvent onScan({code: 200, url: https://login.weixin.qq.com/qrcode/gd4OX8tmtQ==})
21:35:52 SILL StateSwitch <PuppetServiceMixin> inactive() is false
21:35:52 SILL StateSwitch <WechatyReady> inactive() is true
21:35:52 VERB StateSwitch <WechatyReady> inactive(true) <- (true)
21:35:52 INFO StarterBot onScan: Confirmed(4)
21:35:53 SILL PuppetWeChatEvent onLog(login(scan code 200))
21:35:53 VERB PuppetWeChatEvent onLogin(scan code 200, 30)
21:35:53 VERB PuppetWeChatBridge getUserName()
21:35:53 SILL PuppetWeChatBridge proxyWechaty(getUserName)
21:35:53 VERB PuppetWeChatEvent onLogin() browser not fully loaded(ttl=30), retry later
21:35:53 SILL PuppetWeChatBridge evaluate()
21:35:53 SILL PuppetWeChatEvent onLogin() innerHTML:
    <canvas style="position:absolute;top:0;left:0;bottom:0;right:0;z-index:-1;width:100%;height:100%;" id="heroCanvas"></canvas>

        <div class="logo
21:35:53 SILL PuppetWeChatEvent onUnload()
21:35:53 SILL PuppetWeChatEvent onLog(event unload)
21:35:53 VERB PuppetWeChatBridge onLoad() page.url=https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=AY3sN3eaC_qrElJKQZmb2_GS@qrticket_0&uuid=gd4OX8tmtQ==&lang=en_US&scan=1690767338
21:35:53 SILL StateSwitch <PuppetWeChatBridge> inactive() is false
21:35:53 VERB PuppetWeChatBridge readyAngular()
21:35:53 VERB PuppetWeChatBridge inject()
21:35:53 SILL PuppetWeChatBridge inject() eval(Wechaty) return code[200] message[WechatyBro Inject Done]
21:35:53 SILL PuppetWeChatBridge proxyWechaty(init)
21:35:53 VERB PuppetWeChatBridge inject() exception: execute proxyWechaty(init) error: 503, init() without a ready angular env. stack: Error: execute proxyWechaty(init) error: 503, init() without a ready angular env
    at Bridge.inject (file:///Users/terry/Desktop/bot4/node_modules/wechaty-puppet-wechat/dist/esm/src/bridge.js:266:23)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async Bridge.onLoad (file:///Users/terry/Desktop/bot4/node_modules/wechaty-puppet-wechat/dist/esm/src/bridge.js:148:13)
21:35:53 ERR PuppetWeChatBridge onLoad() exception: Error: execute proxyWechaty(init) error: 503, init() without a ready angular env
21:35:53 ERR Config ###########################
21:35:53 ERR Config Wechaty unhandledRejection: Error: execute proxyWechaty(init) error: 503, init() without a ready angular env
    at Bridge.inject (file:///Users/terry/Desktop/bot4/node_modules/wechaty-puppet-wechat/dist/esm/src/bridge.js:266:23)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async Bridge.onLoad (file:///Users/terry/Desktop/bot4/node_modules/wechaty-puppet-wechat/dist/esm/src/bridge.js:148:13) [object Promise]
21:35:53 ERR Config ###########################
21:35:53 ERR Config process.on(unhandledRejection) promise.catch(execute proxyWechaty(init) error: 503, init() without a ready angular env)
Config GError: execute proxyWechaty(init) error: 503, init() without a ready angular env
    at Bridge.inject (file:///Users/terry/Desktop/bot4/node_modules/wechaty-puppet-wechat/dist/esm/src/bridge.js:266:23)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async Bridge.onLoad (file:///Users/terry/Desktop/bot4/node_modules/wechaty-puppet-wechat/dist/esm/src/bridge.js:148:13) {
  code: 2,
  details: 'Error: execute proxyWechaty(init) error: 503, init() without a ready angular env\n' +
    '    at Bridge.inject (file:///Users/terry/Desktop/bot4/node_modules/wechaty-puppet-wechat/dist/esm/src/bridge.js:266:23)\n' +
    '    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n' +
    '    at async Bridge.onLoad (file:///Users/terry/Desktop/bot4/node_modules/wechaty-puppet-wechat/dist/esm/src/bridge.js:148:13)'
}
(node:66197) PromiseRejectionHandledWarning: Promise rejection was handled asynchronously (rejection id: 3)
(Use `node --trace-warnings ...` to show where the warning was created)
21:35:54 VERB PuppetWeChatEvent onLogin(scan code 200, 29)
21:35:54 VERB PuppetWeChatBridge getUserName()
21:35:54 SILL PuppetWeChatBridge proxyWechaty(getUserName)
21:35:54 WARN PuppetWeChatBridge proxyWechaty() noWechaty exception: Error: Protocol error (Runtime.callFunctionOn): Session closed. Most likely the page has been closed.
21:35:54 ERR PuppetWeChatBridge getUserName() exception: Protocol error (Runtime.callFunctionOn): Session closed. Most likely the page has been closed.
21:35:54 ERR PuppetWeChatEvent onLogin() exception: Error: Protocol error (Runtime.callFunctionOn): Session closed. Most likely the page has been closed.
21:35:54 ERR Config ###########################
21:35:54 ERR Config Wechaty unhandledRejection: Error: Protocol error (Runtime.callFunctionOn): Session closed. Most likely the page has been closed.
    at CDPSession.send (/Users/terry/Desktop/bot4/node_modules/puppeteer/lib/cjs/puppeteer/common/Connection.js:218:35)
    at next (/Users/terry/Desktop/bot4/node_modules/puppeteer-extra-plugin-stealth/evasions/sourceurl/index.js:34:41)
    at CDPSession.send (/Users/terry/Desktop/bot4/node_modules/puppeteer-extra-plugin-stealth/evasions/sourceurl/index.js:75:16)
    at ExecutionContext._evaluateInternal (/Users/terry/Desktop/bot4/node_modules/puppeteer/lib/cjs/puppeteer/common/ExecutionContext.js:204:50)
    at ExecutionContext.evaluate (/Users/terry/Desktop/bot4/node_modules/puppeteer/lib/cjs/puppeteer/common/ExecutionContext.js:110:27)
    at DOMWorld.evaluate (/Users/terry/Desktop/bot4/node_modules/puppeteer/lib/cjs/puppeteer/common/DOMWorld.js:97:24)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5) [object Promise]
21:35:54 ERR Config ###########################
21:35:54 ERR Config process.on(unhandledRejection) promise.catch(Protocol error (Runtime.callFunctionOn): Session closed. Most likely the page has been closed.)
Config GError: Protocol error (Runtime.callFunctionOn): Session closed. Most likely the page has been closed.
    at CDPSession.send (/Users/terry/Desktop/bot4/node_modules/puppeteer/lib/cjs/puppeteer/common/Connection.js:218:35)
    at next (/Users/terry/Desktop/bot4/node_modules/puppeteer-extra-plugin-stealth/evasions/sourceurl/index.js:34:41)
    at CDPSession.send (/Users/terry/Desktop/bot4/node_modules/puppeteer-extra-plugin-stealth/evasions/sourceurl/index.js:75:16)
    at ExecutionContext._evaluateInternal (/Users/terry/Desktop/bot4/node_modules/puppeteer/lib/cjs/puppeteer/common/ExecutionContext.js:204:50)
    at ExecutionContext.evaluate (/Users/terry/Desktop/bot4/node_modules/puppeteer/lib/cjs/puppeteer/common/ExecutionContext.js:110:27)
    at DOMWorld.evaluate (/Users/terry/Desktop/bot4/node_modules/puppeteer/lib/cjs/puppeteer/common/DOMWorld.js:97:24)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5) {
  code: 2,
  details: 'Error: Protocol error (Runtime.callFunctionOn): Session closed. Most likely the page has been closed.\n' +
    '    at CDPSession.send (/Users/terry/Desktop/bot4/node_modules/puppeteer/lib/cjs/puppeteer/common/Connection.js:218:35)\n' +
    '    at next (/Users/terry/Desktop/bot4/node_modules/puppeteer-extra-plugin-stealth/evasions/sourceurl/index.js:34:41)\n' +
    '    at CDPSession.send (/Users/terry/Desktop/bot4/node_modules/puppeteer-extra-plugin-stealth/evasions/sourceurl/index.js:75:16)\n' +
    '    at ExecutionContext._evaluateInternal (/Users/terry/Desktop/bot4/node_modules/puppeteer/lib/cjs/puppeteer/common/ExecutionContext.js:204:50)\n' +
    '    at ExecutionContext.evaluate (/Users/terry/Desktop/bot4/node_modules/puppeteer/lib/cjs/puppeteer/common/ExecutionContext.js:110:27)\n' +
    '    at DOMWorld.evaluate (/Users/terry/Desktop/bot4/node_modules/puppeteer/lib/cjs/puppeteer/common/DOMWorld.js:97:24)\n' +
    '    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)'
}
(node:66197) PromiseRejectionHandledWarning: Promise rejection was handled asynchronously (rejection id: 6)
^C%

const Wechaty=WechatyBuilder.build({ 	name: 'qc', 	puppetOptions: { 	    uos: true  // 开启uos协议 	}, 	puppet: 'wechaty-puppet-wechat', })   看到我的代码了吗     "uos: true "  这个配了就不会出那个问题了！  我有写一整套教程，也是现在写到第13章用node开发微信群聊机器人第①章

puppet: 'wechaty-puppet-wechat',
puppetOptions: {
uos: true,
},  代码去掉注释


ember cli shims

Hi would you want to migrate your snippets to be ember-cli-shims format ?
so instead of
import Ember from 'ember'

export default Ember.component.extend({

})

it would be
import Component from 'ember-component'

export default Component.extend({

})

@billybonks I'm not up-todate with Ember syntax, as I no longer program, but it sounds good! Feel free to create a pull request and i'll merge it.

Deprecated in favor of https://github.com/ember-cli/ember-rfc176-data

I just shipped 2.1.0, which includes the work done in #26

nice :)


Possibly convert to typescript

Just for the sake of stricter typing, it may make sense to convert this to typescript at some point though the goal is to stick to mostly the original version.

Will likely need upgrading to later versions of the github module as typing errors. So not really a priority


Gobblin_password_encryptor should be included in the tarball

As all the jars needed by the password encryptor cli tool are in the gobblin-dist/lib directory,
it's not necessary to build gobblin-utility.tar.gz manually as suggested in the [documentation]
(https://github.com/linkedin/gobblin/wiki/Working-with-Job-Configuration-Files#password-encryption) .
This patch copies the shell script to gobblin-dist/bin. Also added a null check to the password
decryptor to fix the NPE in case of unset passwords.

LGTM

Thank you, Chavdar!


Add examples to the "How filtering rules are applied" section

As per title. Concrete examples would likely be far more useful than the very dry explanation of the algorithm.

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

ID: 7184a308-a254-9350-a5cd-5bced1f369ae
Version Independent ID: 726e3bf1-f367-d733-8933-bccc04da0e16
Content: Logging in .NET Core and ASP.NET Core
Content Source: aspnetcore/fundamentals/logging/index.md
Product: aspnet-core
Technology: aspnetcore-fundamentals
GitHub Login: @Rick-Anderson
Microsoft Alias: riande

Thanks for contacting us.
We don’t have the resources to invest in this area, so we are closing the issue. Should your request generate enough  👍 responses, we’ll reconsider. We'll also reconsider this issue in the next doc update.


Profile — Testing #19

Button states are confusing - switches between filled blue, outline blue and filled red randomly as the mouse hovers back and forth

PR #1005
certain combinations of the button state being focused but not hovered resulted in red coloring
locally overriding Bootstrap and low level defaults
for the buttons that use different colors when "Enabled" vs "Enable":
focus state uses accessibility border shadow on tab, but otherwise matches unhovered, unfocused state
currently, focus colors override hover colors, can attempt to tweak later if desired
buttons that don't have toggle options (i.e. Enable vs Enabled) such as Cancel and * Settings left untouched, can attempt to tweak later if desired

button themes adjusted for Edit Profile and ProfileSettingsModal


Meta-data issues with pvss-0.1

I noticed your recent package upload to Hackage as it was flagged by the matrix buildbot due to  packaging meta-data issues:

The description ("Please see README.md") is not a proper description for your package (and Hackage will show a link to the README at the end of the description if the README exists; therefore that phrase is redundant), and hence this will cause poor experience for users (NB: your package won't be properly indexed by Hackage's package search feature and thus hurt its discoverability). See also this posting for more details.

The build-dependencies have inaccurate versions bounds. Please be aware that accurate version bounds are mandated by the PVP, and adherence to the PVP is expected as part of the Hackage guidelines.  This has various knock off consequences, such as Hackage possibly not being able to generate Haddock documentation for your package, install-plans degrading over time, as well generally resulting in a poor experience for users since they'll run into the same compilation errors.

The cabal gen-bounds command can be used to help infer an initial set of version bounds, see  Cabal User Guide | Generating dependency version bounds for more details.
Specifically, I've noticed the following compile error
Configuring component lib from pvss-0.1
Preprocessing library pvss-0.1...

src/Crypto/PVSS.hs:8:12:
    unknown flag in  {-# OPTIONS_GHC #-} pragma: -Wno-unused-top-binds

src/Crypto/PVSS.hs:9:12:
    unknown flag in  {-# OPTIONS_GHC #-} pragma: -Wno-name-shadowing

src/Crypto/PVSS.hs:10:12:
    unknown flag in  {-# OPTIONS_GHC #-} pragma: -Wno-unused-matches
cabal: Failed to build pvss-0.1 (which is required by exe:pvss-exe from
pvss-0.1).

If you have any questions, please let me know!

PvP spam

@vincenthz I'm sorry you feel that way. One way to avoid being informed about problems with your package uploads would be to not upload them to Hackage, then they won't be flagged.


test: use cilium identity list for policy trace test

cilium identity get only returns the identities which fully match the set of labels
provided to its --labels parameter. So, if an identity contains labels 'id=app1', and
'app=test', and cilium identity get --labels=id=app1 is made, then no identities will
be returned because the label 'app=test' was not provided to the command. This means that
if an identity in the policy tracing test overlaps with the labels being used in the trace,
is still in the key-value store, then the test will fail if any other prior test used
the same labels being used in the trace if cilium identity get is used to obtain all
identities with a single label, but there are other identities which contain that given
label and other labels.
Instead, to get all identities which contain the label used in the trace, use
`cilium identity list` and filter using `jq`.
Fixes: #6347.
Signed-off by: Ian Vernon<EMAIL_ADDRESS>

This change is

test-me-please

Coverage increased (+0.04%) to 43.816% when pulling b93f07a843ea17b31e0a29fd4d9056fe6046e022 on pr/ianvernon/fix-ci-trace-test into 0cfc70c18f2423718741c37f53ef48b0972837d9 on master.

test-me-please

test-me-please


[FEAT]: Does anything-llm have API to allow calling from external code?

What would you like to see?
Thank you for the awesome tool!
I’m wondering whether anything-llm has API ( like OpenAI API) to allow call anything-llm from python or an external system such as langchain? Such type of APIs will be very useful to allow machines (rather than just human users) to interact with anything-llm. For example, I have a large set of text, each of them needs to call an LLM engine for query.
Thank you:-)

We do, every instance (even desktop) of AnythingLLM has a full developer APi you can use to send chats. https://docs.anythingllm.com/features/api
If you have anythingllm running, opening settings > Tools > Developer API and you can get your own key + view all the docs/endpoints available.

Thank you for quick response!!
It would be more helpful if a bit more information such as function interface is provided in the documentation page https://docs.anythingllm.com/features/api.
Thanks again:-)

Thank you for quick response!! It would be more helpful if a bit more information such as function interface is provided in the documentation page https://docs.anythingllm.com/features/api. Thanks again:-)

Did you get this to work? I just keep getting 401 Unauthorized on the API when trying to chat using openai api endpoint.

@Nero10578 did you possibly get an API key first so that you can use the API. On the sidebar > Tools > Developer API > Generate API Key button right at the top.
It is an API - so you need a key, even if you are doing everything locally. 401 means you dont have a key and/or are sending the request incorrectly. Header should be Authorization Bearer API-KEY-GOES-HERE


Empty FileStorePath

Hi @esanchezros
I am getting outOfMemory error in my spring boot application, which reads huge data volume from Kafka Topics and send to FIX Initiator Engine. On analysis I found that, this is because of the internal MessageQueue that QuickFixJ uses to send the gap fills.
To avoid storing it in memory I used FileStoreMaxCachedMsgs=0 (as per quickfixj documentation), but somehow it is not taking effect. FileStorePath is always empty, I never see any files under them.
Not sure what am I missing? Tried both of your examples:
https://github.com/esanchezros/quickfixj-spring-boot-starter-examples/tree/master/simple-client-listener
https://github.com/esanchezros/quickfixj-spring-boot-starter-examples/tree/master/simple-client
FileLogPath is getting created but FileStorePath isn't. Could you please help?

Hi @aniket0788,
Could you send your quickfixj configuration?

Please find it below:
[DEFAULT]
ConnectionType=initiator
SenderCompID=TEST
TargetCompID=TARGET
ReconnectInterval=10
UseDataDictionary=N
FileStoreMaxCachedMsgs=0
FileStorePath=/pathTo/store
FileLogPath=/pathTo/log

[SESSION]
BeginString=FIX.4.4
HeartBtInt=30
StartTime=00:00:00
EndTime=00:00:00
TimeZone=America/New_York
SocketConnectHost=xyz
SocketConnectPort=9877
ResetOnLogon=Y
SocketUseSSL=Y
CipherSuites=TLS_RSA_WITH_AES_128_CBC_SHA
EnabledProtocols=TLSv1.2

Thanks, could you also send the stacktrace of the exception you're getting?
Also, are you creating a MessageStoreFactory bean in your spring boot application of type FileStoreFactory? The default one that the spring boot starter creates, if no other is defined, is a MemoryStoreFactory.

Hi @aniket0788
I have created a FileStoreFactory on my test app like this:
@Bean
public MessageStoreFactory clientMessageStoreFactory(SessionSettings clientSessionSettings) {
	return new FileStoreFactory(clientSessionSettings);
}

and I can see the file store files being created in the file system:

Are you still having problems?

Thanks @esanchezros , Yes I did the same and it works now.
But I ran into another issue, these files are very huge in mycase (especially .body file) because of the large messages that I am sending (tag 213 -> XmlData) and its occupying GBs on disk within few minutes of app run.
Is there a way to clear them after sometime or may be some rolling policy?

Hi @aniket0788,
I checked quickfixj configuration guide and it seems there aren't any options to control the file size or provide with a rolling policy.
Perhaps you could consider using MySql or Postgres store factories and then have a job that clears out old rows horly, daily, etc


Code 500 "Internal Server Error" from reloading page

This problem can be reproduced by going to http://play.cardshifter.com/ and logging in to a game server (I used dwarftowers.com server) and then refreshing/reloading the page in the browser.
Ideally, the game client should make it so that there doesn't appear to be a change in game connection state if the page reloads etc. Quoting @Zomis in chat "it can be made possible so that it looks like you remain connected, but what actually happens is that it creates a new connection as soon as you load the page"
Here is the error text displayed in the browser, as well as a screenshot. Note that the quoted email<EMAIL_ADDRESS>is not a real email address. Maybe we should create that email account also, or have it display a real email, albeit that's besides the point of this issue I think.

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator<EMAIL_ADDRESS>and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.

This problem is no longer present in the Vue.js client #144


[kafka] verified source

Quick source info
Incrementally reads events from a specified kafka topics.
Current Status

[x] I plan to write it

What source does/will do
The source reads events from a specified topics or set of topics and yields them in configurable chunks. It implements incremental loads so events are not duplicated.
Following use cases should be demonstrated:

reading events from one topic and dispatching them to tables by event type
reading events from many topics and dispatching them by topic name
passing KafkaConsumer directly instead of credentials
how to configure event and channel metadata that will be passed along with the event

Following authorization methods should be implemented:

PLAIN, SSL, SASL_PLAIN + SSL, directly pass consumer

Optional: reading topic schemas and converting them into pydantic model that we pass as columns to resource. Please investigate
Test account / test data

[x] I'd like dltHub to create a test account before we start

Additional context
Incremental loading is tricky and must be well tested. Where to start:

dont' use autocommit
store the offset information in resource state
I do not think we need incremental here. depends how offsets are represented
use the state to cut offset on next run before getting messages, not in this run

Something more to add to this is issue is:

Being able to use custom decoders after message consumption.
e.g. in the past, I've been working with 3 type of data serialization with Kafka:
pure JSON
pure Avro - the schema is attached in the message
Avro with schema registry - only the reference to the schema registry is attached in the first 5 bytes, then the avro bytes are in the remaining bytes

Said so, the concept of message Decoding is something that must be configurable.


typechecker+codegen: Add support for the is operator

This implementation of the is operator differs from the Rust implementation
of jakt, in that any valid type name is accepted as the rhs of the is operator.

Hello!
One or more of the commit messages in this PR do not match the Jakt code submission policy, please check the lint_commits CI job for more details on which commits were flagged and why.
Please do not close this PR and open another, instead modify your commit message(s) with git commit --amend and force push those changes to update this PR.


talk: when the chat input field is focused in a mobile viewport, the header of the channel is pushed upward by the keboard

Describe the bug, optionally with screenshots
While using Talk and talk channels in Groups on a mobile device, tapping the messaging input field to send a message pushes the header UI outside the boundary of the viewport:

In the image above, note that the keyboard is visible after tapping the text field, and there is no visible header UI on-screen. This is captured even more clearly in this video:
https://user-images.githubusercontent.com/1195363/202750031-164b7049-3c99-4f88-bac6-a8d9a291e546.mp4
Expected behavior
We should keep the header UI visible/fixed to the top edge of the chat view, as it surfaces context around where and what a person is communicating about. This is also a general affordance that most, if not all, chat experiences comply with.

@urcades do you know of any mobile browser-based chats that do this? I'm having trouble finding one – "keyboard-avoiding nav" is a known Hard Problem to solve on iOS Safari especially

Can't repro this in android/chrome (brave). Seems to be an iOS specific issue.

Gonna get a simulator running in xcode and look into it that way.

ok, I can repro in the simulator.

@rcrdlbl off the top of my head — no actually! If it turns out that the lift required to get this behavior down on the web is massive (or there straight up aren't existing patterns for implementing this webwise), we can put it off for later or ignore. It's definitely ideal though.

Yeah, there does not appear to be a straightforward way to prevent this behavior in safari on mobile.

Let's close this for the time being!


Auto switch the color scheme based on windows color scheme

Description of the new feature/enhancement
An option to set the preferred light and dark color schemes for every profile and the terminal auto switches to that scheme based on os settings.
Proposed technical implementation details (optional)

See issue #4066.

/dup #4066


Rate of pay slider

Context

#47

Todos

Add rate of pay slider
The slider should have these hourly rates:

default: 0.60 (i.e. sixty cents per hour)
step: 0.01
min: 0.00
max: 1.20 (not sure about this value at the moment, but it can be easily changed)

Whenever the user changes the slider value, update the rate of pay in the extension storage and recalculate the amount that needs to be sent every second (which will be stored in the extension state)
Display the current rate of pay and the remaining balance
Add switch component to disable WM for the current website

[!NOTE]
If the slider is dragged to its minimum value (0.00), we can disable the WM for the current website.

Linked to #53

This will be in ready for review by tomorrow

Currently adding unit test cases, aiming to put into review on Mon, 19 Feb.

PR review feedback received & will work on the feedback.
Aiming to merge this by end of this week.


motors do not stop

the app does not send a stop command if the "sticks" are let gone.
We might want to add a failsafe or timeout to the firmware, stopping the motors if no drive commands are received within a certain time.

Please use the newest app on Playstore and Appstore:
https://play.google.com/store/apps/details?id=com.AugmentedRobotics.RoboHeartControl
https://apps.apple.com/us/app/roboheart-control/id6447350006


Re-enable support for directly instantiating a Model object

Re-enable support for directly instantiating a Model object (bypassing ModelIterator) if the all_models table is empty. Only recommended for testing (e.g., test_orbit_losvds.py).
Background:
In general, DYNAMITE only supports models that are created via the ModelIterator class, which adds new models to the all_models table (see also PR #288).
The only exception: instantiating a Model object directly IF THE ALL_MODELS TABLE IS EMPTY. This may be used for investigating specific orbit libraries without weight solving as it is done e.g., in test_orbit_losvds.py.
How to test:

Run test_nnls.py and verify the results look as expected.
Run test_orbit_losvds.py and verify the results look as expected.

How to test:
Run test_nnls.py and verify the results look as expected.
Run test_orbit_losvds.py and verify the results look as expected.

Both work as expected! Will merge :)

Ready to merge after fixing changelog :)


Revisit wpa downgrade with 6.6 kernel

Test linux 6.6 with wpa_supplicant 2.10 to see if the downgrade is still required on these configs.

Initial investigation in this has found that it is likely a driver issue as it appears to be related to wpa_supplicant attempting to send WPA control commands over NL80211 which looks like its standard for every wireless driver. This issue is still present in wpa_supplicant/hostap 2.10 and 2.11, in 5.10, 6.6, and 6.12 kernels.


Revert "(PUP-8502) Use node terminus "plain" for lookup CLI unless --compile"

Reverts puppetlabs/puppet#6700
This seems to be causing acceptance test failures, so this PR reverts the work until those acceptance tests are updated.

Superseeded by #6712


Create interactive demo URLs

The documentation could include live links to a service like the APIgee console, which allows you to perform live requests, tweak them, etc:
https://apigee.com/console/others?req={"resource"%3A"https%3A%2F%2Fdemo.bothan.io%2Fmetrics"%2C"params"%3A{"query"%3A{}%2C"template"%3A{}%2C"headers"%3A{"headers_name_0"%3A"Accept"%2C"headers_value_0"%3A"application%2Fjson"}%2C"body"%3A{"attachmentFormat"%3A"mime"%2C"attachmentContentDisposition"%3A"form-data"}}%2C%22verb%22%3A%22get%22}
We could add those to the documentation and make it easy to experiment with.

POSTing: https://apigee.com/console/others?req={"resource"%3A"https%3A%2F%2Fdemo.bothan.io%2Fmetrics%2Fapigee-console-test.json"%2C"params"%3A{"query"%3A{}%2C"template"%3A{}%2C"headers"%3A{"headers_name_0"%3A"Accept"%2C"headers_value_0"%3A"application%2Fjson"%2C"headers_name_1"%3A"Content-Type"%2C"headers_value_1"%3A"application%2Fjson"}%2C"body"%3A{%22undefined%22%3A%22\u0001\u0001%22%2C%22attachmentFormat%22%3A%22mime%22%2C%22attachmentContentDisposition%22%3A%22form-data%22%2C%22bodyText%22%3A%22{\n%20%20%22time%22%3A%20%222016-04-12T10%3A00%3A00%22%2C\n%20%20%22value%22%3A%20500\n}%22}}%2C%22verb%22%3A%22post%22}
(doesn't store password apparently)

Or is there anything else interactive we could use?

We could probably do this with swagger, see #173


Bug fix psl 7834

Motivation and Context
Bug: Browse experience provides inaccurate reference citations

Description

Contribution Checklist

[ ] I have built and tested the code locally and in a deployed app
[ ] For frontend changes, I have pulled the latest code from main, built the frontend, and committed all static files.
[ ] This is a change for all users of this app. No code or asset is specific to my use case or my organization.
[ ] I didn't break any existing functionality :smile:

@Roopan-Microsoft  @Avijit-Microsoft  Please review it !

@Roopan-Microsoft @Avijit-Microsoft Please review it


WIREFRAMES: Full-page work item design [3]

Revisit the designs for showing work item detail as a full page.  Consider:

How to show the context (space, area, iteration, etc.)
How to get the user back to the planner easily once they're done with the work item

VC:

create follow-up wireframe stories for additional drafts
review with Product Team

Wireframe w/animation here: https://redhat.invisionapp.com/share/4NBW9EM2H


Batch Size Finder: Allow datamodule to decide fate when OOM thrown with new hook

🚀 Feature
Related #10243 (PR did not get to the finish line).
Motivation
After speaking to "Harry" on the Lightning Slack channel, we came up with some improvements that can be made to the batch size finder. This spawned from a discussion around automatic accumulation in real-time, but ended up being closer to the developer experience when using the batch size finder before training.
Pitch
We should allow the DataModule to control what happens when the batch size finder resets the dataloaders. This is required when certain data-loaders need to be reset in a particular manner (order by size of examples, such that the largest examples are first).
class MyDataModule(pl.LightningDataModule)
    ...
    def on_batch_size_finder_reset(self, model, trainer):
        trainer.reset_train_dataloader(model)
        trainer.reset_val_dataloader(model)

This function would be called via the batch size finder when a reset needs to be made, i.e:
https://github.com/Lightning-AI/lightning/blob/master/src/pytorch_lightning/tuner/batch_size_scaling.py#L149-L150
or
https://github.com/Lightning-AI/lightning/blob/master/src/pytorch_lightning/tuner/batch_size_scaling.py#L188-L189
We should also ensure that we reset when an OOM is raised, as this is omitted from the exception clause: https://github.com/Lightning-AI/lightning/blob/master/src/pytorch_lightning/tuner/batch_size_scaling.py#L195
cc @borda @akihironitta @rohitgr7 @carmocca

I think this would also require some documentation on when and why you might want to override this method in the docs with a link in sections mentioning batch_finding flags?

If this becomes a hook in the DM, it should probably also be part of the LM, as you can also user LM hooks to define the loaders

This would be fixed by having it as a callback that the user can easily modify cc @rohitgr7

not really, but we can expose it if required. That would require few follow-ups after that PR get's merged since currently the callback is using existing code to better review.
A current workaround can be:
def train_dataloader(self):
    if self.trainer.state.fn == TrainerFn.TUNING:
        # do stuff
    ...


Fix for python3 compatibility

Please check if this still works correctly in Python 2.x

It seems to be that the patch is not as easy.

desent work with the patch?
I cannot see now

It is not the only thing to change: the  geoFormFields.py has an import from gpxdata that did not work at first.
If you can test it great; if not, I will try it again at work.

Hi.
I cannot try.
I'm pleasure if you can fix

Sorry, finally we used another component and I cannot test it.


Not working with special characters

Lunr doesn't seem to work with special characters. Here are some examples
https://jsfiddle.net/00y9o4b7/2/
var lunrIdx = lunr(function() {
  this.field('title');
  this.add({title: "مرحبا"});
  this.add({title: "你好"});
  this.add({title: "¿dónde?"});
  this.add({title: "why?"});
  this.add({title: "(bracket)"});
 });

alert(lunrIdx.search('مرحبا').length); // 0
alert(lunrIdx.search('你好').length); // 0
alert(lunrIdx.search('¿dónde?').length); // 0
alert(lunrIdx.search('why?').length); // 0
alert(lunrIdx.search('(bracket)').length); // 0

There are a couple of things at play here, I'll try and explain each one...

"(bracket)" lunr.trimmer is by default present in the indexing pipeline and will remove any leading and trailing non word characters. So you should be able to see that "bracket" is in the index and searchable.

"why?" is affected by both the lunr.trimmer and the lunr.stopWordFilter. First the "?" is removed, after which the token "why" is a stop word so is not indexed.

"مرحبا" and "你好" are again artefacts of the lunr.trimmer. It uses a regex to find non word characters that unfortunately does not play nicely with non-latin languages. If you need to support languages other than English, and especially if they are non-latin based, you should take a look at the excellent lunr-languages project.

"¿dónde?" at first I thought this was a similar issue to 3, but it is more like the first issue with "(bracket)". The lunr.trimmer removes the question marks and leaves just dónde in the index.

So, in summary, if you need to search for non latin (or non English even) languages you will get the best results from using the lunr-languages plugin. For the other cases, the pipeline is customisable, so you can remove the trimmer if you want, or add it in the search pipeline (though that might strip any wildcards from a search term). The stopWordFilter is also customisable and you can generate one based on a set of words that make sense for your corpus, either that or completely remove it.

Closing this as I don't think there is anything more to do, feel free to re-open or comment if you disagree.


(fix): allow app_id to be passed into Boot (fixes #72)

Summary of changes:
Intended/example use case:
Checklist:

[ ] npm run build runs without error
[ ] ng serve spawns app, Intercom messenger is visible and interactive, and there are no errors in the console

Closes issue: #

@wbhob, if you bump the versions for package.json and ng-packgar we can deploy this change by doing a release with v in the tag version.


Added prop 'suggestOnAllWords'

Added Boolean prop 'suggestOnAllWords' which if set to true, will enable suggestions on more than one input word in search hit(s).
To demonstrate, using the same API as in your examples, searching "Beautiful mind" will not give much:

Setting 'suggestOnAllWords' to true, the result will look like this:

This feature is also useful when you have search results that have many similar values.
I read your contribution guidelines a tad too late unfortunately - let me know if this is of any interest and I can provide the further work.

thanks for your pr. When I have time I will produce the next version in npm. Do you have free time to work in other projects?


Add Ancillary Service Prices

I added entries to the YAML file for reading the Day-Ahead and Real Time Ancillary Service Prices. Please verify that you are able to load these datasets appropriately. I spot checked getting data for 2019 for both and exported them to a CSV file successfully.
NOTE: I did not include the new entries (rtasp and damasp) in the list of supported datasets. This list could alternatively be populated by pulling the keys from the YAML file.

The changes in d6569193d2152317b4f5d4f0f92f3c28e24c0c94 could have been implemented as a requested code change as part of this PR.


Adding column names to data every other line, stops after 38 rows (line 76 is the last one with column names)

I'm running this on 100 files currently, pending a run on over 14k files. When I tested from a local directory with 3 files this didn't happen, but now I'm testing on 100 files from our network I'm getting the column names added as data in the columns every other line. Line 1 is the column names, line 2 is the first row of data, line 3 is the column names, line 4 is the next row of data, etc. Line 76 of the CSV is the last spot where the column names appear. Currently not throwing any errors relating to this.

Please ignore - I was able to confirm this issue was related directly to connection speed. If anyone experiences this issue: Create your blank file with only the column names saved to it first, this will prevent the package from appending the data again.


Update ImageClassification to ML.NET v1.0.0

Update ImageClassification tutorial to ML.NET v1.0.0

closing and reopening

Thanks, @luisquintanilla!


Links for errors in the interactive window don't work

See this bug here:
https://github.com/microsoft/vscode/issues/141757#issue-1117797222
Basically if you click on a 'file' link in the interactive window both our code and VS code core handles the click.
We could switch to VS code handling it, but they don't do the same thing we did before.

@rebornix undid the change to VS code that caused this. Leaving open for now so we use this to decide what to do in the longer term.


update big decimal to new syntax

Why closed?

sorry, that was on me. my company is using a very old, forked version of
quickbooks-ruby, and as part of our upgrade to rails 7, i was resolving an
issue with an older version of roxml. I meant to open it against our forked
version, but accidentally opened it against your repo. we're still using v
3.3.1, but needed to fix the big decimal new errors we're getting from
upgrading rails. :grimace:
On Fri, Jun 14, 2024 at 5:45 PM Benjamin Woosley @.***>
wrote:

Why closed?
—
Reply to this email directly, view it on GitHub
https://github.com/Empact/roxml/pull/101#issuecomment-2168851060, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/AAYT326HMLTBA6XPJBOMAQLZHNXCLAVCNFSM6AAAAABJIMWF4OVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCNRYHA2TCMBWGA
.
You are receiving this because you modified the open/close state.Message
ID: @.***>


In Single Mode, a round ends when the player has answered, or the timer has run out

this issue was implemented in commit 50bb93b


problem with firebase_admob 0.5.6.

Before used to work fine but after the update i cant build anymore my app on android. on IOS works fine. Flutter doctor shows everything ok.
FAILURE: Build failed with an exception.
* What went wrong:
Failed to notify dependency resolution listener.
> The library com.google.android.gms:play-services-measurement-base is being requested by various other libraries at [[16.0.0,16.0.0]], but resolves to 15.0.2. Disable the plugin and check your dependencies tree using ./gradlew :app:dependencies.
> The library com.google.firebase:firebase-analytics is being requested by various other libraries at [[16.0.1,16.0.1]], but resolves to 15.0.2. Disable the plugin and check your dependencies tree using ./gradlew :app:dependencies.

Adding the following line on the app/build.gradle solved my problem, at least i suppose so.
com.google.gms.googleservices.GoogleServicesPlugin.config.disableVersionCheck = true

Have the same issue.  The disableVersionCheck = true workaround works fine, but is this the only fix we have at this moment ?

https://gist.github.com/jkasten2/2c63ce79c03cac4943e240a46cea218c#file-build-gradle-L45-L47

@Luckygirlllll
Anywhere, doesnt matter. Usually at the end of the file with a comment that you did the change.

@Luckygirlllll
Anywhere, doesnt matter. Usually at the end of the file with a comment that you did the change.

I got this error after I added that line and update all firebase implementation to the newest version:
The library com.google.android.gms:play-services-base is being requested by various other libraries at [[15.0.1,15.0.1]], but resolves to 16.0.1. Disable the plugin and check your dependencies tree using ./gradlew :app:dependencies.
Any solution ?

I have the same issue with firebase but it solved please refer this link for more details!

Adding the following line on the app/build.gradle solved my problem, at least i suppose so.
com.google.gms.googleservices.GoogleServicesPlugin.config.disableVersionCheck = true

it still gives the same error, can u please tell, in which section of app/build.gradle , do I have to put this
?

Add this line at the very bottom of your app build.gradle file.

Adding the following line on the app/build.gradle solved my problem, at least i suppose so.
com.google.gms.googleservices.GoogleServicesPlugin.config.disableVersionCheck = true

it still gives the same error, can u please tell, in which section of app/build.gradle , do I have to put this
?

You can't release the app if you do this ... can't upload to playstore console either ... not a fix ..
It happens when you update the version of flutter

Adding the following line on the app/build.gradle solved my problem, at least i suppose so.
com.google.gms.googleservices.GoogleServicesPlugin.config.disableVersionCheck = true

I get this error
A problem occurred evaluating project ':app'.

No such property: config for class: com.google.gms.googleservices.GoogleServicesPlugin

@kondasoft
This issue has been moved to https://github.com/FirebaseExtended/flutterfire/issues/734. Any further collaboration will be done there.

Since firebase_admob issues require work on the Flutter side as well as the plugin side these issues will remain open here as well until resolved.

Hi @kroikie
From what I can see, the issue is related to a FlutterFire plugin rather than to Flutter itself. Please open the issue in the dedicated repository.
Closing, as this isn't an issue with Flutter itself.
Closing this as https://github.com/FirebaseExtended/flutterfire/issues/734 is closed for inactivity, if anyone is facing this issue please file a new one by filling the issue template.
If you disagree, please write in the comments,
providing your flutter doctor -v, your flutter run -v,  your pubspec.yaml
a minimal reproducible code sample that does not use 3rd party plugins,
and I will reopen it.
Thank you


Fix UE 5.3 Routing Issue and Weather Sample Crashing

Sample
Weather Sample & Routing Sample & Material By Attribute
Summary
Routing Sample was keeping users from being able to open the project in newer versions of Unreal Engine, specifically 5.3
Weather Sample was crashing due to memory issues.
Material By Attribute Building Name Renderer was missing the Windows texture to render the material on the 2 buildings
Tests

Right-click on the .Uproject and click "change unreal engine version"
Change it to UE 5.3
Open the .sln file and build it, it should succeed.
Open UE 5.3 and test samples

ArcGIS Maps SDK Version
UE 5.3 w/ Maps SDK 1.4

fixes #76


Use $(basename $PWD) to generate code-workspace file

This is helpful if you have more than 1 clone of the same project, maybe one per version or so.
This also removes the need for _load_answers() in subprojects, so that code is removed. It can be rescued from git history if needed later again.
@Tecnativa TT20357

Isn't possible to share same code across each version for not duplicating it?

I don't understand... do you mean the test samples?

I see that you have a method write_code_workspace_file for each version and I was wondering if they can share a significant amount of code due to DRY principle.

For version v1.x I'm trying to set foundations for future enhancements, and that one could be a good one for the future indeed. However the problem of finding a task manager that works without duplicating code is not easy to solve!
For now I'm focusing on having the same basic features as with doodba-scaffolding. There we also had the doodbasetup.py file which was cloned over and over and did something similar, so this is not worse than that after all.
Also notice that all code inside tests/default_settings seems duplicated (in case you're looking to that). That's there so we can easily see what diff produces each change in a new project for each supported Odoo version, but I don't update that manually, I just use invoke update-test-samples. I have those samples because this project is a template, and testing it implies being able to review the output it produces.

For version v1.x I'm trying to set foundations for future enhancements, and that one could be a good one for the future indeed. However the problem of finding a task manager that works without duplicating code is not easy to solve!

OK, but it's something to keep a project mantenible. Imagine when we are at Odoo version 15 and having to update 9 folders or keep some unsynced.

Also notice that all code inside tests/default_settings seems duplicated (in case you're looking to that). That's there so we can easily see what diff produces each change in a new project for each supported Odoo version, but I don't update that manually, I just use invoke update-test-samples. I have those samples because this project is a template, and testing it implies being able to review the output it produces.

Instead of pre-generating them, isn't better that tests generate them?

Instead of pre-generating them, isn't better that tests generate them?

Yes, tests generate them and compare them with the pregenerated ones. So we can manually review the pregenerated, and then the test makes sure it works as expected.
If we don't keep them there, how were we going to be able to review results easily? :man_shrugging:

OK then, but if both comes from the same source, it's difficult to hunt down problems as we tend to overpass that, so the efficiency of that test is questionable.

the efficiency of that test is questionable

The test is doing its job.
For example, look at https://github.com/Tecnativa/doodba-copier-template/pull/34/files#diff-9de5fd74bc4cfbf86147fab9dad9e945
It's checking now that the doodba.*.code-workspace file is named after the folder name and not after the project name.
If any future change modifies this, it would fail this test, as it just did before.
I'll add an additional unit test so maybe in the future we can remove these tests.

OK

Extra test added.


Fm vco

Made FmVCO class, which basically has to process the modulation signal in a slightly different way. Typically the mod signal is applied in midi-space (log frequency), but FM operates on modulations in Hz space. Also changed the modulation depth to reflect the classic 'modulation index' of FM literature. It's a bit more intuitive this way.
Had to slightly refactor VCO to make this smooth.
Note, this is only work on the numpy modules. torchmodule.py would have to be updated accordingly.

Cool great :) Do you want to add tests? If you're having trouble I can help


Suspended organizations not visible to SpaceDevelopers on v3

Reproduction Steps:

Suspend an organization:
cf curl -X PUT /v2/organizations/<org-guid> -d '{"status": "suspended"}'
Observe as admin on v3 cf curl /v3/organizations/<org-guid> -> 200
Log in as space developer for a space in that organization
Observe on v2 API cf curl /v2/organizations/<org-guid> -> 200
Get 404 on v3 API cf curl /v3/organizations/<org-guid> -> 404

Expected Behavior
Suspended organization should be visible to SpaceDevelopers for spaces in the org.

This also affects endpoints nested under organizations. For example GET /v3/organizations/<org-guid>/domains

What is the impact of this bug?  It seems to have been a deliberate decision, and has been around as long as v3.
The problem is that validate_access for v2 doesn't check organization#status, but v3 does, via https://github.com/cloudfoundry/cloud_controller_ng/blob/2f334a26d27daf45d72ffd852bd974af1c451fe9/lib/cloud_controller/membership.rb#L72
It does look like the v3 behaviour differs from v2. But this looks like a conscious decision.

Here's what's going on:

v3/organizations_controller.rb calls fetch_editable_org in update and update_default_isolation_segment, which is fine.
fetch_editable_org returns 404 if the specified org doesn't exist, or it isn't readable, which is fine.
Then it returns 403 if the user doesn't have write-access to the org, which is also fine.

So far everything is fine. The problem is in Membership#member_roles, which denies non-admins access to an org if the org is suspended. This is definitely an issue for v3. v2 relies on the *Access classes, which rely on a mix of perm and scopes, and it looks like for the v2 org controller scopes are sufficient.


feat(formatting): adding editor config, adding eslint and tslint

feat(formatting): adding editor config, adding eslint and tslint
code formatting was not implemented for the anglar-cli project itself.  adding eslint and tslint, did initial formatting for eslint

LGTM. We should enforce this in Travis too, but this can be done in the next CL.


fix(deps): update terraform github.com/terraform-ibm-modules/terraform-ibm-powervs-infrastructure to v8.2.2

This PR contains the following updates:

Package
Type
Update
Change

github.com/terraform-ibm-modules/terraform-ibm-powervs-infrastructure
module
patch
v8.2.1 -> v8.2.2

Release Notes

terraform-ibm-modules/terraform-ibm-powervs-infrastructure
v8.2.2
Compare Source
Bug Fixes

deps: update terraform-module (#539) (b0b11e4)

Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.

[ ] If you want to rebase/retry this PR, check this box

This PR has been generated by Renovate Bot.

/run pipeline

/run pipeline

/run pipeline


Update MSBuild targets in Microsoft.AspNetCore.Mvc.Testing to not use AssemblyAttribute

This breaks when the user sets GenerateAssemblyInfo to false and we plan to update all the places where we use it.

This doesn't look like a high priority issue, so will wait for more feedback regarding this ask.

@javiercn, can you please add a cost to this? Thanks!

It's pretty much done. I put a PR a while ago when we were determining if we were taking it on ask mode. Given it current status, I'll just address @pranavkm feedback on it and merge it when I have some time. It's not at all urgent.

We don't have plans to do this. We can revisit in the future as the scenario is unlikely to happen on test projects.


Transformation fails for artifact 'com.google.javascript:closure-compiler:v20211201'

Failed to transform closure-compiler-v20211201.jar (com.google.javascript:closure-compiler:v20211201) to match attributes {artifactType=jar, javaModule=true, org.gradle.category=library, org.gradle.libraryelements=jar, org.gradle.status=release, org.gradle.usage=java-runtime}. Execution failed for ExtraModuleInfoTransform: [...]/closure-compiler-v20211201.jar. java.util.zip.ZipException: duplicate entry: META-INF/MANIFEST.MF duplicate entry: META-INF/MANIFEST.MF
I assume the published jar file is corrupt, but it's still working otherwise. So it would be nice if this plugin could be a bit more lenient with such issues.

Thanks for reporting.
The Jar is corrupt, because the MANIFEST is not in the right place. As far as I know, it needs to be the first entry in the archive.
Because of that, the Manifest is not found and the plugin will create a new one. I pushed this fix to remove the "broken" Manifest completely from the transformed Jar:
https://github.com/jjohannes/extra-java-module-info/commit/ed393c4e3ce8683cb1516610368a2f3d787ac9a1#diff-876d21a05386747b140e7fe2fe699385add20f6ac3589e3f281a436c1f53d25d
Instead, the transformed Jar will contain a new Manifest in the correct position with the automatic module name entry.
Is that what you would had in mind?

Fix is published in version 0.10

@jjohannes Perfect, thanks!


refactoring the auth service

refactoring the authentication service with better coding standards

Implemented the same in my-experiments branch. Hence, closing this PR


surface: linux 6.12.6 -> 6.12.7

Description of changes
Things done

[X] Tested the changes in your own NixOS Configuration
[X] Tested the changes end-to-end by using your fork of nixos-hardware and
importing it via <nixos-hardware> or Flake input

@mergify queue


portal display for Dates is incorrect

When tapping date objects portal displays the date incorrectly.  Here are some examples:
#inst "0001" ;; => #inst "0001-01-01T00:00:00.000-00:00"
(tap> #inst "0001") ;; [portal displays]: #inst "0000-12-30T00:00:00.000Z"

#inst "1000" ;; => #inst "1000-01-01T00:00:00.000-00:00"
(tap> #inst "1000") ;; [portal displays]: #inst "1000-01-06T00:00:00.000Z"

That's actually a known (but not documented) difference between Clojure and Clojurescript date interpretation.
https://github.com/clojure/clojurescript-site/issues/367

I think for now I'll add this to the Portal documentation as a limitations.


Adding example.env

Hi, looking to contribute, but there seems to be no .env example to help me run it in local. Would you mind adding one?

@DovAzencot We have added .env.example.


Support panicking and make unsupported platforms a nop

cc https://github.com/rust-lang/rust/pull/55617#discussion_r230420175

It looks like MSVC is having trouble with the panicking code?
(MinGW on appveyor failures can probably be ignored)

I'll try to find a windows machine to debug this on

FWIW I think a git dep in rustc should be sufficient for profiling, but if you need me to publish anything here just let me know!

I've cleaned this up a bit and moved it over to https://github.com/alexcrichton/stacker/pull/11 so I'm gonna close this