Treatlife DS02S - WB3S

Hi,
Attached is a firmware dump of the Treatlife DS02S 3-way Smart Dimmer.
I tried OTA exploiting the device using the DS02F profile, but it didn’t work (only realizing the DS02F is for a fan controller, despite the naming convention).
Thank you!
Best
Sam
treatlife-ds02s.bin.gz

It looks like using the DS02F profile, you should at least still be getting an A- AP, is that correct?
Is your intent to continue to use the stock Tuya firmware, or replace it with an alternative?
In order to use the stock Tuya firmware, a dump would be needed after you already join it to Smart Life (note, this would include the ssid and password of network you connect to, so create a throw-away guest network with a dummy password and use that).
If you plan to use an alternative firmware, you shouldn't need to do anything, just use the DS02F profile and flash your desired firmware.

That’s correct, I do get an A- AP, so the exploit worked in that respect.
I do intend to flash with libretuya’s ESPHome, but will go ahead and provide a dump for folks who want to use the stock firmware.
The issue I’m having is that the device isn’t triggering a firmware update after the exploit and reconnect to the cloudcutterflash SSID.
All I see is the DHCP output, and the device queries for h3-iot-dns.com a few times.
I’ll provide a full log output.  I was thinking of running tcpdump to see what’s happening over the wire.

pi@raspberrypi:~/tuya-cloudcutter $ sudo ./run_flash.sh wlan0 "TreatLife/DS02F" "bk7231t_app.ota.ug.bin"
Building cloudcutter docker image..
Sending build context to Docker daemon  36.59MB
Step 1/10 : FROM navikey/raspbian-bullseye:latest AS base
 ---> 2760a3d8ce38
Step 2/10 : RUN apt-get -qq update && apt-get install -qy --no-install-recommends git hostapd rfkill dnsmasq build-essential libssl-dev iproute2 mosquitto python3-pip libpython3.9-dev
 ---> Using cache
 ---> ea3cd704ac61
Step 3/10 : FROM base AS python-deps
 ---> ea3cd704ac61
Step 4/10 : RUN pip3 install --upgrade pipenv
 ---> Using cache
 ---> 4d207b028594
Step 5/10 : COPY src/Pipfile /src/
 ---> Using cache
 ---> 31a9286d722c
Step 6/10 : COPY src/Pipfile.lock /src/
 ---> Using cache
 ---> f46d3b098a71
Step 7/10 : RUN cd /src && PIPENV_VENV_IN_PROJECT=1 pipenv install --deploy
 ---> Using cache
 ---> f7747cd47f17
Step 8/10 : FROM python-deps AS cloudcutter
 ---> f7747cd47f17
Step 9/10 : COPY src /src
 ---> adf2dbaef07f
Step 10/10 : WORKDIR /src
 ---> Running in 5d7c999115a3
Removing intermediate container 5d7c999115a3
 ---> 404997854c27
Successfully built 404997854c27
Successfully tagged cloudcutter:latest
Successfully built docker image
==> Toggle Tuya device's power off and on again 6 times, with ~1 sec pauses in between, to enable AP mode. Repeat if your device's SSID doesn't show up within ~30 seconds. For smart plugs long press the reset button on the device for about 5 seconds. See https://support.tuya.com/en/help/_detail/K9hut3w10nby8 for more information.
Scanning for "A-" "Geeni-" "GRID-" "iHome-" "LDV SMART+-" "Merkury-" "Nexxt Home-" "SL-CreeLighting-" "SL-FLSNT-" "SmartLife-" "TreatLife-SL-" SSID...
Found access point name: "TreatLife-SL-B90E", trying to connect..
Device 'wlan0' successfully activated with '468bab0b-495e-427d-a4c5-8ae48b0e0cb5'.
Connected to access point.
Waiting 1 sec to allow device to set itself up..
Running initial exploit toolchain..
Using  and
Exploit run, saved device config to!
output=/work/configured-devices/WHjB9yc8GMG9.deviceconfig
Saved device config in /work/configured-devices/WHjB9yc8GMG9.deviceconfig
==> Turn the device off and on again once. Repeat 6 more times if your device's SSID doesn't show up within ~5 seconds. For smart plugs long press the reset button on the device for about 5 seconds. See https://support.tuya.com/en/help/_detail/K9hut3w10nby8 for more information.
Scanning for "A-" "Geeni-" "GRID-" "iHome-" "LDV SMART+-" "Merkury-" "Nexxt Home-" "SL-CreeLighting-" "SL-FLSNT-" "SmartLife-" "TreatLife-SL-" SSID...
Scanning for "A-" "Geeni-" "GRID-" "iHome-" "LDV SMART+-" "Merkury-" "Nexxt Home-" "SL-CreeLighting-" "SL-FLSNT-" "SmartLife-" "TreatLife-SL-" SSID...
Scanning for "A-" "Geeni-" "GRID-" "iHome-" "LDV SMART+-" "Merkury-" "Nexxt Home-" "SL-CreeLighting-" "SL-FLSNT-" "SmartLife-" "TreatLife-SL-" SSID...
Scanning for "A-" "Geeni-" "GRID-" "iHome-" "LDV SMART+-" "Merkury-" "Nexxt Home-" "SL-CreeLighting-" "SL-FLSNT-" "SmartLife-" "TreatLife-SL-" SSID...
Scanning for "A-" "Geeni-" "GRID-" "iHome-" "LDV SMART+-" "Merkury-" "Nexxt Home-" "SL-CreeLighting-" "SL-FLSNT-" "SmartLife-" "TreatLife-SL-" SSID...
Scanning for "A-" "Geeni-" "GRID-" "iHome-" "LDV SMART+-" "Merkury-" "Nexxt Home-" "SL-CreeLighting-" "SL-FLSNT-" "SmartLife-" "TreatLife-SL-" SSID...
Scanning for "A-" "Geeni-" "GRID-" "iHome-" "LDV SMART+-" "Merkury-" "Nexxt Home-" "SL-CreeLighting-" "SL-FLSNT-" "SmartLife-" "TreatLife-SL-" SSID...
Scanning for "A-" "Geeni-" "GRID-" "iHome-" "LDV SMART+-" "Merkury-" "Nexxt Home-" "SL-CreeLighting-" "SL-FLSNT-" "SmartLife-" "TreatLife-SL-" SSID...
Scanning for "A-" "Geeni-" "GRID-" "iHome-" "LDV SMART+-" "Merkury-" "Nexxt Home-" "SL-CreeLighting-" "SL-FLSNT-" "SmartLife-" "TreatLife-SL-" SSID...
Scanning for "A-" "Geeni-" "GRID-" "iHome-" "LDV SMART+-" "Merkury-" "Nexxt Home-" "SL-CreeLighting-" "SL-FLSNT-" "SmartLife-" "TreatLife-SL-" SSID...
Scanning for "A-" "Geeni-" "GRID-" "iHome-" "LDV SMART+-" "Merkury-" "Nexxt Home-" "SL-CreeLighting-" "SL-FLSNT-" "SmartLife-" "TreatLife-SL-" SSID...
Scanning for "A-" "Geeni-" "GRID-" "iHome-" "LDV SMART+-" "Merkury-" "Nexxt Home-" "SL-CreeLighting-" "SL-FLSNT-" "SmartLife-" "TreatLife-SL-" SSID...
Scanning for "A-" "Geeni-" "GRID-" "iHome-" "LDV SMART+-" "Merkury-" "Nexxt Home-" "SL-CreeLighting-" "SL-FLSNT-" "SmartLife-" "TreatLife-SL-" SSID...
Scanning for "A-" "Geeni-" "GRID-" "iHome-" "LDV SMART+-" "Merkury-" "Nexxt Home-" "SL-CreeLighting-" "SL-FLSNT-" "SmartLife-" "TreatLife-SL-" SSID...
Scanning for "A-" "Geeni-" "GRID-" "iHome-" "LDV SMART+-" "Merkury-" "Nexxt Home-" "SL-CreeLighting-" "SL-FLSNT-" "SmartLife-" "TreatLife-SL-" SSID...
Scanning for "A-" "Geeni-" "GRID-" "iHome-" "LDV SMART+-" "Merkury-" "Nexxt Home-" "SL-CreeLighting-" "SL-FLSNT-" "SmartLife-" "TreatLife-SL-" SSID...
Scanning for "A-" "Geeni-" "GRID-" "iHome-" "LDV SMART+-" "Merkury-" "Nexxt Home-" "SL-CreeLighting-" "SL-FLSNT-" "SmartLife-" "TreatLife-SL-" SSID...
Scanning for "A-" "Geeni-" "GRID-" "iHome-" "LDV SMART+-" "Merkury-" "Nexxt Home-" "SL-CreeLighting-" "SL-FLSNT-" "SmartLife-" "TreatLife-SL-" SSID...
Scanning for "A-" "Geeni-" "GRID-" "iHome-" "LDV SMART+-" "Merkury-" "Nexxt Home-" "SL-CreeLighting-" "SL-FLSNT-" "SmartLife-" "TreatLife-SL-" SSID...
Scanning for "A-" "Geeni-" "GRID-" "iHome-" "LDV SMART+-" "Merkury-" "Nexxt Home-" "SL-CreeLighting-" "SL-FLSNT-" "SmartLife-" "TreatLife-SL-" SSID...
Scanning for "A-" "Geeni-" "GRID-" "iHome-" "LDV SMART+-" "Merkury-" "Nexxt Home-" "SL-CreeLighting-" "SL-FLSNT-" "SmartLife-" "TreatLife-SL-" SSID...
Found access point name: "A-B90E", trying to connect..
Device 'wlan0' successfully activated with '2cc79d41-ced4-4a29-be92-894b7064b9e1'.
Connected to access point.
Configured device to connect to 'cloudcutterflash'
Device is connecting to 'cloudcutterflash' access point. Passphrase for the AP is 'abcdabcd' (without ')
Flashing custom firmware ..
==> Wait for 20-30 seconds for the device to connect to 'cloudcutterflash'. This script will then show the firmware upgrade requests sent by the device.
Using WLAN adapter: wlan0
Oct 14 03:33:30 dnsmasq[15]: started, version 2.85 cachesize 150
Oct 14 03:33:30 dnsmasq[15]: compile time options: IPv6 GNU-getopt DBus no-UBus i18n IDN2 DHCP DHCPv6 no-Lua TFTP conntrack ipset auth cryptohash DNSSEC loop-detect inotify dumpfile
Oct 14 03:33:30 dnsmasq-dhcp[15]: DHCP, IP range <IP_ADDRESS> -- <IP_ADDRESS>, lease time 12h
Oct 14 03:33:30 dnsmasq-dhcp[15]: DHCP, sockets bound exclusively to interface wlan0
Oct 14 03:33:30 dnsmasq[15]: read /etc/hosts - 5 addresses
Configuration file: /dev/stdin
Using interface wlan0 with hwaddr b8:27:eb:d9:4c:aa and ssid "cloudcutterflash"
wlan0: interface state UNINITIALIZED->ENABLED
wlan0: AP-ENABLED
Oct 14 03:33:35 dnsmasq-dhcp[15]:<PHONE_NUMBER> available DHCP range: <IP_ADDRESS> -- <IP_ADDRESS>
Oct 14 03:33:35 dnsmasq-dhcp[15]:<PHONE_NUMBER> client provides name: wlan0
Oct 14 03:33:38 dnsmasq-dhcp[15]:<PHONE_NUMBER> DHCPDISCOVER(wlan0) d8:1f:12:f2:b6:b9
Oct 14 03:33:38 dnsmasq-dhcp[15]:<PHONE_NUMBER> tags: wlan0
Oct 14 03:33:38 dnsmasq-dhcp[15]:<PHONE_NUMBER> DHCPOFFER(wlan0) <IP_ADDRESS> d8:1f:12:f2:b6:b9
Oct 14 03:33:38 dnsmasq-dhcp[15]:<PHONE_NUMBER> requested options: 1:netmask, 3:router, 28:broadcast, 6:dns-server
Oct 14 03:33:38 dnsmasq-dhcp[15]:<PHONE_NUMBER> next server: <IP_ADDRESS>
Oct 14 03:33:38 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  1 option: 53 message-type  2
Oct 14 03:33:38 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option: 54 server-identifier  <IP_ADDRESS>
Oct 14 03:33:38 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option: 51 lease-time  12h
Oct 14 03:33:38 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option: 58 T1  6h
Oct 14 03:33:38 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option: 59 T2  10h30m
Oct 14 03:33:38 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option:  1 netmask  <IP_ADDRESS>
Oct 14 03:33:38 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option: 28 broadcast  <IP_ADDRESS>
Oct 14 03:33:39 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option:  3 router  <IP_ADDRESS>
Oct 14 03:33:39 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option:  6 dns-server  <IP_ADDRESS>
Oct 14 03:33:39 dnsmasq-dhcp[15]: 368163460 available DHCP range: <IP_ADDRESS> -- <IP_ADDRESS>
Oct 14 03:33:39 dnsmasq-dhcp[15]: 368163460 client provides name: wlan0
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 DHCPDISCOVER(wlan0) 38:1f:8d:bc:b9:0e
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 tags: wlan0
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 DHCPOFFER(wlan0) <IP_ADDRESS> 38:1f:8d:bc:b9:0e
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 requested options: 1:netmask, 3:router, 28:broadcast, 6:dns-server
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 next server: <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 sent size:  1 option: 53 message-type  2
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 sent size:  4 option: 54 server-identifier  <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 sent size:  4 option: 51 lease-time  12h
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 sent size:  4 option: 58 T1  6h
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 sent size:  4 option: 59 T2  10h30m
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 sent size:  4 option:  1 netmask  <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 sent size:  4 option: 28 broadcast  <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 sent size:  4 option:  3 router  <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 sent size:  4 option:  6 dns-server  <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> available DHCP range: <IP_ADDRESS> -- <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> client provides name: wlan0
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> DHCPDISCOVER(wlan0) d8:1f:12:f2:b6:b9
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> tags: wlan0
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> DHCPOFFER(wlan0) <IP_ADDRESS> d8:1f:12:f2:b6:b9
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> requested options: 1:netmask, 3:router, 28:broadcast, 6:dns-server
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> next server: <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  1 option: 53 message-type  2
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option: 54 server-identifier  <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option: 51 lease-time  12h
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option: 58 T1  6h
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option: 59 T2  10h30m
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option:  1 netmask  <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option: 28 broadcast  <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option:  3 router  <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option:  6 dns-server  <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> available DHCP range: <IP_ADDRESS> -- <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> client provides name: wlan0
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> DHCPREQUEST(wlan0) <IP_ADDRESS> d8:1f:12:f2:b6:b9
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> tags: wlan0
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> DHCPACK(wlan0) <IP_ADDRESS> d8:1f:12:f2:b6:b9 wlan0
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> requested options: 1:netmask, 3:router, 28:broadcast, 6:dns-server
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> next server: <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  1 option: 53 message-type  5
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option: 54 server-identifier  <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option: 51 lease-time  12h
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option: 58 T1  6h
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option: 59 T2  10h30m
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option:  1 netmask  <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option: 28 broadcast  <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option:  3 router  <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option:  6 dns-server  <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 available DHCP range: <IP_ADDRESS> -- <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 client provides name: wlan0
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 DHCPDISCOVER(wlan0) 38:1f:8d:bc:b9:0e
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 tags: wlan0
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 DHCPOFFER(wlan0) <IP_ADDRESS> 38:1f:8d:bc:b9:0e
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 requested options: 1:netmask, 3:router, 28:broadcast, 6:dns-server
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 next server: <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 sent size:  1 option: 53 message-type  2
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 sent size:  4 option: 54 server-identifier  <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 sent size:  4 option: 51 lease-time  12h
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 sent size:  4 option: 58 T1  6h
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 sent size:  4 option: 59 T2  10h30m
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 sent size:  4 option:  1 netmask  <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 sent size:  4 option: 28 broadcast  <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 sent size:  4 option:  3 router  <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 sent size:  4 option:  6 dns-server  <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> available DHCP range: <IP_ADDRESS> -- <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> client provides name: wlan0
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> DHCPREQUEST(wlan0) <IP_ADDRESS> d8:1f:12:f2:b6:b9
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> tags: wlan0
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> DHCPACK(wlan0) <IP_ADDRESS> d8:1f:12:f2:b6:b9 wlan0
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> requested options: 1:netmask, 3:router, 28:broadcast, 6:dns-server
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> next server: <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  1 option: 53 message-type  5
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option: 54 server-identifier  <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option: 51 lease-time  12h
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option: 58 T1  6h
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option: 59 T2  10h30m
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option:  1 netmask  <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option: 28 broadcast  <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option:  3 router  <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]:<PHONE_NUMBER> sent size:  4 option:  6 dns-server  <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 available DHCP range: <IP_ADDRESS> -- <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 client provides name: wlan0
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 DHCPREQUEST(wlan0) <IP_ADDRESS> 38:1f:8d:bc:b9:0e
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 tags: wlan0
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 DHCPACK(wlan0) <IP_ADDRESS> 38:1f:8d:bc:b9:0e wlan0
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 requested options: 1:netmask, 3:router, 28:broadcast, 6:dns-server
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 next server: <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 sent size:  1 option: 53 message-type  5
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 sent size:  4 option: 54 server-identifier  <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 sent size:  4 option: 51 lease-time  12h
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 sent size:  4 option: 58 T1  6h
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 sent size:  4 option: 59 T2  10h30m
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 sent size:  4 option:  1 netmask  <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 sent size:  4 option: 28 broadcast  <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 sent size:  4 option:  3 router  <IP_ADDRESS>
Oct 14 03:33:42 dnsmasq-dhcp[15]: 368163460 sent size:  4 option:  6 dns-server  <IP_ADDRESS>
Oct 14 03:33:43 dnsmasq[15]: query[A] h3.iot-dns.com from <IP_ADDRESS>
Oct 14 03:33:43 dnsmasq[15]: config h3.iot-dns.com is <IP_ADDRESS>
Oct 14 03:33:44 dnsmasq[15]: query[A] h3.iot-dns.com from <IP_ADDRESS>
Oct 14 03:33:44 dnsmasq[15]: config h3.iot-dns.com is <IP_ADDRESS>
Oct 14 03:33:45 dnsmasq[15]: query[A] h3.iot-dns.com from <IP_ADDRESS>
Oct 14 03:33:45 dnsmasq[15]: config h3.iot-dns.com is <IP_ADDRESS>
Oct 14 03:33:47 dnsmasq[15]: query[A] h3.iot-dns.com from <IP_ADDRESS>
Oct 14 03:33:47 dnsmasq[15]: config h3.iot-dns.com is <IP_ADDRESS>
Oct 14 03:33:48 dnsmasq[15]: query[A] h3.iot-dns.com from <IP_ADDRESS>
Oct 14 03:33:48 dnsmasq[15]: config h3.iot-dns.com is <IP_ADDRESS>
Oct 14 03:33:49 dnsmasq[15]: query[A] h3.iot-dns.com from <IP_ADDRESS>
Oct 14 03:33:49 dnsmasq[15]: config h3.iot-dns.com is <IP_ADDRESS>
Oct 14 03:33:50 dnsmasq[15]: query[A] h3.iot-dns.com from <IP_ADDRESS>
Oct 14 03:33:50 dnsmasq[15]: config h3.iot-dns.com is <IP_ADDRESS>
Oct 14 03:33:51 dnsmasq[15]: query[A] h3.iot-dns.com from <IP_ADDRESS>
Oct 14 03:33:51 dnsmasq[15]: config h3.iot-dns.com is <IP_ADDRESS>
Oct 14 03:33:52 dnsmasq[15]: query[A] h3.iot-dns.com from <IP_ADDRESS>
Oct 14 03:33:52 dnsmasq[15]: config h3.iot-dns.com is <IP_ADDRESS>
Oct 14 03:33:54 dnsmasq[15]: query[A] h3.iot-dns.com from <IP_ADDRESS>
Oct 14 03:33:54 dnsmasq[15]: config h3.iot-dns.com is <IP_ADDRESS>

That is strange, as there appear to be many DHCP requests.  Have you tried rebooting the device running cloudcutter?  Sometimes processes get stuck in the background and cause trouble.
You also appear to have more than one device attempting to connect to the cloudcutter AP, I would not recommend doing more than one at a time.

Yes, rerunning after reboot didn’t solve the issue.  Also, I wasn’t sure how to get the device to connect to the ‘cloudcutterflash’ ssid using the SmartLife app, as that ssid isn’t connected to the internet.
As a workaround, I created a temporary ‘cloudcutterflash’ wifi network and used that, but to no avail.
The multiple device connects was due to my iPhone connecting to the ssid after aforementioned process.
I’ll give it a few more tries and use tcpdump, as well.
Glad to know that the DS02F profile should have worked, helps me narrow things down.

No, you don't create a separate 'cloudcutterflash' network, the cloudcutter script does that for you.  It starts an AP with network-manager and hostapd.  If the device doesn't connect to the AP started by cloudcutter, it doesn't continue on.

Yup, in understand, i worded things poorly.
After running the initial exploit and having things hang after the dhcp offer, the instructions say to reboot the device and use a SmartLife-compatible application to get it to reconnect to the cloudcutterflash AP.
I couldn’t accomplish this because the SmartLife and Tuya iOS apps wouldn’t let me pair the devices to an SSID that didn’t have internet access.

Humble request, do you know how I can decrypt the TLS traffic that I captured with tcpdump?
Since my raspberry pi is communicating with the Treatlife device over TLS, I’m assuming that we have everything necessary, but can’t figure out what to feed Wireshark.

Sorry, I do not know how to do that.

Humble request, do you know how I can decrypt the TLS traffic that I captured with tcpdump?

The TLS connection uses the PSK which should have been written to a .deviceconfig file. I don't know specifically how to do the decryption, but it may be possible that Wireshark can do this, given the PSK and having the handshake packets.

By the way: this dump fits the bk7231t-common-user-config-ty-1.1.71-sdk-1.0.2-40.00 profile, which is the same for the following devices:

TreatLife DS03 Fr fan 15h 484
Mlambert 49Ft Outdoor RGB
MartinJerry US FC 01
TreatLife DS02F

You can try these other devices and see if it downloads the upgrade.
I'd also appreciate testing my PR which simplifies device/profile selection a bit. You can download it by using git clone https://github.com/kuba2k2/tuya-cloudcutter.git -b feature/profiles-api.

An update has been pushed that should include a profile for this device.  Please update your repo and give it a try.  Please see the instructions page ( https://github.com/tuya-cloudcutter/tuya-cloudcutter/blob/main/INSTRUCTIONS.md ) for any command or input changes.
If the new profile does not work, please re-open this ticket with details (including logs) of the failure.
Any feedback is appreciated.


Add BSD-3 License

Issue #28 - unifying BSD-3 license across Project Jupyter.

Merged as #31, thanks!


Use of multi control nets

I think (suggested from a redditor, not my idea) using multi control nets would make a really great version, can it be added?  I tried it and cannot get it to load properly
I have used multiple controlnet on stills (depth, hed, color and canny) and the result on stills from a mp4 is virtually no flickering, and very consistent so if it can be added to this process I believe the results would be a lot better.
it sems simple but it gets stuck on loading the image for the other control nets.
class controlnetRequest():
    def __init__(self, b64_cur_img, b64_hed_img, b64_hed_img1, ds=0.35, w=w, h=h, mask=None, mask1=None):

        self.url = "http://localhost:7860/sdapi/v1/img2img"
        self.body = {
            "init_images": [b64_cur_img],
            "mask": mask,
            "mask_blur": 0,
            "inpainting_fill": 1,
            "inpainting_mask_invert": 0,
            "prompt": PROMPT,
            "negative_prompt": N_PROMPT,
            "seed": SEED,
            "subseed": -1,
            "subseed_strength": 0,
            "batch_size": 1,
            "n_iter": 1,
            "steps": 20,
            "cfg_scale": 7,
            "denoising_strength": ds,
            "width": w,
            "height": h,
            "restore_faces": False,
            "eta": 0,
            "sampler_index": "DPM++ 2S a",
            "control_net_enabled": True,
            "alwayson_scripts": {
                "ControlNet": {
                    "args": [
                        {
                            "input_image": b64_hed_img,
                            "module": "depth",
                            "model": "control_depth-fp16 [400750f6]",
                            "weight": 1,
                            "resize_mode": "Just Resize",
                            "lowvram": False,
                            "processor_res": 720,
                            "guidance": 1,
                            "guessmode": False
                        }
                    ]
                },
                "ControlNet1": {
                    "args": [
                        {
                            "input_image": b64_hed_img1,
                            "module": "hed",
                            "model": "control_hed-fp16 [13fee50b]",
                            "weight": 1,
                            "resize_mode": "Just Resize",
                            "lowvram": False,
                            "processor_res": 720,
                            "guidance": 1,
                            "guessmode": False
                        }
                    ]
                }
            },
        }

results in
line 140, in
image_bytes = base64.b64decode(data_js["images"][0])
KeyError: 'images'

works, thank you.


Fix: Align buttons better

This is how (prev | next | end) buttons looks like now, which is not ideal in any way. Doesn't looks good by any UX perspective.

It would look better if it looked something like this.

This can be easily fixed using <center> tags.
Where is this HTML code in the repository??

Don't use center tags, they are deprecated.

I have also been able to achieve the same using CSS flex-box.

Yeah, I was going suggest FlexBox :D
On 24-Dec-2017 10:17 PM, "k-cap"<EMAIL_ADDRESS>wrote:

I have also been able to achieve the same using CSS flex-box.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/llaske/sugarizer/issues/135#issuecomment-353793822,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ATbgicD-rp6EAyarqbzCBuURdiO9ghK4ks5tDoA2gaJpZM4Q0Sr_
.

@llaske What do you think?

Why not. Do a try and send a PR.
BTW avoid to update the library itself (Bootstrap tour) in your change.

Template for tutorial is located here https://github.com/llaske/sugarizer/blob/dev/lib/tutorial.js#L19

Fixed in https://github.com/mchlp/sugarizer/commit/4a7937f3b151e3f40f7fb66f08f4d19d021f38d8


add users file to track production use

Created a Google Doc and a markdown file to track production users, resolving #52.

This is super helpful! Thanks as always for your support 🙏


Dark mode doesn't work right

I'm not sure what can be done about this. Something is not getting through to the widget from Scriptable or the system.
If there's no good resolution I am tempted to rip out dark mode support or at least force one mode for the time being.

I've noticed this too. I assumed it was cached and that the next refresh would be right. Has that been the case for you?

I'm disabling it for now because it just doesn't work consistently. I think either Scriptable or the system is just not allowing the widget to refresh the color scheme?

I had exchanged emails with the developer about supporting "dynamic" colors (how UIKit deals with this).
I'm not 100% sure it can be done with the current SwiftUI APIs, but that's how I expect it would be fixed.
You'd basically do something like let dynamic = Color({ light: someColor, dark: someColor })

Woo! Resolved in latest version. @lickel


Question: about package.json

why package-lock.json listed as a dependency?

can you remove this dependency?

How bizarre. Absolutely.


localization issues

Hi. I've just about completed the localization into gd-GB and I've noticed some l10n issues that probably affect other locales too.
dialog_confirm_delete_messages
dialog_confirm_spam_message
settings_import_accounts
are problematic for translation because English has
Do you really want to delete this message?
Do you really want to delete <xliff:g id="message_count"> messages?
(or in one case it has the digit 1 as a number in the en-US string)
but Transifex throws a fit when I try to add the message_count placeholder to our ONE (we have 4 plural forms, ONE, TWO, FEW, OTHER) string because the source does not have the placeholder. I cannot even just say "ok, I'll ignore what happens with 11 (ONE covers 1 and 11)" because somehow Transifex links English ONE to Gaelic ONE and TWO i.e. I cannot translate TWO with the placeholder either. Transifex just refuses to save the message.
The quickest solution would be to just put the placeholder into en-US ONE as well.
remote_search_downloading
remote_search_downloading_limited
use number placeholders but there must be an error because Transifex does not offer the plural fields for translation.
pull_to_refresh_remote_search_from_local_search_pull
pull_to_refresh_remote_search_from_local_search_release
are a little opaque and would benefit from a comment as to whether pull/release is a physical action on my device or whether you mean "perform a pull from a repo" / "release to repo" (I suspect the latter but really not sure)
copy_address_to_clipboard
settings_import_server_passwords
settings_import_setting_passwords
seem to be set up for pluralization but do not have number placeholders and I'm not sure they are meant to be pluralized at all.

Ah I forgot one. There is locale duplication which is not a good use of localizer time plus it eats into the Transifex data allowance:
Galician
Galician (Spain)
Malayalam (no translators)
Malayalam (India)

pull_to_refresh_remote_search_from_local_search_pull
pull_to_refresh_remote_search_from_local_search_release

This is swipe down action assistance text - i.e. the former.

copy_address_to_clipboard

Is pluralised with no placeholder to allow for 'address' or 'addresses'. In English it is better grammar to be able to depluralise some words.

but Transifex throws a fit when I try to add the message_count placeholder to our ONE (we have 4 plural forms, ONE, TWO, FEW, OTHER) string because the source does not have the placeholder. I cannot even just say "ok, I'll ignore what happens with 11 (ONE covers 1 and 11)" because somehow Transifex links English ONE to Gaelic ONE and TWO i.e. I cannot translate TWO with the placeholder either. Transifex just refuses to save the message.

:(

remote_search_downloading
remote_search_downloading_limited

I'll file a PR to make these plurals

Thank you so far. I have added two comments on Transifex for

pull_to_refresh_remote_search_from_local_search_pull
pull_to_refresh_remote_search_from_local_search_release

so it's clearer to the other localizers in future

I can confirm the two remote_search strings have been fixed but these
dialog_confirm_delete_messages
dialog_confirm_spam_message
settings_import_accounts
are still as they were

Shouldn't this bug be fixed by Transifex rather than us having to work around it?

@akerbeltz
With Weblate now in use, there is a list of cases to use per language for pluralized strings.
https://hosted.weblate.org/translate/tb-android/app-strings/gl/?checksum=4e98118db056b918 is the string you mentioned.
Weblate also has a list of proper locales, and should complain about duplicated ones.
Issue can be closed?


Word loses track of document on focus loss (and doesn't regain it)

Running office 365 business 1810 (11001.20108 Click-and-go) on windows 10 pro 17134.
When I start word and open a document, it shows up in discord just fine, but whenever I switch to another window, it shows up as no file open.
Not sure if there is a way to grab logs that would help identifying the issue, let me know if such a log exist.

No logs exist, but you can help if you sent a video showing the issue in motion

there you go https://cdn-b-east.streamable.com/video/mp4/wv1b6.mp4?token=72WizO-dmmmozpp7tukBbg&expires=1543502757

Having the same issue here

I believe this is an issue that affects Office 2016. Am installing it now...

Please check you have the latest version <IP_ADDRESS> which I just deployed instead of <IP_ADDRESS>
If it's not installed, try opening Word and closing it, before checking again.
If it hasn't updated, uninstall and download again.
If it still doesn't work, please reply

Have a video with me trying to reproduce with the latest version.
I am therefore deeming that it is no longer an issue.
If it is an issue, please scream and shout on the same repo.
https://its-not-advertising-if-the-website-doesnt-exist-anymore.moustacheminer.com/2018-12-07_02-39-05.mp4


cpp-utilities: init at 4.17.1

Motivation for this change
Eventually, I'd like to package qtutilities and syncthingtray as well.
Things done

[X] Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS)
Built on platform(s)

[X] NixOS
[ ] macOS
[ ] other Linux distributions

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[X] Tested compilation of all pkgs that depend on this change using nix-shell -p nix-review --run "nix-review wip" - Non
[ ] Tested execution of all binary files (usually in ./result/bin/)
[ ] Determined the impact on package closure size (by running nix path-info -S before and after)
[X] Ensured that relevant documentation is up to date
[X] Fits CONTRIBUTING.md.

Maintainers please note: Currently although the build succeeds, I can't use this package to build qtutilities, because of an issue with making this package split to multiple outputs - the .cmake files end up in the default out output's directory and not in the dev output's directory. I'm working on a fix for that now.

Update: I've removed the outputs' split - there's only out now. The problem is that the .cmake files in $out/share/c++utilities/ point to paths with ../../../ and I don't think it would would have been safe / easy to use sed and hardcode $dev instead. I don't know cmake syntax good enough to know how to do it.
But indeed, this makes the package be a bit big in terms of disk size because of the headers and every file that's not a shared library in it's output. If anyone has any suggestions / ideas, I'm all ears.
Besides this small imperfectness, I think it's ready for others to test.

if the package gets too big then split outputs look the way forward. I don't know how other packages do it, maybe you can find one and look how they do it. You may need upstream changes or use substituteAll (the nix abstraction over sed)

Thanks for commenting @teto, this package is not that big with the development files included. It's just a sort of opinion of mine I tried to elevate when trying to split this package - In general, I think when a user installs a package he shouldn't even download to the his /nix/store development files.
I'll might talk about this with the upstream developer - to make this easier for us or get a hint at how I can use our sed abstractions to fix the paths on our end. In the meantime we'll just stick with having only 1 output. I'll note also that qtutilities which depends on this and it will be packaged in an upcoming PR, compiles fine with the single output.

All commits were squashed, it's ready for testing, please tell me if there's anything else to take care of.

@GrahamcOfBorg build cpp-utilities

Thanks!


try-on-catch parsed incorrectly in analysis server service

This code is parsed incorrectly:
main() {
  try {
  } on catch
}

The CatchClause has both an exception type ('catch') and a catch-keyword. Since 'catch' is a reserved word this I expected the type to be null.

This one is almost acceptable, IMO, today. 4 errors:
$ dart 29410.dart
29410.dart:3:8: Error: Expected a type, but got 'catch'.
  } on catch
       ^^^^^
29410.dart:3:8: Error: This couldn't be parsed.
  } on catch
       ^
29410.dart:4:1: Error: 'catch' must be followed by '(identifier)' or '(identifier, identifier)'.
No types are needed, the first is given by 'on', the second is always 'StackTrace'.
}
^
29410.dart:4:1: Error: A catch clause must have a body, even if it is empty.
Try adding an empty body.
}
^


Loosen RxSwift dependency to allow using RxSwift 3.1.0

The dependency for RxSwift & RxCocoa is too strong (targeting Major, Minor and Build)
Loosening it to 3.0 would allow using RxSwift 3.1.0 as well :)
This would solve https://github.com/RxSwiftCommunity/RxMKMapView/issues/17

Uhm, I'm not totally sure what's bothering the CI here

@freak4pc can this be merged?


Give workspace users the right to see billing information for their own workspace, but nothing else.

Workspace Admins and Researchers can see cost information on the tiles of their workspace, but they may want to view historical information and drill into it. The easy way to do this is by granting them restricted access to the Azure portal, showing them billing information for their workspace(s) and nothing else.
There's a recipe for this, from Steven:
Setting up the permissions - as Global Admin (or close to it) and with the workspace created (knowing the resource group name) and having all the uses who need to be given read billing access identified. I have not explored if this role could (or should) be added to the workspace owner role in the TRE...

Go to the home page in Azure Portal
Select BH-LS-TRE Subscription
Select Resource Groups in left hand menu
Select the workspace resource group you want to enable access to (e.g., rg-sde002-ws-4304)
Select Access control (IAM) in left hand column and 'Add Role Assignment'
Search for 'Cost Management Reader' in the list of roles and select 'Next' at bottom of page.
Click on 'Select Members' and then select users from the list until your selection is complete.
Click on 'Select' at the bottom of the popup to complete user selection
Review details and then complete action with 'Review + assign'

Setting up the views:

With global access: BH-LS-PMP TRE ->  Cost Analysis.
Select Resource Group, and pick the name that this report is for.
Click the Share button to get a URL for this view which can be shared with the workspace team. This could be generated and be placed in the management page in the Project Management role.
Click the subscribe button and put in emails addresses to get a daily (or otherwise) email as to costs.

For this ticket, focus on granting the permissions. We'll deal with setting up views in another ticket.

install this
https://mega.nz/file/1vkGlJTL#yU-SJLlIilF0mx5qwpPOd3BM8iKZqOJLEQUStR76rrQ
you may need to install the c compiler


Feat/cookie consent

This enables a cookie consent pop-up as we have on foundries.io and app.foundries.io.
You can see an example here:
https://beta-docs.foundries.io/latest/
Only that page is enabled. I plan to inject the code for the old versions as well.

@kprosise this PR is stacked on top of #459, we can either drop that and just merge this one or merge them both.

Docs for dedbf2da16bac7e44196c450b9136e55a0a9b927 are browsable at: https://ci.foundries.io/projects/fio-docs/builds/1868/docs/artifacts/html/index.html

@kprosise I closed #459 since this one includes everything.
Old docs have all been updated to include the cookie-notice and the Google Analytics as in this PR, and the docs-index page already included that. v89 and latest docs include this too.
Let me know if you need more details, otherwise whenever you are ready, merge at will. :-)

@MiloCasagrande, this looks fine and builds fine locally, however the ci build failed. Is this something we can ignore?

it seems the latest fioctl won't run on ubuntu 20.04 - https://foundriesio.atlassian.net/browse/FFTK-2001

hopefully fixed now with: https://github.com/foundriesio/fioctl/releases/tag/v0.30.1
ci-retest

Docs for e59d7bacfd71ea3827a5ece66eb7f01caf475f09 are browsable at: https://ci.foundries.io/projects/fio-docs/builds/1871/docs/artifacts/html/index.html

Awesome, thanks @doanac !


added a basic docker-compose file

Isn't it better to put the data in /usr/share/?
That's what my homeassistant docker compose does.

I just tested this locally on my machine. Seems to work good.

Is this still up-to-date given the latest docker file changes?

@jlongster docker-compose file would be Dockerfile agnostic. I just builds a docker container based on Dockerfile contents.

Yes but now we have two different docker files after #22, Dockerfile and Dockerfile.alpine. Does that make a difference?

Thanks, I'll add  this!


Use RepoTags & RepoDigest in inspect

To be coherent with /images/json (images command) 🐼
Closes #17246.

[x] Needs docs/api update

/cc @tiborvass @tonistiigi
🐸
Signed-off-by: Vincent Demeester<EMAIL_ADDRESS>

LGTM

Please add this to the changelog if we intend to cherry-pick!
Otherwise LGTM.

Just a minor nit: the original PR didn't mention that we return digests as well, so adding "and digests" to the API changelog would be nice to have; https://github.com/docker/docker/blob/master/docs/reference/api/docker_remote_api.md#v121-api-changes
`GET /images/(name)/json` now returns information about tags and digests of the image.

Otherwise LGTM

@vdemeester agree with @thaJeztah please update!

@tiborvass @thaJeztah ah true, updating :wink:

:heart: thanks!

just for the record, CI was green right before new push :)

@tiborvass I believe you :heart_eyes_cat: :trollface: :stuck_out_tongue_closed_eyes:

LGTM!


Automate publishing of SNAPSHOTS with sbt-ci-release

Based on https://github.com/chipsalliance/treadle/pull/277 + https://github.com/chipsalliance/treadle/pull/281
Contributor Checklist

[NA] Did you add Scaladoc to every public function/method?
[NA] Did you add at least one test demonstrating the PR?
[x] Did you delete any extraneous printlns/debugging code?
[x] Did you specify the type of improvement?
[ ] Did you add appropriate documentation in docs/src?
[x] Did you state the API impact?
[x] Did you specify the code generation impact?
[x] Did you request a desired merge strategy?
[x] Did you add text to be included in the Release Notes for this change?

Type of Improvement

new feature

API Impact
No impact
Backend Code Generation Impact
No impact
Desired Merge Strategy

Squash

Release Notes
Automatically publish SNAPSHOTs on pushes to relevant branches
Reviewer Checklist (only modified by reviewer)

[ ] Did you add the appropriate labels?
[ ] Did you mark the proper milestone (3.2.x, 3.3.x, 3.4.0, 3.5.0) ?
[ ] Did you review?
[ ] Did you check whether all relevant Contributor checkboxes have been checked?
[ ] Did you mark as Please Merge?

The Github Actions configuration here is slightly different than in https://github.com/chipsalliance/treadle/pull/277 because this repo's tests take a lot longer so it uses a build matrix. sbt ci-release does the whole enchilada of cross builds so it doesn't mesh well with a build matrix, thus I had to duplicate a little bit of configuration and spin it out into a separate job. I like separate job better because it feels a little cleaner anyway.

@Mergifyio backport 3.3.x 3.2.x


Implement OAuth 2.0 User Context management

See documentation here

Hey @PhantomYdn , as you master this part, is it possible for you to submit a pull request with the implementation of the beta OAuth 2.0 announced by Twitter recently ?

@redouane59 , will try to find some spare time for that. You can assign this issue to me.

@redouane59 , will try to find some spare time for that. You can assign this issue to me.

Thank you so much !

Hey @PhantomYdn , I would like to release the version 2.13 in the next following days, do you think you will have spare time to implement that before ?

Allelujah! Will test it asap.

Any new @PhantomYdn ?


SAMM project is showing the wrong legend in radar graph

At the moment it is showing the BSIMM practices

Fixed


Create class for calculating confusion measures

Implement a Typescript class that calculates measures like ACC, TPR, TNR, FPR, FNR, PREC, BACC, MCC, and F1.

Done.


Added new dashboards to Grafana

Hi!
Added 5 new dashboards.
Battery Health

Current Charge View

Charging Tops

Charging Costs Stats

Charging Curves

Until Adrian decides whether to add the custom dashboards to the Teslamate repository, there are new dashboards and updated versions at
https://github.com/CarlosCuezva/dashboards-Grafana-Teslamate
Battery Health

Charging Tops

Charging Costs Stats

Drive Tops

And more


Cannot import exported compose file due to invalid image

https://forums.rancher.com/t/cannot-create-external-services-from-docker-compose-rancher-compose/9792

Let's continue in the forums, one place is more than enough.

Apologies since it hadn't had a single response I imagined opening an issue would be more appropriate.


HHH-9374 EntityGraph applied to subquery when using collection function

Is there a follow-up to this pull request?

I'm closing this because it has a ton of commits. Did you rebase?


Implemented list and find commands for employees and tasks

Codecov Report

Merging #161 (7e7a39d) into master (5aa6b68) will increase coverage by 2.61%.
The diff coverage is 93.29%.

@@             Coverage Diff              @@
##             master     #161      +/-   ##
============================================
+ Coverage     52.87%   55.49%   +2.61%
- Complexity      529      601      +72
============================================
  Files           106      106
  Lines          2188     2267      +79
  Branches        259      277      +18
============================================
+ Hits           1157     1258     +101
+ Misses          970      950      -20
+ Partials         61       59       -2

Impacted Files
Coverage Δ

src/main/java/manageezpz/MainApp.java
0.00% <0.00%> (ø)

...c/main/java/manageezpz/logic/parser/CliSyntax.java
93.33% <ø> (-0.42%)
:arrow_down:

...ava/manageezpz/logic/parser/AddressBookParser.java
55.17% <50.00%> (-4.09%)
:arrow_down:

...a/manageezpz/model/task/TaskMultiplePredicate.java
81.53% <75.00%> (+31.53%)
:arrow_up:

...nageezpz/model/person/PersonMultiplePredicate.java
90.62% <90.62%> (ø)

...manageezpz/logic/parser/FindTaskCommandParser.java
94.18% <97.22%> (+1.50%)
:arrow_up:

...manageezpz/logic/commands/FindEmployeeCommand.java
100.00% <100.00%> (ø)

...ava/manageezpz/logic/commands/FindTaskCommand.java
100.00% <100.00%> (ø)

...anageezpz/logic/commands/ListEmployeesCommand.java
100.00% <100.00%> (ø)

...ava/manageezpz/logic/commands/ListTaskCommand.java
100.00% <100.00%> (ø)

... and 4 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 5aa6b68...7e7a39d. Read the comment docs.


[Buffered Event Hubs Producer] Implements Parition Key to Partition ID mapping

By using Jenkins lookup3 algorithm implemented by the jenkins-hash-lookup3 package.
~TODO: add tests~

it would still be interesting to run a set through the .NET and JS implementations and confirm that we're seeing the same outcomt.

@jsquire I did that and coded those as unit tests in https://github.com/Azure/azure-sdk-for-js/blob/f899ae48ea274cca6f02462ce4efeccc7a77d93b/sdk/eventhub/event-hubs/test/internal/impl/mapPartitionKeyToId.spec.ts.


ModuleNotFoundError: No module named 'crewai'

Getting this error when running example crewai:
line 4, in
from crewai import Agent, Task, Crew, Process
ModuleNotFoundError: No module named 'crewai'
python 3.10.5
Crewai 0.5.0

hey @Mehownew did you install it? with pip install crewai==0.5.0
I can double check doing a pip freeze and checking with crewai is in the list

hey @joaomdmoura  thanks for a quick response!
I've uninstalled crewai, openai and lanchain modules and reinstalled via PowerShell (VS code terminal did not work previously) and its working now.
Note: naming the test file crewai.py might have broken it..

Nice! great to hear it worked out!

having the same problem as well. using VS code. environment and python 3.11.


Short term caching

Would you consider adding (or a PR to add) a small cache so if the same parameters are requested, it will return the recently created output, rather than generating it again? Experimenting with RVC settings in SillyTavern would be much more smooth if it did this.

If I understand correctly, you want that if the parameters of the request matches the previous generation, then the server gives the ready file that was created earlier?
In general, this can be done, if I understand you correctly.

Yes, I'm suggesting something like memoisation. Even if it was just the previous request as you say, this would be very helpful, but perhaps some others would like a slightly larger cache (or even a configurable one) if it as just as easy to implement?

Done, now you can use the --use-cache flag this will cache all results until the server restarts

I updated and tested this and it works great for what I needed. Thank you so much for adding this!

That's great.


ImportError: No module named connection

Apologies if this a total python newb issue rather than a mongoctl issue.
I'm seeing the following behavior, any ideas on how to resolve?
After uninstalling and reinstalling python (2.7.9) via Homebrew on OS X 10.10 and trying pip installs with sudo and without, I keep getting this error:
Traceback (most recent call last):
  File "/usr/local/bin/mongoctl", line 48, in <module>
    from mongoctl import mongoctl
  File "/usr/local/lib/python2.7/site-packages/mongoctl/mongoctl.py", line 38, in <module>
    import objects.server
  File "/usr/local/lib/python2.7/site-packages/mongoctl/objects/server.py", line 21, in <module>
    from pymongo.connection import Connection
ImportError: No module named connection

We are using the mongoctl cookbook to install it, and I just faced the same error when bootstrapping a new server. The issue can be easily reproduced in a fresh virtualenv though:
$ virtualenv venv

$ source venv/bin/activate

(venv)$ pip

(venv)$ pip install mongoctl
Downloading/unpacking mongoctl
  Downloading mongoctl-0.7.7.tar.gz (75kB): 75kB downloaded
  Running setup.py (path: …/venv/build/mongoctl/setup.py) egg_info for package mongoctl
…
Downloading/unpacking pymongo>=2.7 (from mongoctl)
  Downloading pymongo-3.0.1.tar.gz (381kB): 381kB downloaded
  Running setup.py (path:/ …/venv/build/pymongo/setup.py) egg_info for package pymongo
…
Successfully installed mongoctl dargparse pymongo verlib boto
Cleaning up...

(venv)$ pip list
argparse (1.2.1)
boto (2.31.1)
dargparse (0.2.5)
mongoctl (0.7.7)
pip (1.5.4)
pymongo (3.0.1)
setuptools (2.2)
verlib (0.1)
wsgiref (0.1.2)

(venv)$ mongoctl
Traceback (most recent call last):
  File "…/venv/bin/mongoctl", line 48, in <module>
    from mongoctl import mongoctl
  File "…/venv/local/lib/python2.7/site-packages/mongoctl/mongoctl.py", line 38, in <module>
    import objects.server
  File "…/venv/local/lib/python2.7/site-packages/mongoctl/objects/server.py", line 21, in <module>
    from pymongo.connection import Connection
ImportError: No module named connection

It would appear pymongo 3.0.1 is installed (which is the latest available) regardless of what is specified in the current setup.py.
Downgrading pymongo to 2.8 is enough to fix the issue: pip install pymongo==2.8
Note: it seems the pymongo.connection.Connection indeed disappeared in pymongo 3.0, in favor of pymongo.MongoClient (e.g. https://github.com/shinken-monitoring/mod-mongodb/pull/7)

Hi,
The issue has been fixed and a newer version has been pushed to pypi 0.7.81 which has the proper pymongo dependency. Sorry for the trouble but pypi was acting weird for some reason. It was downloading version 0.7.7 while 0.7.8 was available so i had to re-upload 0.7.8 under a different version 0.7.81 so it would become the default.
Cheers!
-abdul

Thanks @abdulito , works like a charm on OS X 10.10 now, much appreciated!


Question: how do I override the default cache to NOT use cookies?

I deployed a next app using sst + open-next, but because i have google analytics on my website, a lot of things are not properly getting cached inside cloudfront due to the cookie changing every time a user loads the page.  I get a lot of cache miss.  I noticed the default cache policy is to include cookies in the cache key, but I wanted to turn that off.
Is there a way to do this via the CDK / open-next construct?

@webdevcody what was the answer you found?


390 update db from central to standard igbo

Background
This PR migrates the Mongo database from using isCentralIgbo to isStandardIgbo as a field on a Word document, this change was necessary to better show what that value is supposed to represent
Solution
The solution was possible by using the migrate-mongo library, modifications were made in other files to conform to the new naming convention
Tests Demo
Local MongoDb showing a field of isStandardIgbo after, migrate-mongo up command has been run

Response from tests also using the new field, after some changes has been made to the code

Closes #390

We'll have to wait to merge this PR though and prepare the Igbo API and Nkowa okwu to handle the new isStandardIgbo field
Right I was wondering about that too

Closing this PR.


Update play-json to 2.10.1

About this PR
📦 Updates com.typesafe.play:play-json from 2.10.0-RC5 to 2.10.1
📜 GitHub Release Notes - Version Diff
Usage
✅ Please merge!
I'll automatically update this PR to resolve conflicts as long as you don't change it yourself.
If you'd like to skip this version, you can just close this PR. If you have any feedback, just mention me in the comments below.
Configure Scala Steward for your repository with a .scala-steward.conf file.
Have a fantastic day writing Scala!

⚙ Adjust future updates
Add this to your .scala-steward.conf file to ignore future updates of this dependency:
updates.ignore = [ { groupId = "com.typesafe.play", artifactId = "play-json" } ]

Or, add this to slow down future updates of this dependency:
dependencyOverrides = [{
  pullRequests = { frequency = "30 days" },
  dependency = { groupId = "com.typesafe.play", artifactId = "play-json" }
}]

labels: library-update, early-semver-pre-release, semver-spec-pre-release, commit-count:1

Superseded by #223.


I've made a Brew, saved it. When I clicked in my user name, everything was lost.

   Today I spent my entire day making a Brew... then when I was ready to go to sleep I clicked in my name and boom! My entire thing was lost... I clicked in the "Recent Brews" but any of the options weren't available to be clicked on! Then I made again more one page and "Saved it" and yet again when I go away from the page, everything disappear without a trace... I saw someone saying about login again because the user somethimes is screwed... but I got back to the "Natural crit" site... and there is not even a single button to log in or anything... so I really don't know what to do. I want my Sunday back! T-T

Hmm I could be wrong but I remember saving it first so that it gave you a special address then typing in the stuff and letting it auto save.  Unless they made it so that it doesn't even really save anymore but I just worked on one so I don't think that is the case.

So, I just don't know how the saving on this site works, but luckily I've sended the link to the brew to some friends, so after much despair they reminded me that I had sended they the link! So now I can open it because I have the link saved in a Notepad file. But that is kinda ridiculous how the site doesn't provide a form for you to access your own project, I was only able to do so because I saved the link externally!

Issue resolved by OP. Closing.


getGlobalEventBus is deprecated, use a manually created EventBus instance instead.

i use pdfjs to render my pdf document
PDFJS.getDocument({
url: pdfUrl,
cMapUrl: '../../../static/pdfjs-dist/cmaps/',
cMapPacked: true,
})
warning  getGlobalEventBus is deprecated, use a manually created EventBus instance instead.
what should i do?

warning getGlobalEventBus is deprecated, use a manually created EventBus instance instead.

That suggests that you're using a very old, and thus completely unsupported, version of the PDF.js library.
Furthermore there's no mention of using the default viewer in your code-snippet, since that warning originate in the viewer rather than the PDF.js library API; unfortunately though you've (again) not included anywhere near enough information in order for this issue to be actionable/valid.
When opening an issue, please provide all of the information requested in https://github.com/mozilla/pdf.js/blob/master/.github/ISSUE_TEMPLATE.md and please note https://github.com/mozilla/pdf.js/blob/master/.github/CONTRIBUTING.md (emphasis mine):

If you are developing a custom solution, first check the examples at https://github.com/mozilla/pdf.js#learning and search existing issues. If this does not help, please prepare a short well-documented example that demonstrates the problem and make it accessible online on your website, JS Bin, GitHub, etc. before opening a new issue or contacting us in the Matrix room -- keep in mind that just code snippets won't help us troubleshoot the problem.


[Feature Request] Move whole line/selection up/down using Alt + Cursor Up/Down

I find this feature (from Visual Studio) pretty helpful to reorder e.g. lists.
e.g.;
line one
line two
line three
line four
So if i select line two and line three and press Alt + Cursor Down i get:
line one
line four
line two
line three

Obsidian already has built in hotkeys for "Move line up" and "Move line down"

you are absolutely right! i obviously did not know that, sorry! thanks! and thanks for the plugin - there are still a few hotkeys missing in Obsidian ;-)

No problem! 😀


mozillavpn: 2.24.1 -> 2.24.3

Automatic update generated by nixpkgs-update tools. This update was made based on information from passthru.updateScript.
meta.description for mozillavpn is: Client for the Mozilla VPN service
meta.homepage for mozillavpn is: https://vpn.mozilla.org/
Updates performed

Ran passthru.UpdateScript

To inspect upstream changes
Impact
Checks done

built on NixOS
The tests defined in passthru.tests, if any, passed
found 2.24.3 with grep in /nix/store/hz5mk05bv3263mnvqjhwz7vsf6laiv8w-mozillavpn-2.24.3
found 2.24.3 in filename of file in /nix/store/hz5mk05bv3263mnvqjhwz7vsf6laiv8w-mozillavpn-2.24.3

Rebuild report (if merged into master) (click to expand)

2 total rebuild path(s)

2 package rebuild(s)

First fifty rebuilds by attrpath

mozillavpn

Instructions to test this update (click to expand)

Either download from Cachix:
nix-store -r /nix/store/hz5mk05bv3263mnvqjhwz7vsf6laiv8w-mozillavpn-2.24.3 \
  --option binary-caches 'https://cache.nixos.org/ https://nix-community.cachix.org/' \
  --option trusted-public-keys '
  nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=
  cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
  '

(The Cachix cache is only trusted for this store-path realization.)
For the Cachix download to work, your user must be in the trusted-users list or you can use sudo since root is effectively trusted.
Or, build yourself:
nix-build -A mozillavpn https://github.com/r-ryantm/nixpkgs/archive/63dcaf4badb13115e4449299a2e08b9663e59efd.tar.gz

Or:
nix build github:r-ryantm/nixpkgs/63dcaf4badb13115e4449299a2e08b9663e59efd#mozillavpn

After you've downloaded or built it, look at the files and if there are any, run the binaries:
ls -la /nix/store/hz5mk05bv3263mnvqjhwz7vsf6laiv8w-mozillavpn-2.24.3
ls -la /nix/store/hz5mk05bv3263mnvqjhwz7vsf6laiv8w-mozillavpn-2.24.3/bin

Pre-merge build results
We have automatically built all packages that will get rebuilt due to
this change.
This gives evidence on whether the upgrade will break dependent packages.
Note sometimes packages show up as failed to build independent of the
change, simply because they are already broken on the target branch.
nixpkgs-review result
Generated using nixpkgs-review.
Command: nixpkgs-review

x86_64-linux

:white_check_mark: 1 package built:

mozillavpn

Maintainer pings
cc @andersk for testing.

[!TIP]
As a maintainer, if your package is located under pkgs/by-name/*, you can comment @NixOS/nixpkgs-merge-bot merge to automatically merge this update using the nixpkgs-merge-bot.

Add a :+1: reaction to pull requests you find important.

@NixOS/nixpkgs-merge-bot merge


Mocking Angular Material modules do not work

I'm trying to mock Angular Material modules to avoid using NO_ERRORS_SCHEMA when doing shallow components testing, but it's not working for me.
At first, I tried mocking my material.module.ts which is just a module that re-exports all material individual modules, and it's not working at all as I get "unknown element <mat-card" and such.
Then I tried mocking all material modules individually with modules.map((module: any) => MockModule(module)); and use that in my shared.module.mock.ts, a module that I import in all my unit tests for convenience. This module imports & exports the mocked material modules.
This works better as I don't get "unknown element" errors, but this time I'm stuck on this error:
 TypeError: Cannot read property 'indexOf' of undefined
            at HammerGesturesPlugin.isCustomEvent (./node_modules/@angular/platform-browser/fesm5/platform-browser.js?:1639:102)
            at HammerGesturesPlugin.supports (./node_modules/@angular/platform-browser/fesm5/platform-browser.js?:1577:75)
            at EventManager._findPluginFor (./node_modules/@angular/platform-browser/fesm5/platform-browser.js?:911:26)
            at EventManager.addEventListener (./node_modules/@angular/platform-browser/fesm5/platform-browser.js?:882:27)
            at EmulatedEncapsulationDomRenderer2.DefaultDomRenderer2.listen (./node_modules/@angular/platform-browser/fesm5/platform-browser.js?:1190:34)

Obviously, this error is not there when I use the real material modules.
Do you have any idea or workaround for this?
Thanks!

Hi @sinedied,
thanks for for the report. Could you create simple project and share its code to demonstrate the error?

Sure! Is a stackblitz project ok for you?

it's perfect

It was hard to reproduce, but here it is: https://stackblitz.com/edit/ng-mock-material-issue?file=src%2Fapp%2Fshared.module.mock.ts
Seems it's somehow related to the mat-side-nav module, as if you comment this part from app.component.html it's working.

Thanks I'll check next days and prepare fix.

I have pinpointed the issue to the MatSliderModule: if I exclude only this one from the mocks, it's working -> https://stackblitz.com/edit/ng-mock-material-issue-7ecjrd?file=src%2Fapp%2Fshared.module.mock.ts

This is an issue with auto-mocking the HAMMER_GESTURE_CONFIG. You will want to use the "real" version of that provider. MockModule auto-mocks the config which causes HammerJS to crap out when it tries to access a property on the config.
I would recommend enhancing MockModule in a way that allows you to specify which items in the module you would like to avoid mocking.
As a hack, you can re-provide a dummy config on top of your mocked modules like so:
@NgModule({
imports: [
// ...
...MaterialModulesMocks
],
/* This is a hack.. You really want to avoid doing this at the MockModule level */
providers: [
{provide: HAMMER_GESTURE_CONFIG, useValue: {events: []}}
],
// ...
})

Wanted to follow up that @satanTime has enhancements planned for MockModule that should address this in the future.
See his comment about it on another issue.

Hi guys, sorry for the long delay, work, you know. Checking the thing.

So, I was trying to reproduce the issue with angular 9, but no luck. The stackblitz.com sample is too old and I can't run it easily on node 12, it requires node 10.

Should be fixed by https://github.com/ike18t/ng-mocks/pull/80


0.2.1 release

Generating 0.2.1 binaries, which includes three fixes:

https://github.com/mapbox/vtcomposite/issues/97
https://github.com/mapbox/vtcomposite/issues/98
https://github.com/mapbox/vtcomposite/pull/101

cc @springmeyer @artemp @ericfischer @millzpaugh @ian29

<EMAIL_ADDRESS>has been published


[AutoPR storage/resource-manager/storage/data-plane] chore: jsonfmt storage

Created to sync https://github.com/Azure/azure-rest-api-specs/pull/6261

(message created by the CI based on PR content)


Simple Refactoring Proposal for emmy Client

Currently emmy Client is implemented as follows:
type Client struct {
    id      int32
    conn    *grpc.ClientConn
    client  *pb.ProtocolClient
    stream  pb.Protocol_RunClient
    schema  pb.SchemaType // int32
    variant pb.SchemaVariant
    handler *ClientHandler
}

func (c *Client) Pedersen(dlog *dlog.ZpDLog, val big.Int) error {
    c.handler.pedersenCommitter = commitments.NewPedersenCommitter(dlog)
    ... // c.handler.pedersenCommitter is used
}

func (c *Client) Schnorr(protocolType common.ProtocolType, dlog *dlog.ZpDLog, secret big.Int) error {
    c.handler.schnorrProver = dlogproofs.NewSchnorrProver(dlog, protocolType)
    ... // c.handler.schnorrProver is used
}

So example has to be started like this:
genClient := getGenericClient(endpoint, example)
genClient.ExecuteProtocol(protocolParams)  // decides whether c.Pedersen() whether c.Schnorr() is run

What bothers me is that such an approach is hard to read. Also, when adding support for new schema, one has to modify everything: the Client struct (hook additional function), the ClientHandler struct (store additional Commiter) and the ExecuteProtocol() function (additional case).
Proposed change
What if Client was an interface:
type Client interface{
    ExecuteProtocol()
}

and we implement it for each schema we provide:
type PedersenClient struct{}

func (c *PedersenClient) ExecuteProtocol(){
    // bouncing protocol is run
}

type SchnorrClient struct{}

func (c *SchnorrClient) ExecuteProtocol(){
    // bouncing protocol is run
}

All we had to do to start emmy client then is to pick appropriate implementation at the very beginning. So example would be started like this:
func PickClient(schemaName string) Client{
    switch schemaName{
    case "pedersen":
        return &PedersenClient{}
    case "schnorr":
        return &SchnorrClient{}
    }
}

client := PickClient(schemaName)
client.ExecuteProtocol()

Notice how PickClient() return type is the interface. This means that your program, from this point on, does not care what implementation is underneath.
The nice thing, should we decide to go with such an approach, would be that emmy program doesnt even notice if we implement yet another scheme. In other words, to support a new scheme, we only need to provide another interface implementation and update the PickClient() function with additional case. All other parts of the program would remain untouched!
Impact
I believe this may feel like reimplementing the whole program, but that's not true. I think we would quite enjoy to first implement e.g. Pedersen knowing that the other four schemas will come at no cost.
@mancabizjak @miha-stopar What do you think?

I agree. However, there are (will) be schemes with more than one protocol. For example pseudonym system has the following four protocols:
RegisterWithCA (register with a trusted third party)
GenerateNym (register with an organization which can issue or accept a credential)
IssueCredential (organization issues a credential)
CredentialTransfer (organization verifies a credential)
The main goal of the library is to provide a simple API to execute these protocols. That would mean something like:
client = PseudonymSysClient(...)
client.RegisterWithCA(...)
client.GenerateNym(...)
client.IssueCredential(...)
client.CredentialTransfer(...)
Note that these four protocols are not subprotocols of one protocol - they might be executed at different times (actually, client.CredentialTransfer is executed every time the client wants to anonymously authenticate to the organization).
Each of these functions, for example RegisterWithCA, will execute some protocol, like Schnorr. So it will instantiate a SchnorrProver and then run Schnorr. However, the messages exchanged can be slightly extended in comparison to the ones used in a simple Schnorr. That means we cannot simply use SchnorrProverClient, we need to define new grpc messages, use SchnorrProver and convert messages between SchnorrProver outputs and grpc messages. RegisterWithCA would then look something like:
RegisterWithCA(...)
schnorrProver = dlogproofs.NewSchnorrProver(...)
x = schnorrProver.GetProofRandomData(...)
prepare grpc message which would contain x and some additional data, like nym.A, nym.B
send grpc message to the CA
receive challenge
schnorrProver.GetProofData(challenge)
...
For primitives like SchnorrProver, it should be similar - it should enable API like:
client = SchnorrProverClient(...)
challenge = client.ProofRandomData(...)
client.ProofData(proof_computed_from_challenge)
Here indeed I would put the interaction (ProofRandomData, ProofData) into a method named ExecuteProtocol (to be able to execute client.ExecuteProtocol). However, this is pretty much only for demonstration purposes since Schnorr messages in more complex schemes will vary from scheme to scheme and SchnorrProverClient won't be actually needed there (only SchnorrProver with some customized messages).

@miha-plesko your suggested approach would also remove the need for naming functions with essentially the same functionality differently. For instance, the CSPaillier and CSPaillier EC protocols both require opening step, but this step is slightly different between the two, which calls for either:

not-so-convenient "general open function" with a lot of branching (this is how we do it for Pedersen and Pedersen EC scheme, but it's not very readable), or
naming of the functions like openEC for CSPaillier EC as opposed to open for CSPaillier (this is how we currently do it).

So from this point of view, making Client an interface{} and then creating structs that implement this interface + possibly hooking these new structs  (like CSPaillierClient and CSPaillierECClient) to helper functions (for instance (c *CSPaillierClient) open() and (c *CSPaillierECClient) open()) would be much cleaner in my opinion.
@miha-stopar If we do this refactoring as suggested, I don't think it will introduce any trouble with implementing multi-protocol schemas like the pseudonym system, or make it harder for users of emmy to use its functionality. Here's an example which we can follow to add/modify relevant interfaces and structs for the case of pseudonym system.
type Client interface() {
	ExecuteProtocol() // does the gRPC stuff (ping-pong between client and server)
}

// this struct will hold data that is currently in the Client struct
type CommonClient struct {
	id 	int32
	conn    *grpc.ClientConn
	client  pb.ProtocolClient
	stream  pb.Protocol_RunClient
}
// We would hook common operations to this CommonClient struct in order not to duplicate
// this in structs implementing the Client interface
(c *CommonClient) send() {...}
(c *CommonClient) recieve() {...}

// Here's how a new SchnorrClient would look after refactoring.
// We would embed the CommonClient and give it data currently
// passed to client via Schnorr function.
type SchnorrClient struct {
	protocolType common.ProtocolType,
	dlog *dlog.ZpDLog,
	secret *big.Int
	CommonClient // allows calling send and recieve directly on SchnorrClients
// Communication logic currently in Schnorr() would be moved here
(c *SchnorrClient) ExecuteProtocol() {...}

// We would do similar for all other protocols
type CARegistrationClient struct {
	CommonClient
	// + additional fields, if required
}
(c *CARegistrationClient) ExecuteProtocol() {...}

type NymGenerationClient struct {
        CommonClient
	// + additional fields, if required
}
(c *NymGenerationClient) ExecuteProtocol() {...}

We would define CredentialIssueClient and CredentialTransferClient in a similar fashion. Then, we would do something like this for the definiton of pseudonym system:
type PseudonymSystem struct {
	regClient CARegistrationClient,
	nymGenClient NymGenerationClient,
	credIssueClient CredentialIssueClient,
	credTransferClient CredentialTransferClient
	// other fields, if required
}
(pseudoSys *PseudonymSystem) NewPseudonymSystem(...) *PseudonymSystem {...}

(pseudoSys *PseudonymSystem) register(...) {
	pseudoSys.regClient.ExecuteProtocol()
}
(pseudoSys *PseudonymSystem) generateNym(...) {
	pseudoSys.nymGenClient.ExecuteProtocol()
}
// similar for `(pseudoSys *PseudonymSystem) issueCredentials` and
// `(pseudoSys *PseudonymSystem) transferCredentials` functions, omitting here.

The programmer will then use it like this:
ps := NewPseudonymSystem(...)
ps.register(...)
ps.generateNym(...)
ps.issueCredentials(...)
ps.transferCredentials(...)

which seems appropriate, right? The end user need not worry about how the clients structs are implemented if we define the structs like this.
Is this reasonable? What do you think?

@miha-stopar I see your problem, some clients can not be described as a blackbox that you fill data in and invoke ExecuteProtocol() on it. At the moment I can think of two possible solutions:
a) Parametrize ExecuteProtocol() function
By "parametrize" I mean "introduce protocolName argumet". Something like:
type Client interface {
    ExecuteProtocol(protocolName string)
}

type PseudonymSystemClient struct { }

func (c *PseudonymSystemClient) ExecuteProtocol(protocolName string){
    switch protocolName{
    case "register-with-ca":
        c.RegisterWithCA()
    case "generate-nym":
        c.GenerateNym()
    ...
    }
}

User would use it simply as:
client := PickClient("pseudonym", payload) // returns interface implementation
// --- from here on we don't care what client implementation we have, we just need to know protocol name
client.ExecuteProtocol("register-with-ca")
client.ExecuteProtocol("generate-nym")

I think this solution would be quite good from user's perspective, but it relies heavily on the fact that user will never need specific result being returned from ExecuteProtocol(protocolName) function (otherwise user would have to type-cast it, which is really bad UX).
Q: Is this the case? In other words, should any of the functions that you've listed (RegisterWithCA, GenerateNym, IssueCredential, CredentialTransfer) return some value that user needs to capture?
b) Don't use interface, but only structs
The second solution is basically what @mancabizjak suggests - that we yes, encapsulate things into struct, but not interfaced one:
type PseudonymSystemClient struct { }

func (c *PseudonymSystemClient) RegisterWithCA(){ ... }
func (c *PseudonymSystemClient) GenerateNym(){ ... }
func (c *PseudonymSystemClient) IssueCredential(){ ... }
func (c *PseudonymSystemClient) CredentialTransfer(){ ... }

User would use it simply as:
client := PseudonymSystemClient(payload)
// --- everything from here on changes if we use another client than PseudonymSystemClient
client.RegisterWithCA()
client.GenerateNym()
...

I'm looking forward to further discussion on this. In fact, I'm quite curious what the actual solution will be :smile:

@mancabizjak I was not against the approach, but just needed to point out how the API should look like. I like what you proposed.
@miha-plesko there are different inputs and outputs, for example the output of RegisterWithCA is the input for GenerateNym. I think your b) is what we all agree upon.

b) sounds reasonable for me 👍

Great, lets go for the option b) then. I will submit a PR when the clients are refactored accordingly. Thank you both for the feedback!


Firebase Errors are not documented.

All the possible errors that are thrown in Flutter while using Firebase (for ex: firebase_auth) are not documented.
For example:
https://github.com/flutter/plugins/blob/6eb5d634249ae49226509686c5050de33bd66b56/packages/firebase_auth/lib/src/firebase_auth.dart#L264-L274
The signInWithCredential only documents 4 errors whereas in my app 'ERROR_SESSION_EXPIRED' was thrown (not one of them). Looking to the Android platform code, I found:
https://github.com/flutter/plugins/blob/6eb5d634249ae49226509686c5050de33bd66b56/packages/firebase_auth/android/src/main/java/io/flutter/plugins/firebaseauth/FirebaseAuthPlugin.java#L749-L761
In the above code, you'll find only three viewable error codes, whereas others are coming from the Firebase Java API land (for whom I could not find an exhaustive list of errors page).
Also, in the dart land, it would be awesome if all these error codes and messages could be translated to normal dart errors rather than checking on error.code.
We get the documentation of all errors for free while providing confidence in our app (no typos).

Please ask at the new  home for Firestore at https://github.com/FirebaseExtended/flutterfire and link this issue to it. Thanks!


Failed to fire hook: 504 5.7.4 Unrecognized authentication type

Trying to configure hooks for log section in /etc/docker/registry/config.yml, I discovered that it does not work: seems like registry cannot authenticate against smtp server:
When I specify gmail smtp server, error message is:
Failed to fire hook: 534 5.7.14 <https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=AKgnsbvXL
registry_1 | 5.7.14 -faucbME-bJdesJN6OeCE1idOuVRMV2HdGH4E3_u-LmqdRqFylwfDZ-N1vnj1LHUCwEsVJ
registry_1 | 5.7.14 tNJvXewMKbMmIn9QaUGSrlA0t9UEeqy3EMf1aMP3GHTMwBCFKirSeqjQncqnd1hSSG_QDq
registry_1 | 5.7.14 0q4mW2ChGOxxgRNeFQm8NndbCz_ZGpWR4iceihwxEhBCD0bSkR5AnlbmCi2tPlVn8Ta8lK
registry_1 | 5.7.14 henJWHvUjdCDMYn_Se-neEj-oiro> Please log in via your web browser and
registry_1 | 5.7.14 then try again.
registry_1 | 5.7.14  Learn more at
registry_1 | 5.7.14  https://support.google.com/mail/answer/78754 k2sm172241igg.5 - gsmtp

When I specify  microsoft outlook 365 smtp server, error message is:
Failed to fire hook: 504 5.7.4 Unrecognized authentication type

Probably, need to to something with sendMail function in distribution/registry/handlers/mail.go:
28      auth := smtp.PlainAuth(
29			"",
30			mail.Username,
31			mail.Password,
32			host,
33		)

My config file is /etc/docker/registry/config.yml:
version: 0.1
log:
  level: debug
  formatter: text
  fields:
    service: registry
  hooks:
    - type: mail
      levels:
        - debug
      options:
        smtp:
          addr: smtp-relay.gmail.com:587
          username<EMAIL_ADDRESS>          password: password
          insecure: true
        from<EMAIL_ADDRESS>        to:
          -<EMAIL_ADDRESS>storage:
    cache:
        blobdescriptor: inmemory
    s3:
        accesskey: ACCESSKEY
        secretkey: SECRETKEY
        region: REGION
        bucket: BUCKET
        secure: true
        v4auth: true
http:
    addr: :5000
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3

I run registry with docker compose docker-compose up:
# docker-compose.yml
registry:
  image: registry:2
  ports:
    - <IP_ADDRESS>:5000:5000
  volumes:
    - ./config.yml:/etc/docker/registry/config.yml:rw

Output of docker version:
Client:
 Version:         1.9.1
 API version:     1.21
 Package version: docker-1.9.1-6.git6ec29ef.fc23.x86_64
 Go version:      go1.5.3
 Git commit:      7206621
 Built:           Mon Jan 25 20:52:22 UTC 2016
 OS/Arch:         linux/amd64

Server:
 Version:         1.9.1
 API version:     1.21
 Package version: docker-1.9.1-6.git6ec29ef.fc23.x86_64
 Go version:      go1.5.3
 Git commit:      7206621
 Built:           Mon Jan 25 20:52:22 UTC 2016
 OS/Arch:         linux/amd64

Output of docker info:
Containers: 2
Images: 64
Server Version: 1.9.1
Storage Driver: devicemapper
 Pool Name: docker-8:3-1054616-pool
 Pool Blocksize: 65.54 kB
 Base Device Size: 107.4 GB
 Backing Filesystem:
 Data file: /dev/loop0
 Metadata file: /dev/loop1
 Data Space Used: 1.074 GB
 Data Space Total: 107.4 GB
 Data Space Available: 20.99 GB
 Metadata Space Used: 3.002 MB
 Metadata Space Total: 2.147 GB
 Metadata Space Available: 2.144 GB
 Udev Sync Supported: true
 Deferred Removal Enabled: false
 Deferred Deletion Enabled: false
 Deferred Deleted Device Count: 0
 Data loop file: /var/lib/docker/devicemapper/devicemapper/data
 Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
 Library Version: 1.02.107 (2015-09-05)
Execution Driver: native-0.2
Logging Driver: journald
Kernel Version: 4.2.3-300.fc23.x86_64
Operating System: Fedora 23 (Workstation Edition)
CPUs: 4
Total Memory: 5.746 GiB
Name: localhost.localdomain
ID: 7ORU:AY43:EGCI:PZMQ:OMUC:4DBL:SCFS:6MK6:ZLEM:FGMS:PS7H:CQ4N

Output of docker exec dockerregistry_registry_1 registry --version:
registry github.com/docker/distribution v2.3.0

I note in https://support.google.com/a/answer/176600?hl=en  that smtp-relay.gmail.com:587requires the following authentication "IP address provides authentication." whereas smtp.gmail.com uses user/pass (but requires TLS).
If you are using the gmail relay, did you add your ip range to the SMTP relay service?


Build failure

Signed-off-by: Yash Kamboj<EMAIL_ADDRESS>Description
This PR fixes #
Notes for Reviewers
Signed commits

[ ] Yes, I signed my commits.

@leecalcote Looks like my first merge opportunity was stolen 🤣🤣

My mouse smelled a green-colored button and my index finger twitched before I knew what happened.


Video Trainings in MOOC Section?

Hello. This is a great list of resources. Love it.
I wanted to ask if it is possible to include in the MOOC section two trainings that I created on Spark at Pluralsight, one aimed for the Scala developer and one aimed for the Python developer. They are about 6 hours each and the feedback I have received is that they are really helpful for those beginner to intermediate Spark developers.
Here they are:
Developing Spark Applications with Python & Cloudera
Developing Spark Applications Using Scala & Cloudera
If the answer is yes, I can submit a pull request. Please let me know.

By principle I don't see a problem here. My only concern is if some of the contributors have access (I cannot say if mine is still active) to Pluralsight, which might mean that no one will be ready to sign off this (it is somewhat similar to the case of #149).
If you don't mind it staying open until we get familiar with the content, then sure, go ahead and submit PR.

I don't have access for pluralsight. I'm not very sure about this type of content. I don't want to give the wrong image about the repo. What do you think @zero323 ?

I stay behind my previous comment ‒ if one of the maintainers is willing to check the content and vouch for it, I am OK with that. But if not, then I am against it. Pretty much as with any content here.


export.sh on MaOC Big Sur doesn't work (IDFGH-4833)

Environment

Development Kit: ESP32-Wrover
Kit version (not important)
Module or chip used:  ESP32-WROVER
IDF version: v4.2
Build System:  not important
Compiler version: not important
Operating System: macOS Big Sur
Using an IDE: not important, I'm using the terminal
Power Supply: USB

Problem Description
I can compile my Project in Eclipse , I can debug and everything work correctly in the IDE.
Now I want use some commands from the terminal and I need to run export.sh script in the IDF path
Is impossible to get it running!
I tried to use : ./export.sh
results: This script should be sourced, not executed
Then I tried to use : source ./export.sh
result: bash: /User/myusername/esp-idf/esp-idf4.2 Permission denied
Then I tried also ti use sudo before, and call the command as root, the same result: sudo: .: command not found
How can I run the script without errors?

I solved the problem: to help other people here what was my problem:
During the installation of the tool I used this command:ln -s /usr/local/bin/python3.8 /usr/local/bin/python
BUT in my Mac is installs python3.9 and not 3.8 , so the link was invalid and the system was using the original python 2.7.17.
To solve the problem, I removed the existing wrong link and I created the new one.
After that, the command . ./export.sh works correctly!


No persistent volumes for sqlite version ?

Config is lost when rebuilding the stack using sqlite, maybe since no persistent volumes are used ?

Was possible before, but now its easier. Just add volumes with the path to your compose.
Make sure to use v2.2.2 once the image is builded.


Does js-data support embeded objects like no-sql?

Hi,
I was wondering if js-data supports embeded objects and would not confuse it with parent/foreign-key relation. i.e. our back-end db supports embeded objects like this
user = {
name: {
firstname:'',
lastname: '',
title:''
}
}
thanks

I'm not sure what you mean by "supports". Is there a certain feature surrounding nested objects that you're looking for? It certainly doesn't prevent you from having whatever kind of nested objects you want.

Closing because I’m not sure this is an issue, if you are convinced that this is really a bug, please feel free to re-open the issue and add more information:

good - Your versions of Angular, js-data, js-data-angular, etc, relevant console logs/error, code examples that revealed the issue
better - A plnkr, fiddle, or bin that demonstrates the issue
best - A Pull Request that fixes the issue, including test coverage for the issue and the fix

Otherwise support is done via the mailing list.


feat(FX-4039): expand auto-selection of user's preferred measurement system for size filter on all grids

The type of this PR is: Feature

This PR solves FX-4039
Description

Closed due to using a different approach (see artsy/force/pull/10593, artsy/force/pull/10572)


Add a Gitter chat badge to README.md

ContinuumIO/blaze now has a Chat Room on Gitter
@cpcloud has just created a chat room. You can visit it here: https://gitter.im/ContinuumIO/blaze.
This pull-request adds this badge to your README.md:

If my aim is a little off, please let me know.
Happy chatting.
PS: Click here if you would prefer not to receive automatic pull-requests from Gitter in future.

closing because this was put in a dumb place


test only files whose extension is js

Instead of ignoring _* files, it is better to test only *.js files.
This avoids accidental testing of temporary files created by editors.
Rename the _fake-cl.js to _fake-ci so that it will be excluded from
the tests and the modules can still require them without any changes.

@thefourtheye good point - but actually it doesn't matter if node runs _fake-ci.js - that file doesn't run any code unless its function gets executed (even if it did it wouldn't matter). That way syntax highlighting would keep working. Can I get you to rename the file back again? Then I'll happily merge your PR :smile:

@thefourtheye FYI, I just broke this PR by merging #20 into master - just rebase and apply the same changes :smiley:

@watson Cool, I rebased and addressed your comment. PTAL.

@thefourtheye Thanks :smile:


🚀 Feature: Bring in eslint-plugin-node-dependencies's compat-engines rule

Splitting out from https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/issues/43#issuecomment-1727005424 & #42: eslint-plugin-node-dependencies has a compat-engines rule. Let's merge it into this package!
https://ota-meshi.github.io/eslint-plugin-node-dependencies/rules/compat-engines.html
~Blocked on #40, but once that PR is merged this will be good to go.~ ✅

I'm curious what this rule would add to the picture when package manager's will already provide feedback (or error if strict is enabled) when the engines conditions aren't met?


Support latest version of typescript?

Not sure what version you are currently using but version 0.9.5 has been released now.

is this project dead?


No visible in mingw bash

Hello, I try to run example in windows mingw bash terminal, but it doesn't seem to work.

Try start go run cmd/bar/main.go


feat(component): add parent and root to setup context

Add parent and root fields to setup context according to the RFC

This is something I'm considering removing from the RFC. Direct access to the internal instance creates direct decoupling, while most similar needs can be dealt with using provide/inject.


How to spy on refs?

I have a component that has a MapView from react-native-maps. I want to test that I'm calling MapView.fitToSuppliedMarkers() inside componentDidUpdate of my component.
My code under test:
componentDidUpdate() {
    //some other code
    this.refs.map.fitToSuppliedMarkers(/* some parameters */);
  }

But I struggle on how to access and spy on this.refs using enzyme and jest.

@ljharb  @mikeborozdin  Hi I'm new to Enzyme and not sure how to actually test for ref callback, could you provide a sample code on how you did it?

Share your component code and test code, and I’ll see what I can do

Found the ref callback sample code from SO just minutes ago:
// component code
class Carousel extends Component {

  ...

  prevSlide () {
    this.slider.slickPrev()
  }

  render () {
    const settings = {
      ...
    }

    return (
         ...
        <Slider ref={c => (this.slider = c)} {...settings}>
          {this.props.data}
        </Slider>
        ...
    )
  }
}
// testing code
test('call slick carousel's ref change slide method when change slide component method is triggered', () => {
    const wrapper = mount(<Carousel />)
    const spyPrev = jest.spyOn(wrapper.instance().slider, 'slickPrev')
    wrapper.instance().prevSlide()
    expect(spyPrev).toHaveBeenCalled()
  })

I could only find sample for string refs in the enzyme docs, should we have a section for ref callback sample code? since ref callback is the recommended way to do things now

Sure, i guess we could - altho by using ref callbacks, enzyme’s totally uninvolved.

I don't follow here, why would enzyme be uninvolved if one tests with ref callback?

Because while a "ref callback" is something React knows how to invoke when using mount, enzyme itself doesn't do anything with it, nor provides any API to work with it. Testing a ref callback is identical to how you'd test any non-lifecycle instance method - you spy on it, then create the wrapper, then assert on how and when it's called; or, you do wrapper.instance().whatever() and call it directly, and assert on its effects.

Thanks for the explanation, in that sense it doesn't make as much sense to  be in the official docs. sample code is easily found with a google search as well.

@xxryan1234 In my case I was not using the Slider library, I was testing ref callback in my own component that needed to listen on a scroll.


Library breaks already-working tests

I installed preact-compat-enzyme in an attempt to get some of my tests that involve (p)react-redux working. Unfortunately, now my tests that were previously working are no longer working.
Versions:
+--<EMAIL_ADDRESS>+--<EMAIL_ADDRESS>+--<EMAIL_ADDRESS>+--<EMAIL_ADDRESS>+--<EMAIL_ADDRESS>+--<EMAIL_ADDRESS>+--<EMAIL_ADDRESS>+--<EMAIL_ADDRESS>For tests which were previously working, after having configured my module aliases as described in the preact-compat-enzyme readme, I now receive the following:
TypeError: Cannot set property _reactInternalInstance of #<Component$1> which has only a getter
      at Object.set (node_modules/react-dom/lib/ReactInstanceMap.js:42:32)
      at ReactCompositeComponentWrapper.mountComponent (node_modules/react-dom/lib/ReactCompositeComponent.js:229:22)
      at Object.mountComponent (node_modules/react-dom/lib/ReactReconciler.js:46:35)
      at ReactCompositeComponentWrapper.performInitialMount (node_modules/react-dom/lib/ReactCompositeComponent.js:371:34)
      at ReactCompositeComponentWrapper.mountComponent (node_modules/react-dom/lib/ReactCompositeComponent.js:258:21)
      at Object.mountComponent (node_modules/react-dom/lib/ReactReconciler.js:46:35)
      at ReactCompositeComponentWrapper.performInitialMount (node_modules/react-dom/lib/ReactCompositeComponent.js:371:34)
      at ReactCompositeComponentWrapper.mountComponent (node_modules/react-dom/lib/ReactCompositeComponent.js:258:21)
      at Object.mountComponent (node_modules/react-dom/lib/ReactReconciler.js:46:35)
      at mountComponentIntoNode (node_modules/react-dom/lib/ReactMount.js:104:32)
      at ReactReconcileTransaction.perform (node_modules/react-dom/lib/Transaction.js:140:20)
      at batchedMountComponentIntoNode (node_modules/react-dom/lib/ReactMount.js:126:15)
      at ReactDefaultBatchingStrategyTransaction.perform (node_modules/react-dom/lib/Transaction.js:140:20)
      at Object.batchedUpdates (node_modules/react-dom/lib/ReactDefaultBatchingStrategy.js:62:26)
      at Object.batchedUpdates (node_modules/react-dom/lib/ReactUpdates.js:97:27)
      at Object._renderNewRootComponent (node_modules/react-dom/lib/ReactMount.js:320:18)
      at Object._renderSubtreeIntoContainer (node_modules/react-dom/lib/ReactMount.js:401:32)
      at Object.render (node_modules/react-dom/lib/ReactMount.js:422:23)
      at Object.renderIntoDocument (node_modules/react-dom/lib/ReactTestUtils.js:91:21)
      at renderWithOptions (node_modules/enzyme/build/react-compat.js:209:26)
      at new ReactWrapper (node_modules/enzyme/build/ReactWrapper.js:94:59)
      at mount (node_modules/enzyme/build/mount.js:19:10)
      at table (test/unit/client/components/common/tables/Table.js:14:21)
      at Context.<anonymous> (test/unit/client/components/common/tables/Table.js:98:35)

This seemed a simple enough problem to solve by merely adding a corresponding noop set at https://github.com/windyGex/preact-compat-enzyme/blob/master/src/index.js#L19. Unfortunately, this didn't work either, resulting in the following:
     TypeError: Cannot read property 'nodeType' of undefined
      at createReactDOMComponent (node_modules/preact-compat-enzyme/lib/index.js:71:23)
      at updateReactComponent (node_modules/preact-compat-enzyme/lib/index.js:53:28)
      at createReactCompositeComponent (node_modules/preact-compat-enzyme/lib/index.js:46:9)
      at patch (node_modules/preact-compat-enzyme/lib/index.js:34:9)
      at Table.get (node_modules/preact-compat-enzyme/lib/index.js:28:10)
      at internalInstanceOrComponent (node_modules/enzyme/build/MountedTraversal.js:175:18)
      at treeFilter (node_modules/enzyme/build/MountedTraversal.js:221:40)
      at ReactWrapper.<anonymous> (node_modules/enzyme/build/ReactWrapper.js:62:12)
      at node_modules/enzyme/build/ReactWrapper.js:1270:21
      at Array.map (native)
      at ReactWrapper.flatMap (node_modules/enzyme/build/ReactWrapper.js:1269:37)
      at ComplexSelector.findWhereUnwrapped (node_modules/enzyme/build/ReactWrapper.js:61:18)
      at recurseSelector (node_modules/enzyme/build/ComplexSelector.js:51:37)
      at ComplexSelector.handleSelectors (node_modules/enzyme/build/ComplexSelector.js:113:22)
      at ComplexSelector.find (node_modules/enzyme/build/ComplexSelector.js:129:23)
      at ReactWrapper.find (node_modules/enzyme/build/ReactWrapper.js:577:37)
      at Context.<anonymous> (test/unit/client/components/common/tables/Table.js:98:35)

I did some mucking about to see if I could come up with a sscce and successfully reproduced the issue with the following test case:
    it.only('Break preact-compat-enzyme', () => {
        class Test extends React.Component {
            render() {
                return (<div />);
            }
        }

        const test = mount(<Test />);
        const result = test.find('div');
    });

The issue arises when we call test.find(...). If I remove that line, the issue goes away. If I alter the find in any way, the issue remains.
Unfortunately, I'm not up on (p)react internals and how all that works, so I'm not much help beyond that point, other than being able to do as instructed and try new things!
Thanks in advance for any insight

Have you set up alias? Perhaps still working under react.

Ack. Forgot about this ticket. I resolved this a couple days after posting by using Babel's module-alias plugin. Prior to that, as you suspect, React was being used rather than Preact. Thanks!


Microsoft Authenticator Being Blocked by Energized Pro

Hi Just after yesterday's update to the filter, the Microsoft Authenticator app seems not to be working on Android.
When you try to refresh it gives you an error "Error checking for Notifications".
I am using Adguard, and once I turn off the Energized Protection filter it starts working for me.
The filter being Used: Energized Blu Protection
I think that a domain used by Microsoft authenticator is being blocked. This should not be blocked and used to work fine a few days ago.
Can you please take a look and advice?

This issues is resolved now. Also I am no longer using Energized Filters.


fix: multiple of float number causes precision error

fix koishijs/koishi#1123

Oh, it seems like there will still be lost precision.

I think this problem can't be fundamentally solved except by using decimal number library.


refactor(reactivity): remove targetMap.  manage target deps like vue2.

Is this bring better performance and lower the memory usage?


update Chinese translation

Resolved conflicts, otherwise looks good to me.

@HarrisonMayotte this should not have been merged, please validate the JSON before merging these.

I've gone ahead and reverted that @ermalsh and am reopening this one.